Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit cf20540

Browse files
gh-112414: Add additional unit tests for calling repr() on a namespace package (#112475)
Co-authored-by: Eric Snow <[email protected]>
1 parent 562d714 commit cf20540

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

Lib/test/test_importlib/import_/test___loader__.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ def test___loader__(self):
2323
with util.uncache('blah'), util.import_state(meta_path=[loader]):
2424
module = self.__import__('blah')
2525
self.assertEqual(loader, module.__loader__)
26-
expected_repr_pattern = (
27-
r"<module 'blah' \(<test\.test_importlib\..*SpecLoaderMock object at .+>\)>"
28-
)
29-
self.assertRegex(repr(module), expected_repr_pattern)
3026

3127

3228
(Frozen_SpecTests,

Lib/test/test_module/__init__.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Test the module type
2+
import importlib.machinery
23
import unittest
34
import weakref
45
from test.support import gc_collect
@@ -264,6 +265,35 @@ def test_module_repr_source(self):
264265
self.assertEqual(r[-len(ends_with):], ends_with,
265266
'{!r} does not end with {!r}'.format(r, ends_with))
266267

268+
def test_module_repr_with_namespace_package(self):
269+
m = ModuleType('foo')
270+
loader = importlib.machinery.NamespaceLoader('foo', ['bar'], 'baz')
271+
spec = importlib.machinery.ModuleSpec('foo', loader)
272+
m.__loader__ = loader
273+
m.__spec__ = spec
274+
self.assertEqual(repr(m), "<module 'foo' (namespace) from ['bar']>")
275+
276+
def test_module_repr_with_namespace_package_and_custom_loader(self):
277+
m = ModuleType('foo')
278+
loader = BareLoader()
279+
spec = importlib.machinery.ModuleSpec('foo', loader)
280+
m.__loader__ = loader
281+
m.__spec__ = spec
282+
expected_repr_pattern = r"<module 'foo' \(<.*\.BareLoader object at .+>\)>"
283+
self.assertRegex(repr(m), expected_repr_pattern)
284+
self.assertNotIn('from', repr(m))
285+
286+
def test_module_repr_with_fake_namespace_package(self):
287+
m = ModuleType('foo')
288+
loader = BareLoader()
289+
loader._path = ['spam']
290+
spec = importlib.machinery.ModuleSpec('foo', loader)
291+
m.__loader__ = loader
292+
m.__spec__ = spec
293+
expected_repr_pattern = r"<module 'foo' \(<.*\.BareLoader object at .+>\)>"
294+
self.assertRegex(repr(m), expected_repr_pattern)
295+
self.assertNotIn('from', repr(m))
296+
267297
def test_module_finalization_at_shutdown(self):
268298
# Module globals and builtins should still be available during shutdown
269299
rc, out, err = assert_python_ok("-c", "from test.test_module import final_a")

0 commit comments

Comments
 (0)