]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-112414: Add additional unit tests for calling `repr()` on a namespace package...
authorAlex Waygood <Alex.Waygood@Gmail.com>
Tue, 28 Nov 2023 00:09:59 +0000 (00:09 +0000)
committerGitHub <noreply@github.com>
Tue, 28 Nov 2023 00:09:59 +0000 (00:09 +0000)
Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com>
Lib/test/test_importlib/import_/test___loader__.py
Lib/test/test_module/__init__.py

index c6996a425346762bb234ff6911163376769d83c8..858b37effc64bd719d9ae29103a7067cae0cd653 100644 (file)
@@ -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,
index db2133a9e8d17bbd768f62c7bbdd9755e988de12..d49c44df4d839da14070d78cedb02b757dc0ba7e 100644 (file)
@@ -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")