[Python-checkins] r69609 - in python/trunk: Lib/distutils/tests/support.py Lib/distutils/tests/test_build_ext.py Lib/distutils/tests/test_config.py Lib/distutils/tests/test_dir_util.py Lib/distutils/tests/test_dist.py Lib/distutils/tests/test_file_util.py Lib/distutils/tests/test_sdist.py Misc/NEWS

tarek.ziade python-checkins at python.org
Sat Feb 14 15:10:24 CET 2009


Author: tarek.ziade
Date: Sat Feb 14 15:10:23 2009
New Revision: 69609

Log:
Fix for #5257: refactored all tests in distutils, so they use a temporary directory.

Modified:
   python/trunk/Lib/distutils/tests/support.py
   python/trunk/Lib/distutils/tests/test_build_ext.py
   python/trunk/Lib/distutils/tests/test_config.py
   python/trunk/Lib/distutils/tests/test_dir_util.py
   python/trunk/Lib/distutils/tests/test_dist.py
   python/trunk/Lib/distutils/tests/test_file_util.py
   python/trunk/Lib/distutils/tests/test_sdist.py
   python/trunk/Misc/NEWS

Modified: python/trunk/Lib/distutils/tests/support.py
==============================================================================
--- python/trunk/Lib/distutils/tests/support.py	(original)
+++ python/trunk/Lib/distutils/tests/support.py	Sat Feb 14 15:10:23 2009
@@ -1,5 +1,5 @@
 """Support code for distutils test cases."""
-
+import os
 import shutil
 import tempfile
 
@@ -31,7 +31,7 @@
         super(TempdirManager, self).tearDown()
         while self.tempdirs:
             d = self.tempdirs.pop()
