[Python-checkins] distutils2: Merge from trunk

tarek.ziade python-checkins at python.org
Thu Jul 15 01:38:05 CEST 2010


tarek.ziade pushed a453819940a4 to distutils2:

http://hg.python.org/distutils2/rev/a453819940a4
changeset:   362:a453819940a4
parent:      361:abdf466ea00e
parent:      198:0e9228d9bbda
user:        Jeremy Kloth <jeremy.kloth at gmail.com>
date:        Tue Jun 15 10:43:16 2010 -0600
summary:     Merge from trunk
files:       src/distutils2/cmd.py, src/distutils2/command/cmd.py

diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -1,5 +1,5 @@
 .*\.pyc$
 .*\.pyo$
+^src/build
 ^docs/build
 .*\.swp$
-
diff --git a/src/CONTRIBUTORS.txt b/src/CONTRIBUTORS.txt
--- a/src/CONTRIBUTORS.txt
+++ b/src/CONTRIBUTORS.txt
@@ -9,6 +9,7 @@
 
 Thanks to:
 
+- Éric Araujo
 - Pior Bastida
 - Titus Brown
 - Nicolas Cadou
diff --git a/src/distutils2/_backport/tests/__init__.py b/src/distutils2/_backport/tests/__init__.py
--- a/src/distutils2/_backport/tests/__init__.py
+++ b/src/distutils2/_backport/tests/__init__.py
@@ -1,12 +1,13 @@
 import os
 import sys
-import unittest2
+
+from distutils2.tests.support import unittest
 
 
 here = os.path.dirname(__file__)
 
 def test_suite():
-    suite = unittest2.TestSuite()
+    suite = unittest.TestSuite()
     for fn in os.listdir(here):
         if fn.startswith("test") and fn.endswith(".py"):
             modname = "distutils2._backport.tests." + fn[:-3]
diff --git a/src/distutils2/_backport/tests/test_pkgutil.py b/src/distutils2/_backport/tests/test_pkgutil.py
--- a/src/distutils2/_backport/tests/test_pkgutil.py
+++ b/src/distutils2/_backport/tests/test_pkgutil.py
@@ -1,6 +1,5 @@
 # -*- coding: utf-8 -*-
 """Tests for PEP 376 pkgutil functionality"""
-import unittest2
 import sys
 import os
 import csv
@@ -12,13 +11,14 @@
 from test.test_support import run_unittest, TESTFN
 
 import distutils2._backport.pkgutil
+from distutils2.tests.support import unittest
 
 # TODO Add a test for getting a distribution that is provided by another
 #   distribution.
 
 # TODO Add a test for absolute pathed RECORD items (e.g. /etc/myapp/config.ini)
 
-class TestPkgUtilDistribution(unittest2.TestCase):
+class TestPkgUtilDistribution(unittest.TestCase):
     """Tests the pkgutil.Distribution class"""
 
     def setUp(self):
@@ -171,7 +171,7 @@
         self.assertEqual(sorted(found), sorted(distinfo_record_paths))
 
 
-class TestPkgUtilFunctions(unittest2.TestCase):
+class TestPkgUtilFunctions(unittest.TestCase):
     """Tests for the new functionality added in PEP 376."""
 
     def setUp(self):
@@ -371,8 +371,8 @@
 
 
 def test_suite():
-    suite = unittest2.TestSuite()
-    testcase_loader = unittest2.loader.defaultTestLoader.loadTestsFromTestCase
+    suite = unittest.TestSuite()
+    testcase_loader = unittest.loader.defaultTestLoader.loadTestsFromTestCase
     suite.addTest(testcase_loader(TestPkgUtilFunctions))
     suite.addTest(testcase_loader(TestPkgUtilDistribution))
     return suite
@@ -384,8 +384,8 @@
     test_main()
 
 def test_suite():
-    suite = unittest2.TestSuite()
-    testcase_loader = unittest2.loader.defaultTestLoader.loadTestsFromTestCase
+    suite = unittest.TestSuite()
+    testcase_loader = unittest.loader.defaultTestLoader.loadTestsFromTestCase
     suite.addTest(testcase_loader(TestPkgUtilFunctions))
     suite.addTest(testcase_loader(TestPkgUtilDistribution))
     return suite
diff --git a/src/distutils2/_backport/tests/test_sysconfig.py b/src/distutils2/_backport/tests/test_sysconfig.py
--- a/src/distutils2/_backport/tests/test_sysconfig.py
+++ b/src/distutils2/_backport/tests/test_sysconfig.py
@@ -4,7 +4,6 @@
 executing have not been removed.
 
 """
-import unittest2
 import sys
 import os
 import shutil
@@ -19,8 +18,9 @@
                        get_path, get_path_names,
                        _get_default_scheme, _subst_vars, _expand_vars,
                        get_scheme_names, _CONFIG_FILE)
+from distutils2.tests.support import unittest
 
-class TestSysConfig(unittest2.TestCase):
+class TestSysConfig(unittest.TestCase):
 
     def setUp(self):
         """Make a copy of sys.path"""
@@ -97,7 +97,7 @@
         substitution key (which would be weird).
 
         """
-        self.failUnlessEqual(_subst_vars('{py{version}}', {'version': '31'}), '{py31}')
+        self.assertEqual(_subst_vars('{py{version}}', {'version': '31'}), '{py31}')
 
     def test_get_paths(self):
         scheme = get_paths()
@@ -262,7 +262,7 @@
         _expand_globals(config)
 
 def test_suite():
-    return unittest2.makeSuite(TestSysConfig)
+    return unittest.makeSuite(TestSysConfig)
 
 def test_main():
     run_unittest(test_suite())
diff --git a/src/distutils2/cmd.py b/src/distutils2/command/cmd.py
rename from src/distutils2/cmd.py
rename to src/distutils2/command/cmd.py
diff --git a/src/distutils2/command/install_egg_info.py b/src/distutils2/command/install_egg_info.py
--- a/src/distutils2/command/install_egg_info.py
+++ b/src/distutils2/command/install_egg_info.py
@@ -4,7 +4,7 @@
 a package's PKG-INFO metadata."""
 
 
-from distutils2.cmd import Command
+from distutils2.command.cmd import Command
 from distutils2 import log
 from distutils2._backport.shutil import rmtree
 import os, sys, re
diff --git a/src/distutils2/config.py b/src/distutils2/config.py
--- a/src/distutils2/config.py
+++ b/src/distutils2/config.py
@@ -6,7 +6,7 @@
 import os
 from ConfigParser import ConfigParser
 
-from distutils2.cmd import Command
+from distutils2.command.cmd import Command
 
 DEFAULT_PYPIRC = """\
 [distutils]
diff --git a/src/distutils2/core.py b/src/distutils2/core.py
--- a/src/distutils2/core.py
+++ b/src/distutils2/core.py
@@ -17,7 +17,7 @@
 
 # Mainly import these so setup scripts can "from distutils2.core import" them.
 from distutils2.dist import Distribution
-from distutils2.cmd import Command
+from distutils2.command.cmd import Command
 from distutils2.config import PyPIRCCommand
 from distutils2.extension import Extension
 
diff --git a/src/distutils2/dist.py b/src/distutils2/dist.py
--- a/src/distutils2/dist.py
+++ b/src/distutils2/dist.py
@@ -493,7 +493,7 @@
         None if the user asked for help on this command.
         """
         # late import because of mutual dependence between these modules
-        from distutils2.cmd import Command
+        from distutils2.command.cmd import Command
 
         # Pull the current command from the head of the command line
         command = args[0]
