]> granicus.if.org Git - python/commitdiff
Fix unittest test discovery for Jython
authorMichael Foord <michael@voidspace.org.uk>
Tue, 13 Mar 2012 07:09:54 +0000 (00:09 -0700)
committerMichael Foord <michael@voidspace.org.uk>
Tue, 13 Mar 2012 07:09:54 +0000 (00:09 -0700)
Lib/unittest/loader.py
Misc/NEWS

index ab364002e20f4a9c4ce228145260d1c58d22ab8f..541884e4161a0bdd4925862c23e775cecc7ebad4 100644 (file)
@@ -34,6 +34,11 @@ def _make_failed_test(classname, methodname, exception, suiteClass):
     TestClass = type(classname, (case.TestCase,), attrs)
     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):
     """
@@ -221,7 +226,7 @@ class TestLoader(object):
             return os.path.dirname(full_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)
         assert not os.path.isabs(_relpath), "Path must be within the project"
@@ -258,11 +263,11 @@ class TestLoader(object):
                     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 = _jython_aware_splitext(mod_file)
+                    fullpath_noext = _jython_aware_splitext(full_path)
                     if realpath.lower() != fullpath_noext.lower():
                         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)
                         msg = ("%r module incorrectly imported from %r. Expected %r. "
                                "Is this module globally installed?")
index 5d03fee8e74c83bdb7b1159d548481bd43f81b7b..93b5a74cef7cc56f34c50dbc4a725829073cf0c4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,8 @@ Core and Builtins
 Library
 -------
 
+- Issue #10543: Fix unittest test discovery with Jython bytecode files.
+
 - Issue #14252: Fix subprocess.Popen.terminate() to not raise an error under
   Windows when the child process has already exited.