diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index c776f16c306..b254c8086b6 100644 --- a/Lib/unittest/loader.py +++ b/Lib/unittest/loader.py @@ -479,6 +479,8 @@ class TestLoader(object): return tests, True finally: self._loading_packages.discard(name) + else: + return None, False defaultTestLoader = TestLoader() diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py index 55921febf58..bb196e6997a 100644 --- a/Lib/unittest/test/test_discovery.py +++ b/Lib/unittest/test/test_discovery.py @@ -90,6 +90,46 @@ class TestDiscovery(unittest.TestCase): ('test3', 'test4')]) self.assertEqual(suite, expected) + def test_find_tests_socket(self): + # A socket is neither a directory nor a regular file. + # https://bugs.python.org/issue25320 + loader = unittest.TestLoader() + + original_listdir = os.listdir + def restore_listdir(): + os.listdir = original_listdir + original_isfile = os.path.isfile + def restore_isfile(): + os.path.isfile = original_isfile + original_isdir = os.path.isdir + def restore_isdir(): + os.path.isdir = original_isdir + + path_lists = [['socket']] + os.listdir = lambda path: path_lists.pop(0) + self.addCleanup(restore_listdir) + + os.path.isdir = lambda path: False + self.addCleanup(restore_isdir) + + os.path.isfile = lambda path: False + self.addCleanup(restore_isfile) + + loader._get_module_from_name = lambda path: path + ' module' + orig_load_tests = loader.loadTestsFromModule + def loadTestsFromModule(module, pattern=None): + # This is where load_tests is called. + base = orig_load_tests(module, pattern=pattern) + return base + [module + ' tests'] + loader.loadTestsFromModule = loadTestsFromModule + loader.suiteClass = lambda thing: thing + + top_level = os.path.abspath('/foo') + loader._top_level_dir = top_level + suite = list(loader._find_tests(top_level, 'test*.py')) + + self.assertEqual(suite, []) + def test_find_tests_with_package(self): loader = unittest.TestLoader() diff --git a/Misc/ACKS b/Misc/ACKS index 5f1f300b110..10ac51e8add 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -396,6 +396,7 @@ Lance Ellinghaus Daniel Ellis Phil Elson David Ely +Victor van den Elzen Jeff Epler Tom Epperly Gökcen Eraslan diff --git a/Misc/NEWS b/Misc/NEWS index 5233a43eb29..24dd75cadd3 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -218,6 +218,9 @@ Core and Builtins Library ------- +- Issue #25320: Handle sockets in directories unittest discovery is scanning. + Patch from Victor van den Elzen. + - Issue #16181: cookiejar.http2time() now returns None if year is higher than datetime.MAXYEAR.