From 108a8d842fc1066a8ab1c0c7264621f1cfb505d5 Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Mon, 24 Jun 2019 23:48:37 +0800 Subject: [PATCH 1/2] gobject/tests/mkenums.py: Fix _write_rspfile() The 'return f.name' should be in the same level as the body of 'with tempfile.NamedTemporaryFile(...) as f:' --- gobject/tests/mkenums.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gobject/tests/mkenums.py b/gobject/tests/mkenums.py index 9b4632497..84c1aa580 100644 --- a/gobject/tests/mkenums.py +++ b/gobject/tests/mkenums.py @@ -72,7 +72,7 @@ class TestMkenums(unittest.TestCase): print('Response file contains:', contents) f.write(contents) f.flush() - return f.name + return f.name def runMkenums(self, *args): if self.rspfile: From 75e3f92cd0b9ea17a29179d1dc31b887b9733aee Mon Sep 17 00:00:00 2001 From: Chun-wei Fan Date: Mon, 24 Jun 2019 18:33:39 +0800 Subject: [PATCH 2/2] 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 | 23 +++++++++++++++++++---- gobject/tests/mkenums.py | 29 ++++++++++++++++++++++------- 2 files changed, 41 insertions(+), 11 deletions(-) diff --git a/gobject/tests/genmarshal.py b/gobject/tests/genmarshal.py index 0da61f3a2..749bd25c4 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,15 @@ 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 +170,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..5f28b9cc6 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,15 @@ 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 +124,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 +205,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 +396,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'))