[glib/fix-mkenums-genmarshal-test-windows: 4/4] GObject: Fix mkenums.py and genmarshal.py tests on Windows
- From: Chun-wei Fan <fanchunwei src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib/fix-mkenums-genmarshal-test-windows: 4/4] GObject: Fix mkenums.py and genmarshal.py tests on Windows
- Date: Mon, 24 Jun 2019 16:06:01 +0000 (UTC)
commit 9ae14fba7421dfa07cedaf2aaf40f5eea96f064a
Author: Chun-wei Fan <fanchunwei src gnome org>
Date: Mon Jun 24 18:33:39 2019 +0800
GObject: Fix mkenums.py and genmarshal.py tests on Windows
The two test scripts actually assumed some *NIX paradigms, so we need
to adapt them so that they can work on Windows as well, the changes are
namely:
-Call the glib-mkenums and glib-genmarshal Python scripts with the
Python interpreter, not just relying on shebang lines, on Windows.
This is because the native Windows console (cmd.exe) does not support
shebang lines, for subprocess.run().
-Use NamedTemporaryFile with delete=False, otherwise Windows cannot find
the temp files we need when running the tests.
-Use universal_newlines=True for subprocess.run() so that we do not need
to worry out line ending differences on different systems.
-Make sure we are not in the temp directories we create, where the tests
are being run, upon cleanup. Windows does not like deleting
directories that we are currently in.
gobject/tests/genmarshal.py | 24 ++++++++++++++++++++----
gobject/tests/mkenums.py | 30 +++++++++++++++++++++++-------
2 files changed, 43 insertions(+), 11 deletions(-)
---
diff --git a/gobject/tests/genmarshal.py b/gobject/tests/genmarshal.py
index 0da61f3a2..142ca8afa 100644
--- a/gobject/tests/genmarshal.py
+++ b/gobject/tests/genmarshal.py
@@ -24,6 +24,7 @@ import collections
import os
import shutil
import subprocess
+import sys
import tempfile
from textwrap import dedent
import unittest
@@ -46,9 +47,13 @@ class TestGenmarshal(unittest.TestCase):
parsing and generation code out into a library and unit test that, and
convert this test to just check command line behaviour.
"""
+ # Track the cwd, we want to back out to that to clean up our tempdir
+ cwd = ''
+
def setUp(self):
self.timeout_seconds = 10 # seconds per test
self.tmpdir = tempfile.TemporaryDirectory()
+ self.cwd = os.getcwd()
os.chdir(self.tmpdir.name)
print('tmpdir:', self.tmpdir.name)
if 'G_TEST_BUILDDIR' in os.environ:
@@ -60,10 +65,17 @@ class TestGenmarshal(unittest.TestCase):
print('genmarshal:', self.__genmarshal)
def tearDown(self):
+ os.chdir(self.cwd)
self.tmpdir.cleanup()
def runGenmarshal(self, *args):
argv = [self.__genmarshal]
+
+ # shebang lines are not supported on native
+ # Windows consoles
+ if os.name == 'nt':
+ argv.insert(0, sys.executable)
+
argv.extend(args)
print('Running:', argv)
@@ -71,13 +83,16 @@ class TestGenmarshal(unittest.TestCase):
env['LC_ALL'] = 'C.UTF-8'
print('Environment:', env)
+ # We want to ensure consistent line endings...
info = subprocess.run(argv, timeout=self.timeout_seconds,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
- env=env)
+ env=env,
+ universal_newlines=True)
info.check_returncode()
- out = info.stdout.decode('utf-8').strip()
- err = info.stderr.decode('utf-8').strip()
+
+ out = info.stdout.strip()
+ err = info.stderr.strip()
# Known substitutions for standard boilerplate
subs = {
@@ -156,7 +171,8 @@ class TestGenmarshal(unittest.TestCase):
def runGenmarshalWithList(self, list_contents, *args):
with tempfile.NamedTemporaryFile(dir=self.tmpdir.name,
- suffix='.list') as list_file:
+ suffix='.list',
+ delete=False) as list_file:
# Write out the list.
list_file.write(list_contents.encode('utf-8'))
print(list_file.name + ':', list_contents)
diff --git a/gobject/tests/mkenums.py b/gobject/tests/mkenums.py
index 84c1aa580..dca865dd2 100644
--- a/gobject/tests/mkenums.py
+++ b/gobject/tests/mkenums.py
@@ -24,6 +24,7 @@ import collections
import os
import shutil
import subprocess
+import sys
import tempfile
import textwrap
import unittest
@@ -46,11 +47,14 @@ class TestMkenums(unittest.TestCase):
parsing and generation code out into a library and unit test that, and
convert this test to just check command line behaviour.
"""
+ # Track the cwd, we want to back out to that to clean up our tempdir
+ cwd = ''
rspfile = False
def setUp(self):
self.timeout_seconds = 10 # seconds per test
self.tmpdir = tempfile.TemporaryDirectory()
+ self.cwd = os.getcwd()
os.chdir(self.tmpdir.name)
print('tmpdir:', self.tmpdir.name)
if 'G_TEST_BUILDDIR' in os.environ:
@@ -62,6 +66,7 @@ class TestMkenums(unittest.TestCase):
print('rspfile: {}, mkenums:'.format(self.rspfile), self.__mkenums)
def tearDown(self):
+ os.chdir(self.cwd)
self.tmpdir.cleanup()
def _write_rspfile(self, argv):
@@ -79,6 +84,12 @@ class TestMkenums(unittest.TestCase):
rspfile = self._write_rspfile(args)
args = ['@' + rspfile]
argv = [self.__mkenums]
+
+ # shebang lines are not supported on native
+ # Windows consoles
+ if os.name == 'nt':
+ argv.insert(0, sys.executable)
+
argv.extend(args)
print('Running:', argv)
@@ -86,13 +97,16 @@ class TestMkenums(unittest.TestCase):
env['LC_ALL'] = 'C.UTF-8'
print('Environment:', env)
+ # We want to ensure consistent line endings...
info = subprocess.run(argv, timeout=self.timeout_seconds,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
- env=env)
+ env=env,
+ universal_newlines=True)
info.check_returncode()
- out = info.stdout.decode('utf-8').strip()
- err = info.stderr.decode('utf-8').strip()
+
+ out = info.stdout.strip()
+ err = info.stderr.strip()
# Known substitutions for standard boilerplate
subs = {
@@ -111,7 +125,8 @@ class TestMkenums(unittest.TestCase):
def runMkenumsWithTemplate(self, template_contents, *args):
with tempfile.NamedTemporaryFile(dir=self.tmpdir.name,
- suffix='.template') as template_file:
+ suffix='.template',
+ delete=False) as template_file:
# Write out the template.
template_file.write(template_contents.encode('utf-8'))
print(template_file.name + ':', template_contents)
@@ -191,7 +206,8 @@ file-tail
def runMkenumsWithHeader(self, h_contents, encoding='utf-8'):
with tempfile.NamedTemporaryFile(dir=self.tmpdir.name,
- suffix='.h') as h_file:
+ suffix='.h',
+ delete=False) as h_file:
# Write out the header to be scanned.
h_file.write(h_contents.encode(encoding))
print(h_file.name + ':', h_contents)
@@ -381,9 +397,9 @@ comment: {standard_bottom_comment}
'''
with tempfile.NamedTemporaryFile(dir=self.tmpdir.name,
- suffix='1.h') as h_file1, \
+ suffix='1.h', delete=False) as h_file1, \
tempfile.NamedTemporaryFile(dir=self.tmpdir.name,
- suffix='2.h') as h_file2:
+ suffix='2.h', delete=False) as h_file2:
# Write out the headers.
h_file1.write(h_contents1.encode('utf-8'))
h_file2.write(h_contents2.encode('utf-8'))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]