diff options
-rwxr-xr-x | setuptools.txt | 4 | ||||
-rw-r--r-- | setuptools/command/test.py | 65 |
2 files changed, 57 insertions, 12 deletions
diff --git a/setuptools.txt b/setuptools.txt index c19bd32f..11499018 100755 --- a/setuptools.txt +++ b/setuptools.txt @@ -2622,6 +2622,10 @@ Release Notes/Change History * Fix ``#!`` parsing problems in Windows ``.exe`` script wrappers, when there was whitespace inside a quoted argument or at the end of the ``#!`` line (a regression introduced in 0.6c4). + + * Fix ``test`` command possibly failing if an older version of the project + being tested was installed on ``sys.path`` ahead of the test source + directory. 0.6c5 * Fix uploaded ``bdist_rpm`` packages being described as ``bdist_egg`` diff --git a/setuptools/command/test.py b/setuptools/command/test.py index 83589fa9..fe024c60 100644 --- a/setuptools/command/test.py +++ b/setuptools/command/test.py @@ -80,7 +80,7 @@ class test(Command): - def run(self): + def with_project_on_sys_path(self, func): # Ensure metadata is up-to-date self.run_command('egg_info') @@ -88,7 +88,25 @@ class test(Command): self.reinitialize_command('build_ext', inplace=1) self.run_command('build_ext') - if self.distribution.tests_require: + ei_cmd = self.get_finalized_command("egg_info") + + old_path = sys.path[:] + old_modules = sys.modules.copy() + + try: + sys.path.insert(0, normalize_path(ei_cmd.egg_base)) + working_set.__init__() + require('%s==%s' % (ei_cmd.egg_name, ei_cmd.egg_version)) + func() + finally: + sys.path[:] = old_path + sys.modules.clear() + sys.modules.update(old_modules) + working_set.__init__() + + + def run(self): + if self.distribution.tests_require: self.distribution.fetch_build_eggs(self.distribution.tests_require) if self.test_suite: @@ -97,20 +115,14 @@ class test(Command): self.announce('skipping "unittest %s" (dry run)' % cmd) else: self.announce('running "unittest %s"' % cmd) - self.run_tests() + self.with_project_on_sys_path(self.run_tests) + + + def run_tests(self): import unittest - old_path = sys.path[:] - ei_cmd = self.get_finalized_command("egg_info") - path_item = normalize_path(ei_cmd.egg_base) - metadata = PathMetadata( - path_item, normalize_path(ei_cmd.egg_info) - ) - dist = Distribution(path_item, metadata, project_name=ei_cmd.egg_name) - working_set.add(dist) - require(str(dist.as_requirement())) loader_ep = EntryPoint.parse("x="+self.test_loader) loader_class = loader_ep.load(require=False) unittest.main( @@ -121,3 +133,32 @@ class test(Command): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + |