diff options
author | PJ Eby <distutils-sig@python.org> | 2007-02-24 22:11:47 +0000 |
---|---|---|
committer | PJ Eby <distutils-sig@python.org> | 2007-02-24 22:11:47 +0000 |
commit | 34eb083f0db12e97f966f9312d23f07ddf962116 (patch) | |
tree | a738a0e5bbd58aaa10aa44ea776d9766eb28c538 /setuptools/command/test.py | |
parent | fb98a95e9badb23765ea520fd5bd9e30d0f1fe4a (diff) | |
download | external_python_setuptools-34eb083f0db12e97f966f9312d23f07ddf962116.tar.gz external_python_setuptools-34eb083f0db12e97f966f9312d23f07ddf962116.tar.bz2 external_python_setuptools-34eb083f0db12e97f966f9312d23f07ddf962116.zip |
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. (backport from trunk)
--HG--
branch : setuptools-0.6
extra : convert_revision : svn%3A6015fed2-1504-0410-9fe1-9d1591cc4771/sandbox/branches/setuptools-0.6%4053896
Diffstat (limited to 'setuptools/command/test.py')
-rw-r--r-- | setuptools/command/test.py | 65 |
1 files changed, 53 insertions, 12 deletions
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): + + + + + + + + + + + + + + + + + + + + + + + + + + + + + |