[Python-checkins] cpython (2.7): Issue #19352: Fix unittest discovery when a module can be reached through
antoine.pitrou
python-checkins at python.org
Wed Oct 23 19:12:44 CEST 2013
http://hg.python.org/cpython/rev/d7ec961cea1c
changeset: 86587:d7ec961cea1c
branch: 2.7
parent: 86580:e8cead08c556
user: Antoine Pitrou <solipsis at pitrou.net>
date: Wed Oct 23 19:11:29 2013 +0200
summary:
Issue #19352: Fix unittest discovery when a module can be reached through several paths (e.g. under Debian/Ubuntu with virtualenv).
files:
Lib/unittest/loader.py | 4 +-
Lib/unittest/test/test_discovery.py | 24 ++++++++++++++++-
Misc/NEWS | 3 ++
3 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -256,8 +256,8 @@
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]
+ realpath = os.path.splitext(os.path.realpath(mod_file))[0]
+ fullpath_noext = os.path.splitext(os.path.realpath(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]
diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py
--- a/Lib/unittest/test/test_discovery.py
+++ b/Lib/unittest/test/test_discovery.py
@@ -314,7 +314,7 @@
self.assertTrue(program.failfast)
self.assertTrue(program.catchbreak)
- def test_detect_module_clash(self):
+ def setup_module_clash(self):
class Module(object):
__file__ = 'bar/foo.py'
sys.modules['foo'] = Module
@@ -341,7 +341,10 @@
os.listdir = listdir
os.path.isfile = isfile
os.path.isdir = isdir
+ return full_path
+ def test_detect_module_clash(self):
+ full_path = self.setup_module_clash()
loader = unittest.TestLoader()
mod_dir = os.path.abspath('bar')
@@ -354,6 +357,25 @@
)
self.assertEqual(sys.path[0], full_path)
+ def test_module_symlink_ok(self):
+ full_path = self.setup_module_clash()
+
+ original_realpath = os.path.realpath
+
+ mod_dir = os.path.abspath('bar')
+ expected_dir = os.path.abspath('foo')
+
+ def cleanup():
+ os.path.realpath = original_realpath
+ self.addCleanup(cleanup)
+
+ def realpath(path):
+ if path == os.path.join(mod_dir, 'foo.py'):
+ return os.path.join(expected_dir, 'foo.py')
+ return path
+ os.path.realpath = realpath
+ loader = unittest.TestLoader()
+ loader.discover(start_dir='foo', pattern='foo.py')
def test_discovery_from_dotted_path(self):
loader = unittest.TestLoader()
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -40,6 +40,9 @@
Library
-------
+- Issue #19352: Fix unittest discovery when a module can be reached
+ through several paths (e.g. under Debian/Ubuntu with virtualenv).
+
- Issue #15207: Fix mimetypes to read from correct part of Windows registry
Original patch by Dave Chambers
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list