Issue #19352: Fix unittest discovery when a module can be reached through several paths (e.g. under Debian/Ubuntu with virtualenv).
This commit is contained in:
parent
17934856dc
commit
5d791802c9
|
@ -256,8 +256,8 @@ class TestLoader(object):
|
||||||
yield _make_failed_import_test(name, self.suiteClass)
|
yield _make_failed_import_test(name, self.suiteClass)
|
||||||
else:
|
else:
|
||||||
mod_file = os.path.abspath(getattr(module, '__file__', full_path))
|
mod_file = os.path.abspath(getattr(module, '__file__', full_path))
|
||||||
realpath = os.path.splitext(mod_file)[0]
|
realpath = os.path.splitext(os.path.realpath(mod_file))[0]
|
||||||
fullpath_noext = os.path.splitext(full_path)[0]
|
fullpath_noext = os.path.splitext(os.path.realpath(full_path))[0]
|
||||||
if realpath.lower() != fullpath_noext.lower():
|
if realpath.lower() != fullpath_noext.lower():
|
||||||
module_dir = os.path.dirname(realpath)
|
module_dir = os.path.dirname(realpath)
|
||||||
mod_name = os.path.splitext(os.path.basename(full_path))[0]
|
mod_name = os.path.splitext(os.path.basename(full_path))[0]
|
||||||
|
|
|
@ -314,7 +314,7 @@ class TestDiscovery(unittest.TestCase):
|
||||||
self.assertTrue(program.failfast)
|
self.assertTrue(program.failfast)
|
||||||
self.assertTrue(program.catchbreak)
|
self.assertTrue(program.catchbreak)
|
||||||
|
|
||||||
def test_detect_module_clash(self):
|
def setup_module_clash(self):
|
||||||
class Module(object):
|
class Module(object):
|
||||||
__file__ = 'bar/foo.py'
|
__file__ = 'bar/foo.py'
|
||||||
sys.modules['foo'] = Module
|
sys.modules['foo'] = Module
|
||||||
|
@ -341,7 +341,10 @@ class TestDiscovery(unittest.TestCase):
|
||||||
os.listdir = listdir
|
os.listdir = listdir
|
||||||
os.path.isfile = isfile
|
os.path.isfile = isfile
|
||||||
os.path.isdir = isdir
|
os.path.isdir = isdir
|
||||||
|
return full_path
|
||||||
|
|
||||||
|
def test_detect_module_clash(self):
|
||||||
|
full_path = self.setup_module_clash()
|
||||||
loader = unittest.TestLoader()
|
loader = unittest.TestLoader()
|
||||||
|
|
||||||
mod_dir = os.path.abspath('bar')
|
mod_dir = os.path.abspath('bar')
|
||||||
|
@ -354,6 +357,25 @@ class TestDiscovery(unittest.TestCase):
|
||||||
)
|
)
|
||||||
self.assertEqual(sys.path[0], full_path)
|
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):
|
def test_discovery_from_dotted_path(self):
|
||||||
loader = unittest.TestLoader()
|
loader = unittest.TestLoader()
|
||||||
|
|
|
@ -40,6 +40,9 @@ Core and Builtins
|
||||||
Library
|
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
|
- Issue #15207: Fix mimetypes to read from correct part of Windows registry
|
||||||
Original patch by Dave Chambers
|
Original patch by Dave Chambers
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue