summaryrefslogtreecommitdiffstats
path: root/Lib/unittest
diff options
context:
space:
mode:
authorInada Naoki <songofacandy@gmail.com>2022-01-10 01:38:33 (GMT)
committerGitHub <noreply@github.com>2022-01-10 01:38:33 (GMT)
commit0b2b9d251374c5ed94265e28039f82b37d039e3e (patch)
tree1029cb391567de4c88dec0f7236c9770a480c9bd /Lib/unittest
parent1bee9a4625e101d3308831de37590f4e2f57c71c (diff)
downloadcpython-0b2b9d251374c5ed94265e28039f82b37d039e3e.zip
cpython-0b2b9d251374c5ed94265e28039f82b37d039e3e.tar.gz
cpython-0b2b9d251374c5ed94265e28039f82b37d039e3e.tar.bz2
bpo-23882: unittest: Drop PEP 420 support from discovery. (GH-29745)
Diffstat (limited to 'Lib/unittest')
-rw-r--r--Lib/unittest/loader.py56
-rw-r--r--Lib/unittest/test/test_discovery.py35
2 files changed, 15 insertions, 76 deletions
diff --git a/Lib/unittest/loader.py b/Lib/unittest/loader.py
index 5951f3f..eb18cd0 100644
--- a/Lib/unittest/loader.py
+++ b/Lib/unittest/loader.py
@@ -264,8 +264,6 @@ class TestLoader(object):
self._top_level_dir = top_level_dir
is_not_importable = False
- is_namespace = False
- tests = []
if os.path.isdir(os.path.abspath(start_dir)):
start_dir = os.path.abspath(start_dir)
if start_dir != top_level_dir:
@@ -281,50 +279,25 @@ class TestLoader(object):
top_part = start_dir.split('.')[0]
try:
start_dir = os.path.abspath(
- os.path.dirname((the_module.__file__)))
+ os.path.dirname((the_module.__file__)))
except AttributeError:
- # look for namespace packages
- try:
- spec = the_module.__spec__
- except AttributeError:
- spec = None
-
- if spec and spec.loader is None:
- if spec.submodule_search_locations is not None:
- is_namespace = True
-
- for path in the_module.__path__:
- if (not set_implicit_top and
- not path.startswith(top_level_dir)):
- continue
- self._top_level_dir = \
- (path.split(the_module.__name__
- .replace(".", os.path.sep))[0])
- tests.extend(self._find_tests(path,
- pattern,
- namespace=True))
- elif the_module.__name__ in sys.builtin_module_names:
+ if the_module.__name__ in sys.builtin_module_names:
# builtin module
raise TypeError('Can not use builtin modules '
'as dotted module names') from None
else:
raise TypeError(
- 'don\'t know how to discover from {!r}'
- .format(the_module)) from None
+ f"don't know how to discover from {the_module!r}"
+ ) from None
if set_implicit_top:
- if not is_namespace:
- self._top_level_dir = \
- self._get_directory_containing_module(top_part)
- sys.path.remove(top_level_dir)
- else:
- sys.path.remove(top_level_dir)
+ self._top_level_dir = self._get_directory_containing_module(top_part)
+ sys.path.remove(top_level_dir)
if is_not_importable:
raise ImportError('Start directory is not importable: %r' % start_dir)
- if not is_namespace:
- tests = list(self._find_tests(start_dir, pattern))
+ tests = list(self._find_tests(start_dir, pattern))
return self.suiteClass(tests)
def _get_directory_containing_module(self, module_name):
@@ -359,7 +332,7 @@ class TestLoader(object):
# override this method to use alternative matching strategy
return fnmatch(path, pattern)
- def _find_tests(self, start_dir, pattern, namespace=False):
+ def _find_tests(self, start_dir, pattern):
"""Used by discovery. Yields test suites it loads."""
# Handle the __init__ in this package
name = self._get_name_from_path(start_dir)
@@ -368,8 +341,7 @@ class TestLoader(object):
if name != '.' and name not in self._loading_packages:
# name is in self._loading_packages while we have called into
# loadTestsFromModule with name.
- tests, should_recurse = self._find_test_path(
- start_dir, pattern, namespace)
+ tests, should_recurse = self._find_test_path(start_dir, pattern)
if tests is not None:
yield tests
if not should_recurse:
@@ -380,8 +352,7 @@ class TestLoader(object):
paths = sorted(os.listdir(start_dir))
for path in paths:
full_path = os.path.join(start_dir, path)
- tests, should_recurse = self._find_test_path(
- full_path, pattern, namespace)
+ tests, should_recurse = self._find_test_path(full_path, pattern)
if tests is not None:
yield tests
if should_recurse:
@@ -389,11 +360,11 @@ class TestLoader(object):
name = self._get_name_from_path(full_path)
self._loading_packages.add(name)
try:
- yield from self._find_tests(full_path, pattern, namespace)
+ yield from self._find_tests(full_path, pattern)
finally:
self._loading_packages.discard(name)
- def _find_test_path(self, full_path, pattern, namespace=False):
+ def _find_test_path(self, full_path, pattern):
"""Used by discovery.
Loads tests from a single file, or a directories' __init__.py when
@@ -437,8 +408,7 @@ class TestLoader(object):
msg % (mod_name, module_dir, expected_dir))
return self.loadTestsFromModule(module, pattern=pattern), False
elif os.path.isdir(full_path):
- if (not namespace and
- not os.path.isfile(os.path.join(full_path, '__init__.py'))):
+ if not os.path.isfile(os.path.join(full_path, '__init__.py')):
return None, False
load_tests = None
diff --git a/Lib/unittest/test/test_discovery.py b/Lib/unittest/test/test_discovery.py
index 9d502c5..3b58786 100644
--- a/Lib/unittest/test/test_discovery.py
+++ b/Lib/unittest/test/test_discovery.py
@@ -396,7 +396,7 @@ class TestDiscovery(unittest.TestCase):
self.addCleanup(restore_isdir)
_find_tests_args = []
- def _find_tests(start_dir, pattern, namespace=None):
+ def _find_tests(start_dir, pattern):
_find_tests_args.append((start_dir, pattern))
return ['tests']
loader._find_tests = _find_tests
@@ -792,7 +792,7 @@ class TestDiscovery(unittest.TestCase):
expectedPath = os.path.abspath(os.path.dirname(unittest.test.__file__))
self.wasRun = False
- def _find_tests(start_dir, pattern, namespace=None):
+ def _find_tests(start_dir, pattern):
self.wasRun = True
self.assertEqual(start_dir, expectedPath)
return tests
@@ -825,37 +825,6 @@ class TestDiscovery(unittest.TestCase):
'Can not use builtin modules '
'as dotted module names')
- def test_discovery_from_dotted_namespace_packages(self):
- loader = unittest.TestLoader()
-
- package = types.ModuleType('package')
- package.__path__ = ['/a', '/b']
- package.__spec__ = types.SimpleNamespace(
- loader=None,
- submodule_search_locations=['/a', '/b']
- )
-
- def _import(packagename, *args, **kwargs):
- sys.modules[packagename] = package
- return package
-
- _find_tests_args = []
- def _find_tests(start_dir, pattern, namespace=None):
- _find_tests_args.append((start_dir, pattern))
- return ['%s/tests' % start_dir]
-
- loader._find_tests = _find_tests
- loader.suiteClass = list
-
- with unittest.mock.patch('builtins.__import__', _import):
- # Since loader.discover() can modify sys.path, restore it when done.
- with import_helper.DirsOnSysPath():
- # Make sure to remove 'package' from sys.modules when done.
- with test.test_importlib.util.uncache('package'):
- suite = loader.discover('package')
-
- self.assertEqual(suite, ['/a/tests', '/b/tests'])
-
def test_discovery_failed_discovery(self):
loader = unittest.TestLoader()
package = types.ModuleType('package')