diff options
author | Michael Foord <fuzzyman@voidspace.org.uk> | 2010-04-06 23:18:16 (GMT) |
---|---|---|
committer | Michael Foord <fuzzyman@voidspace.org.uk> | 2010-04-06 23:18:16 (GMT) |
commit | c1bf677e28a52b501ab9f93a6b78c6c0abbcc8ce (patch) | |
tree | e6015d34486013f8baa8365be3059780e82f0fa6 | |
parent | ccd8bc8a83b05026bffb16b2cc3ba71bab8c5fba (diff) | |
download | cpython-c1bf677e28a52b501ab9f93a6b78c6c0abbcc8ce.zip cpython-c1bf677e28a52b501ab9f93a6b78c6c0abbcc8ce.tar.gz cpython-c1bf677e28a52b501ab9f93a6b78c6c0abbcc8ce.tar.bz2 |
Fix module directory finding logic for dotted paths in unittest test discovery.
-rw-r--r-- | Lib/unittest/loader.py | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index f0cc157..360a41e 100644 --- a/Lib/unittest/loader.py +++ b/Lib/unittest/loader.py @@ -192,7 +192,7 @@ class TestLoader(object): top_part = start_dir.split('.')[0] start_dir = os.path.abspath(os.path.dirname((the_module.__file__))) if set_implicit_top: - self._top_level_dir = os.path.abspath(os.path.dirname(os.path.dirname(sys.modules[top_part].__file__))) + self._top_level_dir = self._get_directory_containing_module(top_part) sys.path.remove(top_level_dir) if is_not_importable: @@ -201,6 +201,18 @@ class TestLoader(object): tests = list(self._find_tests(start_dir, pattern)) return self.suiteClass(tests) + def _get_directory_containing_module(self, module_name): + module = sys.modules[module_name] + full_path = os.path.abspath(module.__file__) + + if os.path.basename(full_path).lower().startswith('__init__.py'): + return os.path.dirname(os.path.dirname(full_path)) + else: + # here we have been given a module rather than a package - so + # all we can do is search the *same* directory the module is in + # should an exception be raised instead + return os.path.dirname(full_path) + def _get_name_from_path(self, path): path = os.path.splitext(os.path.normpath(path))[0] |