@@ -607,7 +607,7 @@
         """
         # late import because of mutual dependence between these modules
         from distutils2.core import gen_usage
-        from distutils2.cmd import Command
+        from distutils2.command.cmd import Command
 
         if global_options:
             if display_options:
@@ -904,7 +904,7 @@
 
         Returns the reinitialized command object.
         """
-        from distutils2.cmd import Command
+        from distutils2.command.cmd import Command
         if not isinstance(command, Command):
             command_name = command
             command = self.get_command_obj(command_name)
diff --git a/src/distutils2/tests/__init__.py b/src/distutils2/tests/__init__.py
--- a/src/distutils2/tests/__init__.py
+++ b/src/distutils2/tests/__init__.py
@@ -1,20 +1,25 @@
-"""Test suite for distutils.
+"""Test suite for distutils2.
 
 This test suite consists of a collection of test modules in the
-distutils.tests package.  Each test module has a name starting with
+distutils2.tests package.  Each test module has a name starting with
 'test' and contains a function test_suite().  The function is expected
-to return an initialized unittest2.TestSuite instance.
+to return an initialized unittest.TestSuite instance.
 
-Tests for the command classes in the distutils.command package are
-included in distutils.tests as well, instead of using a separate
-distutils.command.tests package, since command identification is done
+Tests for the command classes in the distutils2.command package are
+included in distutils2.tests as well, instead of using a separate
+distutils2.command.tests package, since command identification is done
 by import rather than matching pre-defined names.
 
+Utility code is included in distutils2.tests.support.  Always import
+unittest from that module, it will be the right version (standard
+library unittest for 2.7 and higher, third-party unittest2 release for
+older versions).
 """
+
 import os
 import sys
 import warnings
-import unittest2
+from distutils2.tests.support import unittest
 
 from test.test_support import TESTFN    # use TESTFN from stdlib/test_support.
 
@@ -23,7 +28,7 @@
 verbose = 1
 
 def test_suite():
-    suite = unittest2.TestSuite()
+    suite = unittest.TestSuite()
     for fn in os.listdir(here):
         if fn.startswith("test") and fn.endswith(".py"):
             modname = "distutils2.tests." + fn[:-3]
@@ -42,17 +47,17 @@
 
 class BasicTestRunner:
     def run(self, test):
-        result = unittest2.TestResult()
+        result = unittest.TestResult()
         test(result)
         return result
 
 
 def _run_suite(suite, verbose_=1):
-    """Run tests from a unittest2.TestSuite-derived class."""
+    """Run tests from a unittest.TestSuite-derived class."""
     global verbose
     verbose = verbose_
     if verbose_:
-        runner = unittest2.TextTestRunner(sys.stdout, verbosity=2)
+        runner = unittest.TextTestRunner(sys.stdout, verbosity=2)
     else:
         runner = BasicTestRunner()
 
@@ -68,22 +73,22 @@
 
 
 def run_unittest(classes, verbose_=1):
-    """Run tests from unittest2.TestCase-derived classes.
+    """Run tests from unittest.TestCase-derived classes.
 
-    Extracted from stdlib test.test_support and modified to support unittest2.
+    Extracted from stdlib test.test_support and modified to support unittest.
     """
-    valid_types = (unittest2.TestSuite, unittest2.TestCase)
-    suite = unittest2.TestSuite()
+    valid_types = (unittest.TestSuite, unittest.TestCase)
+    suite = unittest.TestSuite()
     for cls in classes:
         if isinstance(cls, str):
             if cls in sys.modules:
-                suite.addTest(unittest2.findTestCases(sys.modules[cls]))
+                suite.addTest(unittest.findTestCases(sys.modules[cls]))
             else:
                 raise ValueError("str arguments must be keys in sys.modules")
         elif isinstance(cls, valid_types):
             suite.addTest(cls)
         else:
-            suite.addTest(unittest2.makeSuite(cls))
+            suite.addTest(unittest.makeSuite(cls))
     _run_suite(suite, verbose_)
 
 
@@ -128,4 +133,4 @@
 
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/support.py b/src/distutils2/tests/support.py
--- a/src/distutils2/tests/support.py
+++ b/src/distutils2/tests/support.py
@@ -1,5 +1,12 @@
-"""Support code for distutils test cases."""
+"""Support code for distutils2 test cases.
+
+Always import unittest from this module, it will be the right version
+(standard library unittest for 2.7 and higher, third-party unittest2
+release for older versions).
+"""
+
 import os
+import sys
 import shutil
 import tempfile
 from copy import deepcopy
@@ -9,6 +16,13 @@
 from distutils2.log import DEBUG, INFO, WARN, ERROR, FATAL
 from distutils2.core import Distribution
 
+if sys.version_info >= (2, 7):
+    # improved unittest package from 2.7's standard library
+    import unittest
+else:
+    # external release of same package for older versions
+    import unittest2 as unittest
+
 class LoggingSilencer(object):
 
     def setUp(self):
diff --git a/src/distutils2/tests/test_bdist.py b/src/distutils2/tests/test_bdist.py
--- a/src/distutils2/tests/test_bdist.py
+++ b/src/distutils2/tests/test_bdist.py
@@ -1,5 +1,4 @@
 """Tests for distutils.command.bdist."""
-import unittest2
 import sys
 import os
 import tempfile
@@ -10,12 +9,13 @@
 from distutils2.core import Distribution
 from distutils2.command.bdist import bdist
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 from distutils2.spawn import find_executable
 from distutils2 import spawn
 from distutils2.errors import DistutilsExecError
 
 class BuildTestCase(support.TempdirManager,
-                    unittest2.TestCase):
+                    unittest.TestCase):
 
     def test_formats(self):
 
@@ -38,7 +38,7 @@
         self.assertEquals(founded, formats)
 
 def test_suite():
-    return unittest2.makeSuite(BuildTestCase)
+    return unittest.makeSuite(BuildTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_bdist_dumb.py b/src/distutils2/tests/test_bdist_dumb.py
--- a/src/distutils2/tests/test_bdist_dumb.py
+++ b/src/distutils2/tests/test_bdist_dumb.py
@@ -1,6 +1,5 @@
 """Tests for distutils.command.bdist_dumb."""
 
-import unittest2
 import sys
 import os
 
@@ -12,6 +11,7 @@
     zlib = None
 
 from distutils2.tests import run_unittest
+from distutils2.tests.support import unittest
 
 from distutils2.core import Distribution
 from distutils2.command.bdist_dumb import bdist_dumb
@@ -29,7 +29,7 @@
 class BuildDumbTestCase(support.TempdirManager,
                         support.LoggingSilencer,
                         support.EnvironGuard,
-                        unittest2.TestCase):
+                        unittest.TestCase):
 
     def setUp(self):
         super(BuildDumbTestCase, self).setUp()
@@ -42,7 +42,7 @@
         sys.argv[:] = self.old_sys_argv[1]
         super(BuildDumbTestCase, self).tearDown()
 
-    @unittest2.skipUnless(zlib, "requires zlib")
+    @unittest.skipUnless(zlib, "requires zlib")
     def test_simple_built(self):
 
         # let's create a simple package
@@ -99,7 +99,7 @@
         self.assertEquals(cmd.format, default)
 
 def test_suite():
-    return unittest2.makeSuite(BuildDumbTestCase)
+    return unittest.makeSuite(BuildDumbTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_bdist_msi.py b/src/distutils2/tests/test_bdist_msi.py
--- a/src/distutils2/tests/test_bdist_msi.py
+++ b/src/distutils2/tests/test_bdist_msi.py
@@ -1,16 +1,16 @@
 """Tests for distutils.command.bdist_msi."""
-import unittest2
 import sys
 
 from distutils2.tests import run_unittest
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class BDistMSITestCase(support.TempdirManager,
                        support.LoggingSilencer,
-                       unittest2.TestCase):
+                       unittest.TestCase):
 