-            shutil.rmtree(d)
+            shutil.rmtree(d, os.name in ('nt', 'cygwin'))
 
     def mkdtemp(self):
         """Create a temporary directory that will be cleaned up.

Modified: python/trunk/Lib/distutils/tests/test_build_ext.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_build_ext.py	(original)
+++ python/trunk/Lib/distutils/tests/test_build_ext.py	Sat Feb 14 15:10:23 2009
@@ -7,6 +7,7 @@
 from distutils.core import Extension, Distribution
 from distutils.command.build_ext import build_ext
 from distutils import sysconfig
+from distutils.tests import support
 
 import unittest
 from test import test_support
@@ -19,11 +20,12 @@
     srcdir = sysconfig.get_config_var('srcdir')
     return os.path.join(srcdir, 'Modules', 'xxmodule.c')
 
-class BuildExtTestCase(unittest.TestCase):
+class BuildExtTestCase(support.TempdirManager, unittest.TestCase):
     def setUp(self):
         # Create a simple test environment
         # Note that we're making changes to sys.path
-        self.tmp_dir = tempfile.mkdtemp(prefix="pythontest_")
+        support.TempdirManager.setUp(self)
+        self.tmp_dir = self.mkdtemp()
         self.sys_path = sys.path[:]
         sys.path.append(self.tmp_dir)
         shutil.copy(_get_source_filename(), self.tmp_dir)
@@ -74,8 +76,7 @@
         # Get everything back to normal
         test_support.unload('xx')
         sys.path = self.sys_path
-        # XXX on Windows the test leaves a directory with xx module in TEMP
-        shutil.rmtree(self.tmp_dir, os.name == 'nt' or sys.platform == 'cygwin')
+        support.TempdirManager.tearDown(self)
 
     def test_solaris_enable_shared(self):
         dist = Distribution({'name': 'xx'})

Modified: python/trunk/Lib/distutils/tests/test_config.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_config.py	(original)
+++ python/trunk/Lib/distutils/tests/test_config.py	Sat Feb 14 15:10:23 2009
@@ -2,6 +2,8 @@
 import sys
 import os
 import unittest
+import tempfile
+import shutil
 
 from distutils.core import PyPIRCCommand
 from distutils.core import Distribution
@@ -49,13 +51,15 @@
 
     def setUp(self):
         """Patches the environment."""
+        support.TempdirManager.setUp(self)
+
         if os.environ.has_key('HOME'):
             self._old_home = os.environ['HOME']
         else:
             self._old_home = None
-        curdir = os.path.dirname(__file__)
-        os.environ['HOME'] = curdir
-        self.rc = os.path.join(curdir, '.pypirc')
+        self.tmp_dir = self.mkdtemp()
+        os.environ['HOME'] = self.tmp_dir
+        self.rc = os.path.join(self.tmp_dir, '.pypirc')
         self.dist = Distribution()
 
         class command(PyPIRCCommand):
@@ -74,9 +78,8 @@
             del os.environ['HOME']
         else:
             os.environ['HOME'] = self._old_home
-        if os.path.exists(self.rc):
-            os.remove(self.rc)
         set_threshold(self.old_threshold)
+        support.TempdirManager.tearDown(self)
 
     def test_server_registration(self):
         # This test makes sure PyPIRCCommand knows how to:

Modified: python/trunk/Lib/distutils/tests/test_dir_util.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_dir_util.py	(original)
+++ python/trunk/Lib/distutils/tests/test_dir_util.py	Sat Feb 14 15:10:23 2009
@@ -9,8 +9,9 @@
 from distutils.dir_util import copy_tree
 
 from distutils import log
+from distutils.tests import support
 
-class DirUtilTestCase(unittest.TestCase):
+class DirUtilTestCase(support.TempdirManager, unittest.TestCase):
 
     def _log(self, msg, *args):
         if len(args) > 0:
@@ -19,18 +20,18 @@
             self._logs.append(msg)
 
     def setUp(self):
+        support.TempdirManager.setUp(self)
         self._logs = []
-        self.root_target = os.path.join(os.path.dirname(__file__), 'deep')
+        tmp_dir = self.mkdtemp()
+        self.root_target = os.path.join(tmp_dir, 'deep')
         self.target = os.path.join(self.root_target, 'here')
-        self.target2 = os.path.join(os.path.dirname(__file__), 'deep2')
+        self.target2 = os.path.join(tmp_dir, 'deep2')
         self.old_log = log.info
         log.info = self._log
 
     def tearDown(self):
-        for target in (self.target, self.target2):
-            if os.path.exists(target):
-                shutil.rmtree(target)
         log.info = self.old_log
+        support.TempdirManager.tearDown(self)
 
     def test_mkpath_remove_tree_verbosity(self):
 

Modified: python/trunk/Lib/distutils/tests/test_dist.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_dist.py	(original)
+++ python/trunk/Lib/distutils/tests/test_dist.py	Sat Feb 14 15:10:23 2009
@@ -11,7 +11,7 @@
 import warnings
 
 from test.test_support import TESTFN
-
+from distutils.tests import support
 
 class test_dist(distutils.cmd.Command):
     """Sample distutils extension command."""
@@ -36,14 +36,16 @@
         return self._config_files
 
 
-class DistributionTestCase(unittest.TestCase):
+class DistributionTestCase(support.TempdirManager, unittest.TestCase):
 
     def setUp(self):
+        support.TempdirManager.setUp(self)
         self.argv = sys.argv[:]
         del sys.argv[1:]
 
     def tearDown(self):
         sys.argv[:] = self.argv
+        support.TempdirManager.tearDown(self)
 
     def create_distribution(self, configfiles=()):
         d = TestDistribution()
@@ -100,7 +102,8 @@
 
     def test_write_pkg_file(self):
         # Check DistributionMetadata handling of Unicode fields
-        my_file = os.path.join(os.path.dirname(__file__), 'f')
+        tmp_dir = self.mkdtemp()
+        my_file = os.path.join(tmp_dir, 'f')
         klass = distutils.dist.Distribution
 
         dist = klass(attrs={'author': u'Mister Café',
@@ -113,11 +116,7 @@
         # let's make sure the file can be written
         # with Unicode fields. they are encoded with
         # PKG_INFO_ENCODING
-        try:
-            dist.metadata.write_pkg_file(open(my_file, 'w'))
-        finally:
-            if os.path.exists(my_file):
-                os.remove(my_file)
+        dist.metadata.write_pkg_file(open(my_file, 'w'))
 
         # regular ascii is of course always usable
         dist = klass(attrs={'author': 'Mister Cafe',
@@ -126,11 +125,8 @@
                             'description': 'Cafe torrefie',
                             'long_description': 'Hehehe'})
 
-        try:
-            dist.metadata.write_pkg_file(open(my_file, 'w'))
-        finally:
-            if os.path.exists(my_file):
-                os.remove(my_file)
+        my_file2 = os.path.join(tmp_dir, 'f2')
+        dist.metadata.write_pkg_file(open(my_file, 'w'))
 
     def test_empty_options(self):
         # an empty options dictionary should not stay in the
@@ -155,7 +151,7 @@
 
         self.assertEquals(len(warns), 0)
 
-class MetadataTestCase(unittest.TestCase):
+class MetadataTestCase(support.TempdirManager, unittest.TestCase):
 
     def test_simple_metadata(self):
         attrs = {"name": "package",
@@ -254,8 +250,8 @@
         else:
             user_filename = "pydistutils.cfg"
 
-        curdir = os.path.dirname(__file__)
-        user_filename = os.path.join(curdir, user_filename)
+        temp_dir = self.mkdtemp()
+        user_filename = os.path.join(temp_dir, user_filename)
         f = open(user_filename, 'w')
         f.write('.')
         f.close()
@@ -265,7 +261,7 @@
 
             # linux-style
             if sys.platform in ('linux', 'darwin'):
-                os.environ['HOME'] = curdir
+                os.environ['HOME'] = temp_dir
                 files = dist.find_config_files()
                 self.assert_(user_filename in files)
 

Modified: python/trunk/Lib/distutils/tests/test_file_util.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_file_util.py	(original)
+++ python/trunk/Lib/distutils/tests/test_file_util.py	Sat Feb 14 15:10:23 2009
@@ -5,8 +5,9 @@
 
 from distutils.file_util import move_file
 from distutils import log
+from distutils.tests import support
 
-class FileUtilTestCase(unittest.TestCase):
+class FileUtilTestCase(support.TempdirManager, unittest.TestCase):
 
     def _log(self, msg, *args):
         if len(args) > 0:
@@ -15,24 +16,20 @@
             self._logs.append(msg)
 
     def setUp(self):
+        support.TempdirManager.setUp(self)
         self._logs = []
         self.old_log = log.info
         log.info = self._log
-        self.source = os.path.join(os.path.dirname(__file__), 'f1')
-        self.target = os.path.join(os.path.dirname(__file__), 'f2')
-        self.target_dir = os.path.join(os.path.dirname(__file__), 'd1')
+        tmp_dir = self.mkdtemp()
+        self.source = os.path.join(tmp_dir, 'f1')
+        self.target = os.path.join(tmp_dir, 'f2')
+        self.target_dir = os.path.join(tmp_dir, 'd1')
 
     def tearDown(self):
         log.info = self.old_log
-        for f in (self.source, self.target, self.target_dir):
-            if os.path.exists(f):
-                if os.path.isfile(f):
-                    os.remove(f)
-                else:
-                    shutil.rmtree(f)
+        support.TempdirManager.tearDown(self)
 
     def test_move_file_verbosity(self):
-
         f = open(self.source, 'w')
         f.write('some content')
         f.close()

Modified: python/trunk/Lib/distutils/tests/test_sdist.py
==============================================================================
--- python/trunk/Lib/distutils/tests/test_sdist.py	(original)
+++ python/trunk/Lib/distutils/tests/test_sdist.py	Sat Feb 14 15:10:23 2009
@@ -5,6 +5,7 @@
 import zipfile
 from os.path import join
 import sys
+import tempfile
 
 from distutils.command.sdist import sdist
 from distutils.core import Distribution
@@ -12,9 +13,6 @@
 from distutils.errors import DistutilsExecError
 from distutils.spawn import find_executable
 
-CURDIR = os.path.dirname(__file__)
-TEMP_PKG = join(CURDIR, 'temppkg')
-
 SETUP_PY = """
 from distutils.core import setup
 import somecode
