summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Waygood <Alex.Waygood@Gmail.com>2023-11-28 00:09:59 (GMT)
committerGitHub <noreply@github.com>2023-11-28 00:09:59 (GMT)
commitcf2054059c08ef1c5546f24874191f341dc94eb9 (patch)
treefe776ead519cd060f6da82ffcca925db1b3bd803
parent562d7149c6944fb9e4c7be80664b2f2d5a12a3ea (diff)
downloadcpython-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__.py4
-rw-r--r--Lib/test/test_module/__init__.py30
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")