diff options
author | Victor Stinner <vstinner@redhat.com> | 2019-07-03 09:12:27 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-07-03 09:12:27 (GMT) |
commit | 74c9dd57771f4f061ee83b069c8e7b37de41246b (patch) | |
tree | 242a627f7b7bf36fd594c7f10b546b0a1f8de51a /Lib/distutils | |
parent | 684cb47fffb7af3ac50cb077f6d2a095c9ce20b4 (diff) | |
download | cpython-74c9dd57771f4f061ee83b069c8e7b37de41246b.zip cpython-74c9dd57771f4f061ee83b069c8e7b37de41246b.tar.gz cpython-74c9dd57771f4f061ee83b069c8e7b37de41246b.tar.bz2 |
bpo-37421: Fix test_distutils.test_build_ext() (GH-14564)
test_distutils.test_build_ext() is now able to remove the temporary
directory on Windows: don't import the newly built C extension ("xx")
in the current process, but test it in a separated process.
Diffstat (limited to 'Lib/distutils')
-rw-r--r-- | Lib/distutils/tests/support.py | 5 | ||||
-rw-r--r-- | Lib/distutils/tests/test_build_ext.py | 51 |
2 files changed, 33 insertions, 23 deletions
diff --git a/Lib/distutils/tests/support.py b/Lib/distutils/tests/support.py index 7385c6b..0413098 100644 --- a/Lib/distutils/tests/support.py +++ b/Lib/distutils/tests/support.py @@ -6,6 +6,7 @@ import tempfile import unittest import sysconfig from copy import deepcopy +import test.support from distutils import log from distutils.log import DEBUG, INFO, WARN, ERROR, FATAL @@ -64,8 +65,8 @@ class TempdirManager(object): os.chdir(self.old_cwd) super().tearDown() while self.tempdirs: - d = self.tempdirs.pop() - shutil.rmtree(d, os.name in ('nt', 'cygwin')) + tmpdir = self.tempdirs.pop() + test.support.rmtree(tmpdir) def mkdtemp(self): """Create a temporary directory that will be cleaned up. diff --git a/Lib/distutils/tests/test_build_ext.py b/Lib/distutils/tests/test_build_ext.py index 88847f9..52d36b2 100644 --- a/Lib/distutils/tests/test_build_ext.py +++ b/Lib/distutils/tests/test_build_ext.py @@ -15,6 +15,7 @@ from distutils.errors import ( import unittest from test import support +from test.support.script_helper import assert_python_ok # http://bugs.python.org/issue4373 # Don't load the xx module more than once. @@ -26,11 +27,8 @@ class BuildExtTestCase(TempdirManager, unittest.TestCase): def setUp(self): # Create a simple test environment - # Note that we're making changes to sys.path super(BuildExtTestCase, self).setUp() self.tmp_dir = self.mkdtemp() - self.sys_path = sys.path, sys.path[:] - sys.path.append(self.tmp_dir) import site self.old_user_base = site.USER_BASE site.USER_BASE = self.mkdtemp() @@ -40,15 +38,11 @@ class BuildExtTestCase(TempdirManager, # bpo-30132: On Windows, a .pdb file may be created in the current # working directory. Create a temporary working directory to cleanup # everything at the end of the test. - self.temp_cwd = support.temp_cwd() - self.temp_cwd.__enter__() - self.addCleanup(self.temp_cwd.__exit__, None, None, None) + change_cwd = support.change_cwd(self.tmp_dir) + change_cwd.__enter__() + self.addCleanup(change_cwd.__exit__, None, None, None) def tearDown(self): - # Get everything back to normal - support.unload('xx') - sys.path = self.sys_path[0] - sys.path[:] = self.sys_path[1] import site site.USER_BASE = self.old_user_base from distutils.command import build_ext @@ -88,19 +82,34 @@ class BuildExtTestCase(TempdirManager, else: ALREADY_TESTED = type(self).__name__ - import xx + code = textwrap.dedent(f""" + tmp_dir = {self.tmp_dir!r} - for attr in ('error', 'foo', 'new', 'roj'): - self.assertTrue(hasattr(xx, attr)) + import sys + import unittest + from test import support - self.assertEqual(xx.foo(2, 5), 7) - self.assertEqual(xx.foo(13,15), 28) - self.assertEqual(xx.new().demo(), None) - if support.HAVE_DOCSTRINGS: - doc = 'This is a template module just for instruction.' - self.assertEqual(xx.__doc__, doc) - self.assertIsInstance(xx.Null(), xx.Null) - self.assertIsInstance(xx.Str(), xx.Str) + sys.path.insert(0, tmp_dir) + import xx + + class Tests(unittest.TestCase): + def test_xx(self): + for attr in ('error', 'foo', 'new', 'roj'): + self.assertTrue(hasattr(xx, attr)) + + self.assertEqual(xx.foo(2, 5), 7) + self.assertEqual(xx.foo(13,15), 28) + self.assertEqual(xx.new().demo(), None) + if support.HAVE_DOCSTRINGS: + doc = 'This is a template module just for instruction.' + self.assertEqual(xx.__doc__, doc) + self.assertIsInstance(xx.Null(), xx.Null) + self.assertIsInstance(xx.Str(), xx.Str) + + + unittest.main() + """) + assert_python_ok('-c', code) def test_solaris_enable_shared(self): dist = Distribution({'name': 'xx'}) |