summaryrefslogtreecommitdiffstats
path: root/Lib/unittest/loader.py
diff options
context:
space:
mode:
authorMichael Foord <fuzzyman@voidspace.org.uk>2010-05-07 18:18:14 (GMT)
committerMichael Foord <fuzzyman@voidspace.org.uk>2010-05-07 18:18:14 (GMT)
commit01984e962973f60221cbaf38bf8770c0a33d3471 (patch)
tree2362d0f2b496b88fb4d2234204791e895b4d1cf2 /Lib/unittest/loader.py
parent8956271f11a135e33b0ba99bac48118e337304f6 (diff)
downloadcpython-01984e962973f60221cbaf38bf8770c0a33d3471.zip
cpython-01984e962973f60221cbaf38bf8770c0a33d3471.tar.gz
cpython-01984e962973f60221cbaf38bf8770c0a33d3471.tar.bz2
Merged revisions 80932 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r80932 | michael.foord | 2010-05-07 20:16:19 +0200 (Fri, 07 May 2010) | 1 line Issue 8547 - detecting and reporting that modules have been imported from the wrong location under test discovery. ........
Diffstat (limited to 'Lib/unittest/loader.py')
-rw-r--r--Lib/unittest/loader.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
index a45dffa..76c4e11 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -178,7 +178,10 @@ class TestLoader(object):
if not top_level_dir in sys.path:
# all test modules must be importable from the top level directory
- sys.path.append(top_level_dir)
+ # should we *unconditionally* put the start directory in first
+ # in sys.path to minimise likelihood of conflicts between installed
+ # modules and development versions?
+ sys.path.insert(0, top_level_dir)
self._top_level_dir = top_level_dir
is_not_importable = False
@@ -251,6 +254,16 @@ class TestLoader(object):
except:
yield _make_failed_import_test(name, self.suiteClass)
else:
+ mod_file = os.path.abspath(getattr(module, '__file__', full_path))
+ realpath = os.path.splitext(mod_file)[0]
+ fullpath_noext = os.path.splitext(full_path)[0]
+ if realpath.lower() != fullpath_noext.lower():
+ module_dir = os.path.dirname(realpath)
+ mod_name = os.path.splitext(os.path.basename(full_path))[0]
+ expected_dir = os.path.dirname(full_path)
+ msg = ("%r module incorrectly imported from %r. Expected %r. "
+ "Is this module globally installed?")
+ raise ImportError(msg % (mod_name, module_dir, expected_dir))
yield self.loadTestsFromModule(module)
elif os.path.isdir(full_path):
if not os.path.isfile(os.path.join(full_path, '__init__.py')):