[Python-checkins] bpo-37421: Fix test_distutils.test_build_ext() (GH-14564)

Miss Islington (bot) webhook-mailer at python.org
Wed Jul 3 05:48:21 EDT 2019


https://github.com/python/cpython/commit/0aefba7f99f0fd9bcb3328a5919e07f9e03676b0
commit: 0aefba7f99f0fd9bcb3328a5919e07f9e03676b0
branch: 3.8
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: GitHub <noreply at github.com>
date: 2019年07月03日T02:48:14-07:00
summary:
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.
(cherry picked from commit 74c9dd57771f4f061ee83b069c8e7b37de41246b)
Co-authored-by: Victor Stinner <vstinner at redhat.com>
files:
A Misc/NEWS.d/next/Tests/2019-07-03-00-05-28.bpo-37421.ORGRSG.rst
M Lib/distutils/tests/support.py
M Lib/distutils/tests/test_build_ext.py
diff --git a/Lib/distutils/tests/support.py b/Lib/distutils/tests/support.py
index 7385c6bbf671..041309851d0f 100644
--- a/Lib/distutils/tests/support.py
+++ b/Lib/distutils/tests/support.py
@@ -6,6 +6,7 @@
 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 @@ def tearDown(self):
 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 88847f9e9aa7..52d36b2484f4 100644
--- a/Lib/distutils/tests/test_build_ext.py
+++ b/Lib/distutils/tests/test_build_ext.py
@@ -15,6 +15,7 @@
 
 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 @@ def setUp(self):
 # 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 @@ def test_build_ext(self):
 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'})
diff --git a/Misc/NEWS.d/next/Tests/2019-07-03-00-05-28.bpo-37421.ORGRSG.rst b/Misc/NEWS.d/next/Tests/2019-07-03-00-05-28.bpo-37421.ORGRSG.rst
new file mode 100644
index 000000000000..8610509e4b72
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-07-03-00-05-28.bpo-37421.ORGRSG.rst
@@ -0,0 +1,3 @@
+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.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /