|
1 | 1 | # Test the module type
|
| 2 | +import importlib.machinery |
2 | 3 | import unittest
|
3 | 4 | import weakref
|
4 | 5 | from test.support import gc_collect
|
@@ -264,6 +265,35 @@ def test_module_repr_source(self):
|
264 | 265 | self.assertEqual(r[-len(ends_with):], ends_with,
|
265 | 266 | '{!r} does not end with {!r}'.format(r, ends_with))
|
266 | 267 |
|
| 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 | + |
267 | 297 | def test_module_finalization_at_shutdown(self):
|
268 | 298 | # Module globals and builtins should still be available during shutdown
|
269 | 299 | rc, out, err = assert_python_ok("-c", "from test.test_module import final_a")
|
|
0 commit comments