aboutsummaryrefslogtreecommitdiffstats
path: root/setuptools/command/test.py
diff options
context:
space:
mode:
authorPJ Eby <distutils-sig@python.org>2007-02-24 22:11:47 +0000
committerPJ Eby <distutils-sig@python.org>2007-02-24 22:11:47 +0000
commit34eb083f0db12e97f966f9312d23f07ddf962116 (patch)
treea738a0e5bbd58aaa10aa44ea776d9766eb28c538 /setuptools/command/test.py
parentfb98a95e9badb23765ea520fd5bd9e30d0f1fe4a (diff)
downloadexternal_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.py65
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):
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+