-    @unittest2.skipUnless(sys.platform=="win32", "These tests are only for win32")
+    @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32")
     def test_minial(self):
         # minimal test XXX need more tests
         from distutils2.command.bdist_msi import bdist_msi
@@ -19,7 +19,7 @@
         cmd.ensure_finalized()
 
 def test_suite():
-    return unittest2.makeSuite(BDistMSITestCase)
+    return unittest.makeSuite(BDistMSITestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_bdist_wininst.py b/src/distutils2/tests/test_bdist_wininst.py
--- a/src/distutils2/tests/test_bdist_wininst.py
+++ b/src/distutils2/tests/test_bdist_wininst.py
@@ -1,14 +1,14 @@
 """Tests for distutils.command.bdist_wininst."""
-import unittest2
 
 from distutils2.tests import run_unittest
 
 from distutils2.command.bdist_wininst import bdist_wininst
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class BuildWinInstTestCase(support.TempdirManager,
                            support.LoggingSilencer,
-                           unittest2.TestCase):
+                           unittest.TestCase):
 
     def test_get_exe_bytes(self):
 
@@ -26,7 +26,7 @@
         self.assertTrue(len(exe_file) > 10)
 
 def test_suite():
-    return unittest2.makeSuite(BuildWinInstTestCase)
+    return unittest.makeSuite(BuildWinInstTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_build.py b/src/distutils2/tests/test_build.py
--- a/src/distutils2/tests/test_build.py
+++ b/src/distutils2/tests/test_build.py
@@ -1,10 +1,10 @@
 """Tests for distutils.command.build."""
-import unittest2
 import os
 import sys
 
 from distutils2.command.build import build
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 try:
     from sysconfig import get_platform
 except ImportError:
@@ -12,7 +12,7 @@
 
 class BuildTestCase(support.TempdirManager,
                     support.LoggingSilencer,
-                    unittest2.TestCase):
+                    unittest.TestCase):
 
     def test_finalize_options(self):
         pkg_dir, dist = self.create_dist()
@@ -51,7 +51,7 @@
         self.assertEquals(cmd.executable, os.path.normpath(sys.executable))
 
 def test_suite():
-    return unittest2.makeSuite(BuildTestCase)
+    return unittest.makeSuite(BuildTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_build_clib.py b/src/distutils2/tests/test_build_clib.py
--- a/src/distutils2/tests/test_build_clib.py
+++ b/src/distutils2/tests/test_build_clib.py
@@ -1,5 +1,4 @@
 """Tests for distutils.command.build_clib."""
-import unittest2
 import os
 import sys
 
@@ -7,10 +6,11 @@
 from distutils2.errors import DistutilsSetupError
 from distutils2.tests import support
 from distutils2.spawn import find_executable
+from distutils2.tests.support import unittest
 
 class BuildCLibTestCase(support.TempdirManager,
                         support.LoggingSilencer,
-                        unittest2.TestCase):
+                        unittest.TestCase):
 
     def test_check_library_dist(self):
         pkg_dir, dist = self.create_dist()
@@ -137,7 +137,7 @@
         self.assertTrue('libfoo.a' in os.listdir(build_temp))
 
 def test_suite():
-    return unittest2.makeSuite(BuildCLibTestCase)
+    return unittest.makeSuite(BuildCLibTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_build_ext.py b/src/distutils2/tests/test_build_ext.py
--- a/src/distutils2/tests/test_build_ext.py
+++ b/src/distutils2/tests/test_build_ext.py
@@ -6,6 +6,7 @@
 import warnings
 
 import distutils2.tests
+from distutils2.tests.support import unittest
 from distutils2.core import Extension, Distribution
 from distutils2.command.build_ext import build_ext
 from distutils2.tests import support
@@ -17,7 +18,6 @@
 except ImportError:
     from distutils2._backport import sysconfig
 
-import unittest2
 
 # http://bugs.python.org/issue4373
 # Don't load the xx module more than once.
@@ -29,7 +29,7 @@
 
 class BuildExtTestCase(support.TempdirManager,
                        support.LoggingSilencer,
-                       unittest2.TestCase):
+                       unittest.TestCase):
     def setUp(self):
         # Create a simple test environment
         # Note that we're making changes to sys.path
@@ -46,7 +46,7 @@
             build_ext.USER_BASE = site.USER_BASE
 
     # XXX only works with 2.6 > -- dunno why yet
-    @unittest2.skipUnless(sys.version_info >= (2, 6,), 'works for >= 2.6')
+    @unittest.skipUnless(sys.version_info >= (2, 6,), 'works for >= 2.6')
     def test_build_ext(self):
         global ALREADY_TESTED
         xx_c = os.path.join(self.tmp_dir, 'xxmodule.c')
@@ -412,8 +412,8 @@
         if distutils2.tests.verbose:
             print ('test_build_ext: Cannot find source code (test'
                    ' must run in python build dir)')
-        return unittest2.TestSuite()
-    else: return unittest2.makeSuite(BuildExtTestCase)
+        return unittest.TestSuite()
+    else: return unittest.makeSuite(BuildExtTestCase)
 
 if __name__ == '__main__':
     distsutils2.tests.run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_build_py.py b/src/distutils2/tests/test_build_py.py
--- a/src/distutils2/tests/test_build_py.py
+++ b/src/distutils2/tests/test_build_py.py
@@ -3,18 +3,18 @@
 import os
 import sys
 import StringIO
-import unittest2
 
 from distutils2.command.build_py import build_py
 from distutils2.core import Distribution
 from distutils2.errors import DistutilsFileError
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 
 class BuildPyTestCase(support.TempdirManager,
                       support.LoggingSilencer,
-                      unittest2.TestCase):
+                      unittest.TestCase):
 
     def test_package_data(self):
         sources = self.mkdtemp()
@@ -90,7 +90,7 @@
             os.chdir(cwd)
             sys.stdout = old_stdout
 
