]> granicus.if.org Git - python/commitdiff
Revert "bpo-29763: Use unittest cleanup in test_site (GH-841)" (GH-942)
authorZachary Ware <zachary.ware@gmail.com>
Sat, 1 Apr 2017 06:29:31 +0000 (01:29 -0500)
committerGitHub <noreply@github.com>
Sat, 1 Apr 2017 06:29:31 +0000 (01:29 -0500)
This reverts commit b94d7fd4efa877d649cea9c8125c8869ffe0c32d.

Lib/test/test_site.py

index 78d59e290daff66efbe9c4b6b6a955fbebcbd564..342ec9e43d5de30ad0e1ec38cb71f7755cb1214e 100644 (file)
@@ -17,7 +17,6 @@ import urllib.error
 import shutil
 import subprocess
 import sysconfig
-import tempfile
 from copy import copy
 
 # These tests are not particularly useful if Python was invoked with -S.
@@ -490,25 +489,29 @@ class StartupImportTests(unittest.TestCase):
             'import site, sys; site.enablerlcompleter(); sys.exit(hasattr(sys, "__interactivehook__"))']).wait()
         self.assertTrue(r, "'__interactivehook__' not added by enablerlcompleter()")
 
-
-@unittest.skipUnless(sys.platform == 'win32', "only supported on Windows")
-class _pthFileTests(unittest.TestCase):
-
+    @classmethod
     def _create_underpth_exe(self, lines):
-        self.temp_dir = tempfile.TemporaryDirectory()
-        self.addCleanup(self.temp_dir.cleanup)
-        exe_file = os.path.join(
-            self.temp_dir.name,
-            os.path.split(sys.executable)[1],
-        )
+        exe_file = os.path.join(os.getenv('TEMP'), os.path.split(sys.executable)[1])
         shutil.copy(sys.executable, exe_file)
 
         _pth_file = os.path.splitext(exe_file)[0] + '._pth'
-        with open(_pth_file, 'w') as f:
-            for line in lines:
-                print(line, file=f)
-        return exe_file
+        try:
+            with open(_pth_file, 'w') as f:
+                for line in lines:
+                    print(line, file=f)
+            return exe_file
+        except:
+            test.support.unlink(_pth_file)
+            test.support.unlink(exe_file)
+            raise
+
+    @classmethod
+    def _cleanup_underpth_exe(self, exe_file):
+        _pth_file = os.path.splitext(exe_file)[0] + '._pth'
+        test.support.unlink(_pth_file)
+        test.support.unlink(exe_file)
 
+    @classmethod
     def _calc_sys_path_for_underpth_nosite(self, sys_prefix, lines):
         sys_path = []
         for line in lines:
@@ -518,6 +521,7 @@ class _pthFileTests(unittest.TestCase):
             sys_path.append(abs_path)
         return sys_path
 
+    @unittest.skipUnless(sys.platform == 'win32', "only supported on Windows")
     def test_underpth_nosite_file(self):
         libpath = os.path.dirname(os.path.dirname(encodings.__file__))
         exe_prefix = os.path.dirname(sys.executable)
@@ -532,16 +536,20 @@ class _pthFileTests(unittest.TestCase):
             os.path.dirname(exe_file),
             pth_lines)
 
-        env = os.environ.copy()
-        env['PYTHONPATH'] = 'from-env'
-        env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH'))
-        rc = subprocess.call([exe_file, '-c',
-            'import sys; sys.exit(sys.flags.no_site and '
-            'len(sys.path) > 200 and '
-            'sys.path == %r)' % sys_path,
-            ], env=env)
+        try:
+            env = os.environ.copy()
+            env['PYTHONPATH'] = 'from-env'
+            env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH'))
+            rc = subprocess.call([exe_file, '-c',
+                'import sys; sys.exit(sys.flags.no_site and '
+                'len(sys.path) > 200 and '
+                'sys.path == %r)' % sys_path,
+                ], env=env)
+        finally:
+            self._cleanup_underpth_exe(exe_file)
         self.assertTrue(rc, "sys.path is incorrect")
 
+    @unittest.skipUnless(sys.platform == 'win32', "only supported on Windows")
     def test_underpth_file(self):
         libpath = os.path.dirname(os.path.dirname(encodings.__file__))
         exe_prefix = os.path.dirname(sys.executable)
@@ -553,17 +561,20 @@ class _pthFileTests(unittest.TestCase):
             'import site'
         ])
         sys_prefix = os.path.dirname(exe_file)
-        env = os.environ.copy()
-        env['PYTHONPATH'] = 'from-env'
-        env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH'))
-        rc = subprocess.call([exe_file, '-c',
-            'import sys; sys.exit(not sys.flags.no_site and '
-            '%r in sys.path and %r in sys.path and %r not in sys.path and '
-            'all("\\r" not in p and "\\n" not in p for p in sys.path))' % (
-                os.path.join(sys_prefix, 'fake-path-name'),
-                libpath,
-                os.path.join(sys_prefix, 'from-env'),
-            )], env=env)
+        try:
+            env = os.environ.copy()
+            env['PYTHONPATH'] = 'from-env'
+            env['PATH'] = '{};{}'.format(exe_prefix, os.getenv('PATH'))
+            rc = subprocess.call([exe_file, '-c',
+                'import sys; sys.exit(not sys.flags.no_site and '
+                '%r in sys.path and %r in sys.path and %r not in sys.path and '
+                'all("\\r" not in p and "\\n" not in p for p in sys.path))' % (
+                    os.path.join(sys_prefix, 'fake-path-name'),
+                    libpath,
+                    os.path.join(sys_prefix, 'from-env'),
+                )], env=env)
+        finally:
+            self._cleanup_underpth_exe(exe_file)
         self.assertTrue(rc, "sys.path is incorrect")