Commit e01c62cd authored by Michael Foord's avatar Michael Foord

Fix unittest test discovery for Jython

parent df723e1e
...@@ -34,6 +34,11 @@ def _make_failed_test(classname, methodname, exception, suiteClass): ...@@ -34,6 +34,11 @@ def _make_failed_test(classname, methodname, exception, suiteClass):
TestClass = type(classname, (case.TestCase,), attrs) TestClass = type(classname, (case.TestCase,), attrs)
return suiteClass((TestClass(methodname),)) return suiteClass((TestClass(methodname),))
def _jython_aware_splitext(path):
if path.lower().endswith('$py.class'):
return path[:-9]
return os.path.splitext(path)[0]
class TestLoader(object): class TestLoader(object):
""" """
...@@ -221,7 +226,7 @@ class TestLoader(object): ...@@ -221,7 +226,7 @@ class TestLoader(object):
return os.path.dirname(full_path) return os.path.dirname(full_path)
def _get_name_from_path(self, path): def _get_name_from_path(self, path):
path = os.path.splitext(os.path.normpath(path))[0] path = _jython_aware_splitext(os.path.normpath(path))
_relpath = os.path.relpath(path, self._top_level_dir) _relpath = os.path.relpath(path, self._top_level_dir)
assert not os.path.isabs(_relpath), "Path must be within the project" assert not os.path.isabs(_relpath), "Path must be within the project"
...@@ -258,11 +263,11 @@ class TestLoader(object): ...@@ -258,11 +263,11 @@ 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 = _jython_aware_splitext(mod_file)
fullpath_noext = os.path.splitext(full_path)[0] fullpath_noext = _jython_aware_splitext(full_path)
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 = _jython_aware_splitext(os.path.basename(full_path))
expected_dir = os.path.dirname(full_path) expected_dir = os.path.dirname(full_path)
msg = ("%r module incorrectly imported from %r. Expected %r. " msg = ("%r module incorrectly imported from %r. Expected %r. "
"Is this module globally installed?") "Is this module globally installed?")
......
...@@ -22,6 +22,8 @@ Core and Builtins ...@@ -22,6 +22,8 @@ Core and Builtins
Library Library
------- -------
- Issue #10543: Fix unittest test discovery with Jython bytecode files.
- Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under - Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under
Windows when the child process has already exited. Windows when the child process has already exited.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment