diff options
author | Robert Collins <rbtcollins@hp.com> | 2016-03-15 00:33:28 (GMT) |
---|---|---|
committer | Robert Collins <rbtcollins@hp.com> | 2016-03-15 00:33:28 (GMT) |
commit | bfef0be42068adee3706dddd0dbae3c7aa6fce55 (patch) | |
tree | 54237d8303d5758f4d0549abc62fddbeed40b953 /Lib | |
parent | c4aec3628b6effcf205d70ce7d80f69847954b66 (diff) | |
parent | ecd5383891e705e24409719de9dbfda6b203a6f9 (diff) | |
download | cpython-bfef0be42068adee3706dddd0dbae3c7aa6fce55.zip cpython-bfef0be42068adee3706dddd0dbae3c7aa6fce55.tar.gz cpython-bfef0be42068adee3706dddd0dbae3c7aa6fce55.tar.bz2 |
#25320: Handle sockets in directories unittest discovery is scanning.
Patch from Victor van den Elzen.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/unittest/loader.py | 2 | ||||
-rw-r--r-- | Lib/unittest/test/test_discovery.py | 40 |
2 files changed, 42 insertions, 0 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py index c776f16..b254c80 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 55921fe..bb196e6 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() |