-    @unittest2.skipUnless(hasattr(sys, 'dont_write_bytecode'),
+    @unittest.skipUnless(hasattr(sys, 'dont_write_bytecode'),
                          'dont_write_bytecode support')
     def test_dont_write_bytecode(self):
         # makes sure byte_compile is not used
@@ -109,7 +109,7 @@
         self.assertTrue('byte-compiling is disabled' in self.logs[0][1])
 
 def test_suite():
-    return unittest2.makeSuite(BuildPyTestCase)
+    return unittest.makeSuite(BuildPyTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_build_scripts.py b/src/distutils2/tests/test_build_scripts.py
--- a/src/distutils2/tests/test_build_scripts.py
+++ b/src/distutils2/tests/test_build_scripts.py
@@ -1,7 +1,6 @@
 """Tests for distutils.command.build_scripts."""
 
 import os
-import unittest2
 
 from distutils2.command.build_scripts import build_scripts
 from distutils2.core import Distribution
@@ -11,11 +10,12 @@
     from distutils2._backport import sysconfig
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 
 class BuildScriptsTestCase(support.TempdirManager,
                            support.LoggingSilencer,
-                           unittest2.TestCase):
+                           unittest.TestCase):
 
     def test_default_settings(self):
         cmd = self.get_build_scripts_cmd("/foo/bar", [])
@@ -106,7 +106,7 @@
             self.assertTrue(name in built)
 
 def test_suite():
-    return unittest2.makeSuite(BuildScriptsTestCase)
+    return unittest.makeSuite(BuildScriptsTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_ccompiler.py b/src/distutils2/tests/test_ccompiler.py
--- a/src/distutils2/tests/test_ccompiler.py
+++ b/src/distutils2/tests/test_ccompiler.py
@@ -1,11 +1,11 @@
 """Tests for distutils.ccompiler."""
 import os
-import unittest2
 from distutils2.tests import captured_stdout
 
 from distutils2.compiler.ccompiler import (gen_lib_options, CCompiler,
                                  get_default_compiler, customize_compiler)
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class FakeCompiler(object):
     def library_dir_option(self, dir):
@@ -20,7 +20,7 @@
     def library_option(self, lib):
         return "-l" + lib
 
-class CCompilerTestCase(support.EnvironGuard, unittest2.TestCase):
+class CCompilerTestCase(support.EnvironGuard, unittest.TestCase):
 
     def test_gen_lib_options(self):
         compiler = FakeCompiler()
@@ -54,7 +54,7 @@
         self.assertEquals(comp.exes['archiver'], 'my_ar -arflags')
 
 def test_suite():
-    return unittest2.makeSuite(CCompilerTestCase)
+    return unittest.makeSuite(CCompilerTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_check.py b/src/distutils2/tests/test_check.py
--- a/src/distutils2/tests/test_check.py
+++ b/src/distutils2/tests/test_check.py
@@ -1,14 +1,14 @@
 """Tests for distutils.command.check."""
-import unittest2
 
 from distutils2.command.check import check
 from distutils2.metadata import _HAS_DOCUTILS
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 from distutils2.errors import DistutilsSetupError
 
 class CheckTestCase(support.LoggingSilencer,
                     support.TempdirManager,
-                    unittest2.TestCase):
+                    unittest.TestCase):
 
     def _run(self, metadata=None, **options):
         if metadata is None:
@@ -27,7 +27,7 @@
         # by default, check is checking the metadata
         # should have some warnings
         cmd = self._run()
-        self.assert_(len(cmd._warnings) > 0)
+        self.assertTrue(len(cmd._warnings) > 0)
 
         # now let's add the required fields
         # and run it again, to make sure we don't get
@@ -79,7 +79,7 @@
                                  'restructuredtext': 1})
 
 def test_suite():
-    return unittest2.makeSuite(CheckTestCase)
+    return unittest.makeSuite(CheckTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_clean.py b/src/distutils2/tests/test_clean.py
--- a/src/distutils2/tests/test_clean.py
+++ b/src/distutils2/tests/test_clean.py
@@ -1,15 +1,15 @@
 """Tests for distutils.command.clean."""
 import sys
 import os
-import unittest2
 import getpass
 
 from distutils2.command.clean import clean
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class cleanTestCase(support.TempdirManager,
                     support.LoggingSilencer,
-                    unittest2.TestCase):
+                    unittest.TestCase):
 
     def test_simple_run(self):
         pkg_dir, dist = self.create_dist()
@@ -44,7 +44,7 @@
         cmd.run()
 
 def test_suite():