@@ -29,28 +27,25 @@
 class sdistTestCase(PyPIRCCommandTestCase):
 
     def setUp(self):
+        # PyPIRCCommandTestCase creates a temp dir already
+        # and put it in self.tmp_dir
         PyPIRCCommandTestCase.setUp(self)
+        # setting up an environment
         self.old_path = os.getcwd()
+        os.mkdir(join(self.tmp_dir, 'somecode'))
+        os.mkdir(join(self.tmp_dir, 'dist'))
+        # creating a MANIFEST, a package, and a README
+        self._write(join(self.tmp_dir, 'MANIFEST.in'), MANIFEST_IN)
+        self._write(join(self.tmp_dir, 'README'), 'xxx')
+        self._write(join(self.tmp_dir, 'somecode', '__init__.py'), '#')
+        self._write(join(self.tmp_dir, 'setup.py'), SETUP_PY)
+        os.chdir(self.tmp_dir)
 
     def tearDown(self):
+        # back to normal
         os.chdir(self.old_path)
-        if os.path.exists(TEMP_PKG):
-            shutil.rmtree(TEMP_PKG)
         PyPIRCCommandTestCase.tearDown(self)
 
-    def _init_tmp_pkg(self):
-        if os.path.exists(TEMP_PKG):
-            shutil.rmtree(TEMP_PKG)
-        os.mkdir(TEMP_PKG)
-        os.mkdir(join(TEMP_PKG, 'somecode'))
-        os.mkdir(join(TEMP_PKG, 'dist'))
-        # creating a MANIFEST, a package, and a README
-        self._write(join(TEMP_PKG, 'MANIFEST.in'), MANIFEST_IN)
-        self._write(join(TEMP_PKG, 'README'), 'xxx')
-        self._write(join(TEMP_PKG, 'somecode', '__init__.py'), '#')
-        self._write(join(TEMP_PKG, 'setup.py'), SETUP_PY)
-        os.chdir(TEMP_PKG)
-
     def _write(self, path, content):
         f = open(path, 'w')
         try:
