From 8b74269476d72e2e05a6f7ff35d693b816e9457c Mon Sep 17 00:00:00 2001 From: "Jason R. Coombs" Date: Sun, 6 Apr 2014 18:33:37 -0400 Subject: [PATCH] Wrap unittest.main in a compatibility wrapper for Python 3.1 compatibility. Fixes #183 --- CHANGES.txt | 6 ++++++ setuptools/command/test.py | 11 +++++++---- setuptools/py31compat.py | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index fbfb4885ab..5980f7af3d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,12 @@ CHANGES ======= +----- +3.4.2 +----- + +* Issue #183: Fix additional regression in test command on Python 3.1. + ----- 3.4.1 ----- diff --git a/setuptools/command/test.py b/setuptools/command/test.py index e377a78144..7422b71907 100644 --- a/setuptools/command/test.py +++ b/setuptools/command/test.py @@ -1,10 +1,15 @@ +import unittest +from unittest import TestLoader + from setuptools import Command from distutils.errors import DistutilsOptionError import sys from pkg_resources import (resource_listdir, resource_exists, normalize_path, working_set, _namespace_packages, add_activation_listener, require, EntryPoint) -from unittest import TestLoader + +from setuptools.py31compat import unittest_main + class ScanningLoader(TestLoader): @@ -141,8 +146,6 @@ def run(self): self.with_project_on_sys_path(self.run_tests) def run_tests(self): - import unittest - # Purge modules under test from sys.modules. The test loader will # re-import them from the build location. Required when 2to3 is used # with namespace packages. @@ -158,7 +161,7 @@ def run_tests(self): del_modules.append(name) list(map(sys.modules.__delitem__, del_modules)) - unittest.main( + unittest_main( None, None, [unittest.__file__]+self.test_args, testLoader=self._resolve_as_ep(self.test_loader), testRunner=self._resolve_as_ep(self.test_runner), diff --git a/setuptools/py31compat.py b/setuptools/py31compat.py index e6b2910a5b..6e76558293 100644 --- a/setuptools/py31compat.py +++ b/setuptools/py31compat.py @@ -1,3 +1,6 @@ +import sys +import unittest + __all__ = ['get_config_vars', 'get_path'] try: @@ -35,3 +38,15 @@ def __exit__(self, exctype, excvalue, exctrace): except OSError: #removal errors are not the only possible pass self.name = None + + +unittest_main = unittest.main + +_PY31 = (3, 1) <= sys.version_info[:2] < (3, 2) +if _PY31: + # on Python 3.1, translate testRunner==None to defaultTestLoader + # for compatibility with Python 2.6, 2.7, and 3.2+ + def unittest_main(*args, **kwargs): + if 'testRunner' in kwargs and kwargs['testRunner'] is None: + kwargs['testRunner'] = unittest.defaultTestLoader + return unittest.main(*args, **kwargs)