-    return unittest2.makeSuite(cleanTestCase)
+    return unittest.makeSuite(cleanTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_cmd.py b/src/distutils2/tests/test_cmd.py
--- a/src/distutils2/tests/test_cmd.py
+++ b/src/distutils2/tests/test_cmd.py
@@ -1,17 +1,17 @@
 """Tests for distutils.cmd."""
-import unittest2
 import os
 from distutils2.tests import captured_stdout, run_unittest
 
-from distutils2.cmd import Command
+from distutils2.command.cmd import Command
 from distutils2.dist import Distribution
 from distutils2.errors import DistutilsOptionError
+from distutils2.tests.support import unittest
 
 class MyCmd(Command):
     def initialize_options(self):
         pass
 
-class CommandTestCase(unittest2.TestCase):
+class CommandTestCase(unittest.TestCase):
 
     def setUp(self):
         dist = Distribution()
@@ -104,7 +104,7 @@
         self.assertRaises(DistutilsOptionError, cmd.ensure_dirname, 'option2')
 
 def test_suite():
-    return unittest2.makeSuite(CommandTestCase)
+    return unittest.makeSuite(CommandTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_config.py b/src/distutils2/tests/test_config.py
--- a/src/distutils2/tests/test_config.py
+++ b/src/distutils2/tests/test_config.py
@@ -1,7 +1,6 @@
 """Tests for distutils.pypirc.pypirc."""
 import sys
 import os
-import unittest2
 import tempfile
 import shutil
 
@@ -11,6 +10,7 @@
 from distutils2.log import WARN
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 PYPIRC = """\
 [distutils]
@@ -50,7 +50,7 @@
 class PyPIRCCommandTestCase(support.TempdirManager,
                             support.LoggingSilencer,
                             support.EnvironGuard,
-                            unittest2.TestCase):
+                            unittest.TestCase):
 
     def setUp(self):
         """Patches the environment."""
@@ -112,7 +112,7 @@
         self.assertEquals(content, WANTED)
 
 def test_suite():
-    return unittest2.makeSuite(PyPIRCCommandTestCase)
+    return unittest.makeSuite(PyPIRCCommandTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_config_cmd.py b/src/distutils2/tests/test_config_cmd.py
--- a/src/distutils2/tests/test_config_cmd.py
+++ b/src/distutils2/tests/test_config_cmd.py
@@ -1,15 +1,15 @@
 """Tests for distutils.command.config."""
-import unittest2
 import os
 import sys
 
 from distutils2.command.config import dump_file, config
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 from distutils2 import log
 
 class ConfigTestCase(support.LoggingSilencer,
                      support.TempdirManager,
-                     unittest2.TestCase):
+                     unittest.TestCase):
 
     def _info(self, msg, *args):
         for line in msg.splitlines():
@@ -83,7 +83,7 @@
             self.assertTrue(not os.path.exists(f))
 
 def test_suite():
-    return unittest2.makeSuite(ConfigTestCase)
+    return unittest.makeSuite(ConfigTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_converter.py b/src/distutils2/tests/test_converter.py
--- a/src/distutils2/tests/test_converter.py
+++ b/src/distutils2/tests/test_converter.py
@@ -1,8 +1,8 @@
 """Tests for distutils.converter."""
 import os
 import sys
-import unittest2
 from distutils2.converter import DistutilsRefactoringTool
+from distutils2.tests.support import unittest
 
 _CURDIR = os.path.dirname(__file__)
 
@@ -15,9 +15,9 @@
         f.close()
 
 
-class ConverterTestCase(unittest2.TestCase):
+class ConverterTestCase(unittest.TestCase):
 
-    @unittest2.skipUnless(not sys.version < '2.6', 'Needs Python >=2.6')
+    @unittest.skipUnless(not sys.version < '2.6', 'Needs Python >=2.6')
     def test_conversions(self):
         # for all XX_before in the conversions/ dir
         # we run the refactoring tool
@@ -33,7 +33,7 @@
             self.assertEquals(str(res), wanted)
 
 def test_suite():
-    return unittest2.makeSuite(ConverterTestCase)
+    return unittest.makeSuite(ConverterTestCase)
 
 if __name__ == '__main__':
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_core.py b/src/distutils2/tests/test_core.py
--- a/src/distutils2/tests/test_core.py
+++ b/src/distutils2/tests/test_core.py
@@ -6,8 +6,8 @@
 import shutil
 import sys
 from distutils2.tests import captured_stdout
-import unittest2
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 # setup script that uses __file__
 setup_using___file__ = """\
@@ -28,7 +28,7 @@
 """
 
 
-class CoreTestCase(support.EnvironGuard, unittest2.TestCase):
+class CoreTestCase(support.EnvironGuard, unittest.TestCase):
 
     def setUp(self):
         super(CoreTestCase, self).setUp()
@@ -92,7 +92,7 @@
         self.assertEqual(cwd, output)
 
 def test_suite():
-    return unittest2.makeSuite(CoreTestCase)
+    return unittest.makeSuite(CoreTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_cygwinccompiler.py b/src/distutils2/tests/test_cygwinccompiler.py
--- a/src/distutils2/tests/test_cygwinccompiler.py
+++ b/src/distutils2/tests/test_cygwinccompiler.py
@@ -1,5 +1,4 @@
 """Tests for distutils.cygwinccompiler."""
-import unittest2
 import sys
 import os
 import warnings
@@ -18,9 +17,10 @@
                                        get_msvcr, RE_VERSION)
 from distutils2.util import get_compiler_versions
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class CygwinCCompilerTestCase(support.TempdirManager,
-                              unittest2.TestCase):
+                              unittest.TestCase):
 
     def setUp(self):
         super(CygwinCCompilerTestCase, self).setUp()
@@ -94,7 +94,7 @@
 
 
 def test_suite():
-    return unittest2.makeSuite(CygwinCCompilerTestCase)
+    return unittest.makeSuite(CygwinCCompilerTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_dist.py b/src/distutils2/tests/test_dist.py
--- a/src/distutils2/tests/test_dist.py
+++ b/src/distutils2/tests/test_dist.py
@@ -4,15 +4,15 @@
 import os
 import StringIO
 import sys
-import unittest2
 import warnings
 import textwrap
 
 from distutils2.dist import Distribution, fix_help_options, DistributionMetadata
-from distutils2.cmd import Command
+from distutils2.command.cmd import Command
 import distutils2.dist
 from distutils2.tests import TESTFN, captured_stdout
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class test_dist(Command):
     """Sample distutils2 extension command."""
@@ -40,7 +40,7 @@
 class DistributionTestCase(support.TempdirManager,
                            support.LoggingSilencer,
                            support.EnvironGuard,
-                           unittest2.TestCase):
+                           unittest.TestCase):
 
     def setUp(self):
         super(DistributionTestCase, self).setUp()
@@ -242,7 +242,7 @@
 
 
 class MetadataTestCase(support.TempdirManager, support.EnvironGuard,
-                       unittest2.TestCase):
+                       unittest.TestCase):
 
     def setUp(self):
         super(MetadataTestCase, self).setUp()
@@ -422,10 +422,10 @@
         self.assertEquals(metadata['requires-dist'], ['foo'])
 
 def test_suite():
-    suite = unittest2.TestSuite()
-    suite.addTest(unittest2.makeSuite(DistributionTestCase))
-    suite.addTest(unittest2.makeSuite(MetadataTestCase))
+    suite = unittest.TestSuite()
+    suite.addTest(unittest.makeSuite(DistributionTestCase))
+    suite.addTest(unittest.makeSuite(MetadataTestCase))
     return suite
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_emxccompiler.py b/src/distutils2/tests/test_emxccompiler.py
--- a/src/distutils2/tests/test_emxccompiler.py
+++ b/src/distutils2/tests/test_emxccompiler.py
@@ -1,5 +1,4 @@
 """Tests for distutils.emxccompiler."""
-import unittest2
 import sys
 import os
 import warnings
@@ -10,14 +9,15 @@
 from distutils2.compiler.emxccompiler import get_versions
 from distutils2.util import get_compiler_versions
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class EmxCCompilerTestCase(support.TempdirManager,
-                           unittest2.TestCase):
+                           unittest.TestCase):
 
     pass
 
 def test_suite():
-    return unittest2.makeSuite(EmxCCompilerTestCase)
+    return unittest.makeSuite(EmxCCompilerTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_extension.py b/src/distutils2/tests/test_extension.py
--- a/src/distutils2/tests/test_extension.py
+++ b/src/distutils2/tests/test_extension.py
@@ -1,16 +1,16 @@
 """Tests for distutils.extension."""
-import unittest2
 import os
 import warnings
 
 from distutils2.extension import Extension
+from distutils2.tests.support import unittest
 
-class ExtensionTestCase(unittest2.TestCase):
+class ExtensionTestCase(unittest.TestCase):
 
     pass
 
 def test_suite():
-    return unittest2.makeSuite(ExtensionTestCase)
+    return unittest.makeSuite(ExtensionTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_install.py b/src/distutils2/tests/test_install.py
--- a/src/distutils2/tests/test_install.py
+++ b/src/distutils2/tests/test_install.py
@@ -3,7 +3,6 @@
 import os
 import os.path
 import sys
-import unittest2
 import site
 
 from distutils2._backport import sysconfig
@@ -22,11 +21,12 @@
 from distutils2.errors import DistutilsOptionError
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class InstallTestCase(support.TempdirManager,
                       support.EnvironGuard,
                       support.LoggingSilencer,
-                      unittest2.TestCase):
+                      unittest.TestCase):
 
     def test_home_installation_scheme(self):
         # This ensure two things:
@@ -214,7 +214,7 @@
         self.assertTrue(len(self.logs) > old_logs_len)
 
 def test_suite():
-    return unittest2.makeSuite(InstallTestCase)
+    return unittest.makeSuite(InstallTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_install_data.py b/src/distutils2/tests/test_install_data.py
--- a/src/distutils2/tests/test_install_data.py
+++ b/src/distutils2/tests/test_install_data.py
@@ -1,16 +1,16 @@
 """Tests for distutils.command.install_data."""
 import sys
 import os
-import unittest2
 import getpass
 
 from distutils2.command.install_data import install_data
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class InstallDataTestCase(support.TempdirManager,
                           support.LoggingSilencer,
                           support.EnvironGuard,
-                          unittest2.TestCase):
+                          unittest.TestCase):
 
     def test_simple_run(self):
         pkg_dir, dist = self.create_dist()
@@ -70,7 +70,7 @@
         self.assertTrue(os.path.exists(os.path.join(inst, rone)))
 
 def test_suite():
-    return unittest2.makeSuite(InstallDataTestCase)
+    return unittest.makeSuite(InstallDataTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_install_headers.py b/src/distutils2/tests/test_install_headers.py
--- a/src/distutils2/tests/test_install_headers.py
+++ b/src/distutils2/tests/test_install_headers.py
@@ -1,16 +1,16 @@
 """Tests for distutils.command.install_headers."""
 import sys
 import os
-import unittest2
 import getpass
 
 from distutils2.command.install_headers import install_headers
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class InstallHeadersTestCase(support.TempdirManager,
                              support.LoggingSilencer,
                              support.EnvironGuard,
-                             unittest2.TestCase):
+                             unittest.TestCase):
 
     def test_simple_run(self):
         # we have two headers
@@ -34,7 +34,7 @@
         self.assertEquals(len(cmd.get_outputs()), 2)
 
 def test_suite():
-    return unittest2.makeSuite(InstallHeadersTestCase)
+    return unittest.makeSuite(InstallHeadersTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_install_lib.py b/src/distutils2/tests/test_install_lib.py
--- a/src/distutils2/tests/test_install_lib.py
+++ b/src/distutils2/tests/test_install_lib.py
@@ -1,12 +1,12 @@
 """Tests for distutils.command.install_data."""
 import sys
 import os
-import unittest2
 
 from distutils2.command.install_lib import install_lib
 from distutils2.extension import Extension
 from distutils2.tests import support
 from distutils2.errors import DistutilsOptionError
+from distutils2.tests.support import unittest
 
 try:
     no_bytecode = sys.dont_write_bytecode
@@ -18,7 +18,7 @@
 class InstallLibTestCase(support.TempdirManager,
                          support.LoggingSilencer,
                          support.EnvironGuard,
-                         unittest2.TestCase):
+                         unittest.TestCase):
 
     def test_finalize_options(self):
         pkg_dir, dist = self.create_dist()
@@ -38,7 +38,7 @@
         cmd.finalize_options()
         self.assertEquals(cmd.optimize, 2)
 
-    @unittest2.skipIf(no_bytecode, 'byte-compile not supported')
+    @unittest.skipIf(no_bytecode, 'byte-compile not supported')
     def test_byte_compile(self):
         pkg_dir, dist = self.create_dist()
         cmd = install_lib(dist)
@@ -84,7 +84,7 @@
         # get_input should return 2 elements
         self.assertEquals(len(cmd.get_inputs()), 2)
 
-    @unittest2.skipUnless(bytecode_support, 'sys.dont_write_bytecode not supported')
+    @unittest.skipUnless(bytecode_support, 'sys.dont_write_bytecode not supported')
     def test_dont_write_bytecode(self):
         # makes sure byte_compile is not used
         pkg_dir, dist = self.create_dist()
@@ -102,7 +102,7 @@
         self.assertTrue('byte-compiling is disabled' in self.logs[0][1])
 
 def test_suite():
-    return unittest2.makeSuite(InstallLibTestCase)
+    return unittest.makeSuite(InstallLibTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_install_scripts.py b/src/distutils2/tests/test_install_scripts.py
--- a/src/distutils2/tests/test_install_scripts.py
+++ b/src/distutils2/tests/test_install_scripts.py
@@ -1,17 +1,17 @@
 """Tests for distutils.command.install_scripts."""
 
 import os
-import unittest2
 
 from distutils2.command.install_scripts import install_scripts
 from distutils2.core import Distribution
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 
 class InstallScriptsTestCase(support.TempdirManager,
                              support.LoggingSilencer,
-                             unittest2.TestCase):
+                             unittest.TestCase):
 
     def test_default_settings(self):
         dist = Distribution()
@@ -73,7 +73,7 @@
 
 
 def test_suite():
-    return unittest2.makeSuite(InstallScriptsTestCase)
+    return unittest.makeSuite(InstallScriptsTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_manifest.py b/src/distutils2/tests/test_manifest.py
--- a/src/distutils2/tests/test_manifest.py
+++ b/src/distutils2/tests/test_manifest.py
@@ -1,10 +1,10 @@
 """Tests for distutils.manifest."""
-import unittest2
 import os
 import sys
 import logging
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 from distutils2.manifest import Manifest
 
 _MANIFEST = """\
@@ -18,7 +18,7 @@
 """
 
 class ManifestTestCase(support.TempdirManager,
-                       unittest2.TestCase):
+                       unittest.TestCase):
 
     def test_manifest_reader(self):
 
@@ -51,7 +51,7 @@
 
 
 def test_suite():
-    return unittest2.makeSuite(ManifestTestCase)
+    return unittest.makeSuite(ManifestTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_metadata.py b/src/distutils2/tests/test_metadata.py
--- a/src/distutils2/tests/test_metadata.py
+++ b/src/distutils2/tests/test_metadata.py
@@ -1,13 +1,13 @@
 """Tests for distutils.command.bdist."""
-import unittest2
 import os
 import sys
 from StringIO import StringIO
 
 from distutils2.metadata import (DistributionMetadata, _interpret,
                                  PKG_INFO_PREFERRED_VERSION)
+from distutils2.tests.support import unittest
 
-class DistributionMetadataTestCase(unittest2.TestCase):
+class DistributionMetadataTestCase(unittest.TestCase):
 
 
     def test_interpret(self):
@@ -64,7 +64,7 @@
         res = res.read()
         f = open(PKG_INFO)
         wanted = f.read()
-        self.assert_('Keywords: keyring,password,crypt' in res)
+        self.assertTrue('Keywords: keyring,password,crypt' in res)
         f.close()
 
     def test_metadata_markers(self):
@@ -228,7 +228,7 @@
 
 
 def test_suite():
-    return unittest2.makeSuite(DistributionMetadataTestCase)
+    return unittest.makeSuite(DistributionMetadataTestCase)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_msvc9compiler.py b/src/distutils2/tests/test_msvc9compiler.py
--- a/src/distutils2/tests/test_msvc9compiler.py
+++ b/src/distutils2/tests/test_msvc9compiler.py
@@ -1,10 +1,10 @@
 """Tests for distutils.msvc9compiler."""
 import sys
-import unittest2
 import os
 
 from distutils2.errors import DistutilsPlatformError
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 _MANIFEST = """\
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
@@ -62,9 +62,9 @@
 
 
 class msvc9compilerTestCase(support.TempdirManager,
-                            unittest2.TestCase):
+                            unittest.TestCase):
 
-    @unittest2.skipUnless(sys.platform=="win32", "These tests are only for win32")
+    @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32")
     def test_no_compiler(self):
         # makes sure query_vcvarsall throws
         # a DistutilsPlatformError if the compiler
@@ -86,7 +86,7 @@
         finally:
             msvc9compiler.find_vcvarsall = old_find_vcvarsall
 
-    @unittest2.skipUnless(sys.platform=="win32", "These tests are only for win32")
+    @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32")
     def test_reg_class(self):
         from distutils2.msvccompiler import get_build_version
         if get_build_version() < 8.0:
@@ -110,7 +110,7 @@
         keys = Reg.read_keys(HKCU, r'Control Panel')
         self.assertTrue('Desktop' in keys)
 
-    @unittest2.skipUnless(sys.platform=="win32", "These tests are only for win32")
+    @unittest.skipUnless(sys.platform=="win32", "These tests are only for win32")
     def test_remove_visual_c_ref(self):
         from distutils2.msvc9compiler import MSVCCompiler
         tempdir = self.mkdtemp()
@@ -133,7 +133,7 @@
 
 
 def test_suite():
-    return unittest2.makeSuite(msvc9compilerTestCase)
+    return unittest.makeSuite(msvc9compilerTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_pypi_versions.py b/src/distutils2/tests/test_pypi_versions.py
--- a/src/distutils2/tests/test_pypi_versions.py
+++ b/src/distutils2/tests/test_pypi_versions.py
@@ -17,9 +17,9 @@
 
 import xmlrpclib
 import os.path
-import unittest2
 
 from distutils2.version import suggest_normalized_version
+from distutils2.tests.support import unittest
 
 def test_pypi():
     #
@@ -121,11 +121,11 @@
     print "Have Suggestion : ", have_sugg, pct % (have_sugg/total_versions*100,)
     print "No Suggestion   : ", no_sugg, pct % (no_sugg/total_versions*100,)
 
-class TestPyPI(unittest2.TestCase):
+class TestPyPI(unittest.TestCase):
     pass
 
 def test_suite():
-    return unittest2.makeSuite(TestPyPI)
+    return unittest.makeSuite(TestPyPI)
 
 if __name__ == '__main__':
     run_unittest(test_suite())
diff --git a/src/distutils2/tests/test_register.py b/src/distutils2/tests/test_register.py
--- a/src/distutils2/tests/test_register.py
+++ b/src/distutils2/tests/test_register.py
@@ -2,7 +2,6 @@
 # -*- encoding: utf8 -*-
 import sys
 import os
-import unittest2
 import getpass
 import urllib2
 import warnings
@@ -19,6 +18,7 @@
 from distutils2.errors import DistutilsSetupError
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 from distutils2.tests.test_config import PYPIRC, PyPIRCCommandTestCase
 
 PYPIRC_NOPASSWORD = """\
@@ -192,7 +192,7 @@
         self.assertEquals(headers['Content-length'], '290')
         self.assertTrue('tarek' in req.data)
 
-    @unittest2.skipUnless(DOCUTILS_SUPPORT, 'needs docutils')
+    @unittest.skipUnless(DOCUTILS_SUPPORT, 'needs docutils')
     def test_strict(self):
         # testing the script option
         # when on, the register command stops if
@@ -250,7 +250,7 @@
         self.assertEquals(data['requires_dist'], ['lxml'])
 
 def test_suite():
-    return unittest2.makeSuite(RegisterTestCase)
+    return unittest.makeSuite(RegisterTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_sdist.py b/src/distutils2/tests/test_sdist.py
--- a/src/distutils2/tests/test_sdist.py
+++ b/src/distutils2/tests/test_sdist.py
@@ -1,6 +1,5 @@
 """Tests for distutils.command.sdist."""
 import os
-import unittest2
 import shutil
 import zipfile
 import tarfile
@@ -29,6 +28,7 @@
 from distutils2.command.sdist import sdist
 from distutils2.command.sdist import show_formats
 from distutils2.core import Distribution
+from distutils2.tests.support import unittest
 from distutils2.tests.test_config import PyPIRCCommandTestCase
 from distutils2.errors import DistutilsExecError, DistutilsOptionError
 from distutils2.spawn import find_executable
@@ -97,7 +97,7 @@
         cmd.warn = _warn
         return dist, cmd
 
-    @unittest2.skipUnless(zlib, "requires zlib")
+    @unittest.skipUnless(zlib, "requires zlib")
     def test_prune_file_list(self):
         # this test creates a package with some vcs dirs in it
         # and launch sdist to make sure they get pruned
@@ -139,7 +139,7 @@
         # making sure everything has been pruned correctly
         self.assertEquals(len(content), 4)
 
-    @unittest2.skipUnless(zlib, "requires zlib")
+    @unittest.skipUnless(zlib, "requires zlib")
     def test_make_distribution(self):
 
         # check if tar and gzip are installed
@@ -176,7 +176,7 @@
         self.assertEquals(result,
                 ['fake-1.0.tar', 'fake-1.0.tar.gz'])
 
-    @unittest2.skipUnless(zlib, "requires zlib")
+    @unittest.skipUnless(zlib, "requires zlib")
     def test_add_defaults(self):
 
         # http://bugs.python.org/issue2279
@@ -238,7 +238,7 @@
         manifest = open(join(self.tmp_dir, 'MANIFEST')).read()
         self.assertEquals(manifest, MANIFEST % {'sep': os.sep})
 
-    @unittest2.skipUnless(zlib, "requires zlib")
+    @unittest.skipUnless(zlib, "requires zlib")
     def test_metadata_check_option(self):
         # testing the `medata-check` option
         dist, cmd = self.get_cmd(metadata={})
@@ -293,8 +293,8 @@
         cmd.formats = 'supazipa'
         self.assertRaises(DistutilsOptionError, cmd.finalize_options)
 
-    @unittest2.skipUnless(zlib, "requires zlib")
-    @unittest2.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
+    @unittest.skipUnless(zlib, "requires zlib")
+    @unittest.skipUnless(UID_GID_SUPPORT, "Requires grp and pwd support")
     def test_make_distribution_owner_group(self):
 
         # check if tar and gzip are installed
@@ -357,7 +357,7 @@
         self.assertIn('MANIFEST.in', cmd.filelist.files)
 
 def test_suite():
-    return unittest2.makeSuite(SDistTestCase)
+    return unittest.makeSuite(SDistTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_spawn.py b/src/distutils2/tests/test_spawn.py
--- a/src/distutils2/tests/test_spawn.py
+++ b/src/distutils2/tests/test_spawn.py
@@ -1,5 +1,4 @@
 """Tests for distutils.spawn."""
-import unittest2
 import os
 import time
 from distutils2.tests import captured_stdout
@@ -8,10 +7,11 @@
 from distutils2.spawn import spawn, find_executable
 from distutils2.errors import DistutilsExecError
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class SpawnTestCase(support.TempdirManager,
                     support.LoggingSilencer,
-                    unittest2.TestCase):
+                    unittest.TestCase):
 
     def test_nt_quote_args(self):
 
@@ -23,7 +23,7 @@
             self.assertEquals(res, wanted)
 
 
-    @unittest2.skipUnless(os.name in ('nt', 'posix'),
+    @unittest.skipUnless(os.name in ('nt', 'posix'),
                          'Runs only under posix or nt')
     def test_spawn(self):
         tmpdir = self.mkdtemp()
@@ -54,7 +54,7 @@
         spawn([exe])  # should work without any error
 
 def test_suite():
-    return unittest2.makeSuite(SpawnTestCase)
+    return unittest.makeSuite(SpawnTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_unixccompiler.py b/src/distutils2/tests/test_unixccompiler.py
--- a/src/distutils2/tests/test_unixccompiler.py
+++ b/src/distutils2/tests/test_unixccompiler.py
@@ -1,6 +1,5 @@
 """Tests for distutils.unixccompiler."""
 import sys
-import unittest2
 
 try:
     import sysconfig
@@ -8,8 +7,9 @@
     from distutils2._backport import sysconfig
 
 from distutils2.compiler.unixccompiler import UnixCCompiler
+from distutils2.tests.support import unittest
 
-class UnixCCompilerTestCase(unittest2.TestCase):
+class UnixCCompilerTestCase(unittest.TestCase):
 
     def setUp(self):
         self._backup_platform = sys.platform
@@ -127,7 +127,7 @@
 
 
 def test_suite():
-    return unittest2.makeSuite(UnixCCompilerTestCase)
+    return unittest.makeSuite(UnixCCompilerTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_upload.py b/src/distutils2/tests/test_upload.py
--- a/src/distutils2/tests/test_upload.py
+++ b/src/distutils2/tests/test_upload.py
@@ -2,13 +2,13 @@
 # -*- encoding: utf8 -*-
 import sys
 import os
-import unittest2
 
 from distutils2.command import upload as upload_mod
 from distutils2.command.upload import upload
 from distutils2.core import Distribution
 
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 from distutils2.tests.test_config import PYPIRC, PyPIRCCommandTestCase
 
 PYPIRC_LONG_PASSWORD = """\
@@ -116,7 +116,7 @@
         # what did we send ?
         self.assertIn('dédé', self.last_open.req.data)
         headers = dict(self.last_open.req.headers)
-        self.assert_(headers['Content-length'] > 2000)
+        self.assertTrue(int(headers['Content-length']) < 2000)
         self.assertTrue(headers['Content-type'].startswith('multipart/form-data'))
         self.assertEquals(self.last_open.req.get_method(), 'POST')
         self.assertEquals(self.last_open.req.get_full_url(),
@@ -126,7 +126,7 @@
         self.assertFalse('\n' in auth)
 
 def test_suite():
-    return unittest2.makeSuite(uploadTestCase)
+    return unittest.makeSuite(uploadTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_util.py b/src/distutils2/tests/test_util.py
--- a/src/distutils2/tests/test_util.py
+++ b/src/distutils2/tests/test_util.py
@@ -1,7 +1,6 @@
 """Tests for distutils.util."""
 import os
 import sys
-import unittest2
 from copy import copy
 from StringIO import StringIO
 import subprocess
@@ -17,6 +16,7 @@
                             byte_compile, find_packages)
 from distutils2 import util
 from distutils2.tests import support
+from distutils2.tests.support import unittest
 
 class FakePopen(object):
     test_class = None
@@ -34,7 +34,7 @@
 
 class UtilTestCase(support.EnvironGuard,
                    support.TempdirManager,
-                   unittest2.TestCase):
+                   unittest.TestCase):
 
     def setUp(self):
         super(UtilTestCase, self).setUp()
@@ -243,7 +243,7 @@
         res = get_compiler_versions()
         self.assertEquals(res[2], None)
 
-    @unittest2.skipUnless(hasattr(sys, 'dont_write_bytecode'),
+    @unittest.skipUnless(hasattr(sys, 'dont_write_bytecode'),
                           'no dont_write_bytecode support')
     def test_dont_write_bytecode(self):
         # makes sure byte_compile raise a DistutilsError
@@ -298,7 +298,7 @@
 
 
 def test_suite():
-    return unittest2.makeSuite(UtilTestCase)
+    return unittest.makeSuite(UtilTestCase)
 
 if __name__ == "__main__":
-    unittest2.main(defaultTest="test_suite")
+    unittest.main(defaultTest="test_suite")
diff --git a/src/distutils2/tests/test_version.py b/src/distutils2/tests/test_version.py
--- a/src/distutils2/tests/test_version.py
+++ b/src/distutils2/tests/test_version.py
@@ -1,5 +1,4 @@
 """Tests for distutils.version."""
-import unittest
 import doctest
 import os
 
@@ -7,6 +6,7 @@
 from distutils2.version import IrrationalVersionError
 from distutils2.version import suggest_normalized_version as suggest
 from distutils2.version import VersionPredicate
+from distutils2.tests.support import unittest
 
 class VersionTestCase(unittest.TestCase):
 
diff --git a/src/distutils2/version.py b/src/distutils2/version.py
--- a/src/distutils2/version.py
+++ b/src/distutils2/version.py
@@ -3,6 +3,10 @@
 
 from distutils2.errors import IrrationalVersionError, HugeMajorVersionNumError
 
+__all__ = ['NormalizedVersion', 'suggest_normalized_version',
+           'VersionPredicate', 'is_valid_version', 'is_valid_versions',
+           'is_valid_predicate']
+
 # A marker used in the second and third parts of the `parts` tuple, for
 # versions that don't have those segments, to sort properly. An example
 # of versions in sort order ('highest' last):
@@ -18,9 +22,9 @@
 #                                                              |
 #   'dev' < 'f' ----------------------------------------------/
 # Other letters would do, but 'f' for 'final' is kind of nice.
-FINAL_MARKER = ('f',)
+_FINAL_MARKER = ('f',)
 
-VERSION_RE = re.compile(r'''
+_VERSION_RE = re.compile(r'''
     ^
     (?P<version>\d+\.\d+)          # minimum 'N.N'
     (?P<extraversion>(?:\.\d+)*)   # any number of extra '.N' segments
@@ -70,13 +74,13 @@
         self._parse(s, error_on_huge_major_num)
 
     @classmethod
-    def from_parts(cls, version, prerelease=FINAL_MARKER,
-                   devpost=FINAL_MARKER):
+    def from_parts(cls, version, prerelease=_FINAL_MARKER,
+                   devpost=_FINAL_MARKER):
         return cls(cls.parts_to_str((version, prerelease, devpost)))
 
     def _parse(self, s, error_on_huge_major_num=True):
         """Parses a string version into parts."""
-        match = VERSION_RE.search(s)
+        match = _VERSION_RE.search(s)
         if not match:
             raise IrrationalVersionError(s)
 
@@ -98,7 +102,7 @@
                                          pad_zeros_length=1)
             parts.append(tuple(block))
         else:
-            parts.append(FINAL_MARKER)
+            parts.append(_FINAL_MARKER)
 
         # postdev
         if groups.get('postdev'):
@@ -106,14 +110,14 @@
             dev = groups.get('dev')
             postdev = []
             if post is not None:
-                postdev.extend([FINAL_MARKER[0], 'post', int(post)])
+                postdev.extend([_FINAL_MARKER[0], 'post', int(post)])
                 if dev is None:
-                    postdev.append(FINAL_MARKER[0])
+                    postdev.append(_FINAL_MARKER[0])
             if dev is not None:
                 postdev.extend(['dev', int(dev)])
             parts.append(tuple(postdev))
         else:
-            parts.append(FINAL_MARKER)
+            parts.append(_FINAL_MARKER)
         self.parts = tuple(parts)
         if error_on_huge_major_num and self.parts[0][0] > 1980:
             raise HugeMajorVersionNumError("huge major version number, %r, "
@@ -154,10 +158,10 @@
         # XXX This doesn't check for invalid tuples
         main, prerel, postdev = parts
         s = '.'.join(str(v) for v in main)
-        if prerel is not FINAL_MARKER:
+        if prerel is not _FINAL_MARKER:
             s += prerel[0]
             s += '.'.join(str(v) for v in prerel[1:])
-        if postdev and postdev is not FINAL_MARKER:
+        if postdev and postdev is not _FINAL_MARKER:
             if postdev[0] == 'f':
                 postdev = postdev[1:]
             i = 0
@@ -197,6 +201,9 @@
     def __ge__(self, other):
         return self.__eq__(other) or self.__gt__(other)
 
+    # See http://docs.python.org/reference/datamodel#object.__hash__
+    __hash__ = object.__hash__
+
 def suggest_normalized_version(s):
     """Suggest a normalized version close to the given version string.
 
@@ -361,7 +368,7 @@
                 return False
         return True
 
-class Versions(VersionPredicate):
+class _Versions(VersionPredicate):
     def __init__(self, predicate):
         predicate = predicate.strip()
         match = _PLAIN_VERSIONS.match(predicate)
@@ -372,7 +379,7 @@
         self.predicates = [_split_predicate(pred.strip())
                            for pred in predicates.split(',')]
 
-class Version(VersionPredicate):
+class _Version(VersionPredicate):
     def __init__(self, predicate):
         predicate = predicate.strip()
         match = _PLAIN_VERSIONS.match(predicate)
@@ -391,7 +398,7 @@
 
 def is_valid_versions(predicate):
     try:
-        Versions(predicate)
+        _Versions(predicate)
     except (ValueError, IrrationalVersionError):
         return False
     else:
@@ -399,7 +406,7 @@
 
 def is_valid_version(predicate):
     try:
-        Version(predicate)
+        _Version(predicate)
     except (ValueError, IrrationalVersionError):
         return False
     else:
diff --git a/src/runtests.py b/src/runtests.py
--- a/src/runtests.py
+++ b/src/runtests.py
@@ -26,9 +26,9 @@
 
 if __name__ == "__main__":
     try:
-        import unittest2
+        from distutils2.tests.support import unittest
     except ImportError:
-        print('!!! You need to install unittest2')
+        print('Error: You have to install unittest2')
         sys.exit(1)
 
     sys.exit(test_main())
diff --git a/src/setup.py b/src/setup.py
--- a/src/setup.py
+++ b/src/setup.py
@@ -17,19 +17,17 @@
     f.close()
 
 def get_tip_revision(path=os.getcwd()):
+    from subprocess import Popen, PIPE
     try:
-        from mercurial.hg import repository
-        from mercurial.ui import ui
-        from mercurial import node
-        from mercurial.error import RepoError
-    except ImportError:
+        cmd = Popen(['hg', 'tip', '--template', '{rev}', '-R', path],
+                    stdout=PIPE, stderr=PIPE)
+    except OSError:
         return 0
-    try:
-        repo = repository(ui(), path)
-        tip = repo.changelog.tip()
-        return repo.changelog.rev(tip)
-    except RepoError:
+    rev = cmd.stdout.read()
+    if rev == '':
+        # there has been an error in the command
         return 0
+    return int(rev)
 
 DEV_SUFFIX = '.dev%d' % get_tip_revision('..')
 

--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list