diff options
author | Alex Waygood <Alex.Waygood@Gmail.com> | 2023-11-28 00:09:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-28 00:09:59 (GMT) |
commit | cf2054059c08ef1c5546f24874191f341dc94eb9 (patch) | |
tree | fe776ead519cd060f6da82ffcca925db1b3bd803 | |
parent | 562d7149c6944fb9e4c7be80664b2f2d5a12a3ea (diff) | |
download | cpython-cf2054059c08ef1c5546f24874191f341dc94eb9.zip cpython-cf2054059c08ef1c5546f24874191f341dc94eb9.tar.gz cpython-cf2054059c08ef1c5546f24874191f341dc94eb9.tar.bz2 |
gh-112414: Add additional unit tests for calling `repr()` on a namespace package (#112475)
Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
-rw-r--r-- | Lib/test/test_importlib/import_/test___loader__.py | 4 | ||||
-rw-r--r-- | Lib/test/test_module/__init__.py | 30 |
2 files changed, 30 insertions, 4 deletions
diff --git a/Lib/test/test_importlib/import_/test___loader__.py b/Lib/test/test_importlib/import_/test___loader__.py index c6996a4..858b37e 100644 --- a/Lib/test/test_importlib/import_/test___loader__.py +++ b/Lib/test/test_importlib/import_/test___loader__.py @@ -23,10 +23,6 @@ class SpecLoaderAttributeTests: with util.uncache('blah'), util.import_state(meta_path=[loader]): module = self.__import__('blah') self.assertEqual(loader, module.__loader__) - expected_repr_pattern = ( - r"<module 'blah' \(<test\.test_importlib\..*SpecLoaderMock object at .+>\)>" - ) - self.assertRegex(repr(module), expected_repr_pattern) (Frozen_SpecTests, diff --git a/Lib/test/test_module/__init__.py b/Lib/test/test_module/__init__.py index db2133a..d49c44d 100644 --- a/Lib/test/test_module/__init__.py +++ b/Lib/test/test_module/__init__.py @@ -1,4 +1,5 @@ # Test the module type +import importlib.machinery import unittest import weakref from test.support import gc_collect @@ -264,6 +265,35 @@ a = A(destroyed)""" self.assertEqual(r[-len(ends_with):], ends_with, '{!r} does not end with {!r}'.format(r, ends_with)) + def test_module_repr_with_namespace_package(self): + m = ModuleType('foo') + loader = importlib.machinery.NamespaceLoader('foo', ['bar'], 'baz') + spec = importlib.machinery.ModuleSpec('foo', loader) + m.__loader__ = loader + m.__spec__ = spec + self.assertEqual(repr(m), "<module 'foo' (namespace) from ['bar']>") + + def test_module_repr_with_namespace_package_and_custom_loader(self): + m = ModuleType('foo') + loader = BareLoader() + spec = importlib.machinery.ModuleSpec('foo', loader) + m.__loader__ = loader + m.__spec__ = spec + expected_repr_pattern = r"<module 'foo' \(<.*\.BareLoader object at .+>\)>" + self.assertRegex(repr(m), expected_repr_pattern) + self.assertNotIn('from', repr(m)) + + def test_module_repr_with_fake_namespace_package(self): + m = ModuleType('foo') + loader = BareLoader() + loader._path = ['spam'] + spec = importlib.machinery.ModuleSpec('foo', loader) + m.__loader__ = loader + m.__spec__ = spec + expected_repr_pattern = r"<module 'foo' \(<.*\.BareLoader object at .+>\)>" + self.assertRegex(repr(m), expected_repr_pattern) + self.assertNotIn('from', repr(m)) + def test_module_finalization_at_shutdown(self): # Module globals and builtins should still be available during shutdown rc, out, err = assert_python_ok("-c", "from test.test_module import final_a") |