@@ -62,18 +57,17 @@
         # this test creates a package with some vcs dirs in it
         # and launch sdist to make sure they get pruned
         # on all systems
-        self._init_tmp_pkg()
 
         # creating VCS directories with some files in them
-        os.mkdir(join(TEMP_PKG, 'somecode', '.svn'))
-        self._write(join(TEMP_PKG, 'somecode', '.svn', 'ok.py'), 'xxx')
+        os.mkdir(join(self.tmp_dir, 'somecode', '.svn'))
+        self._write(join(self.tmp_dir, 'somecode', '.svn', 'ok.py'), 'xxx')
 
-        os.mkdir(join(TEMP_PKG, 'somecode', '.hg'))
-        self._write(join(TEMP_PKG, 'somecode', '.hg',
+        os.mkdir(join(self.tmp_dir, 'somecode', '.hg'))
+        self._write(join(self.tmp_dir, 'somecode', '.hg',
                          'ok'), 'xxx')
 
-        os.mkdir(join(TEMP_PKG, 'somecode', '.git'))
-        self._write(join(TEMP_PKG, 'somecode', '.git',
+        os.mkdir(join(self.tmp_dir, 'somecode', '.git'))
+        self._write(join(self.tmp_dir, 'somecode', '.git',
                          'ok'), 'xxx')
 
         # now building a sdist
@@ -96,7 +90,7 @@
         cmd.run()
 
         # now let's check what we have
-        dist_folder = join(TEMP_PKG, 'dist')
+        dist_folder = join(self.tmp_dir, 'dist')
         files = os.listdir(dist_folder)
         self.assertEquals(files, ['fake-1.0.zip'])
 
@@ -116,8 +110,6 @@
             find_executable('gzip') is None):
             return
 
-        self._init_tmp_pkg()
-
         # now building a sdist
         dist = Distribution()
         dist.script_name = 'setup.py'
@@ -137,7 +129,7 @@
         cmd.run()
 
         # making sure we have two files
-        dist_folder = join(TEMP_PKG, 'dist')
+        dist_folder = join(self.tmp_dir, 'dist')
         result = os.listdir(dist_folder)
         result.sort()
         self.assertEquals(result,

Modified: python/trunk/Misc/NEWS
==============================================================================
--- python/trunk/Misc/NEWS	(original)
+++ python/trunk/Misc/NEWS	Sat Feb 14 15:10:23 2009
@@ -155,6 +155,9 @@
 Library
 -------
 
+- Issue #5257: refactored all tests in distutils, so they use 
+  support.TempdirManager, to avoid writing in the tests directory.
+
 - Issue #4524: distutils build_script command failed with --with-suffix=3.
   Initial patch by Amaury Forgeot d'Arc.
 


More information about the Python-checkins mailing list