(self)
| 447 | # Another awful testing hack to be cleaned up once the test_runpy |
| 448 | # helpers are factored out to a common location |
| 449 | def test_iter_importers(self): |
| 450 | iter_importers = pkgutil.iter_importers |
| 451 | get_importer = pkgutil.get_importer |
| 452 | |
| 453 | pkgname = 'spam' |
| 454 | modname = 'eggs' |
| 455 | dirname = self.create_init(pkgname) |
| 456 | pathitem = os.path.join(dirname, pkgname) |
| 457 | fullname = '{}.{}'.format(pkgname, modname) |
| 458 | sys.modules.pop(fullname, None) |
| 459 | sys.modules.pop(pkgname, None) |
| 460 | try: |
| 461 | self.create_submodule(dirname, pkgname, modname, 0) |
| 462 | |
| 463 | importlib.import_module(fullname) |
| 464 | |
| 465 | importers = list(iter_importers(fullname)) |
| 466 | expected_importer = get_importer(pathitem) |
| 467 | for finder in importers: |
| 468 | spec = finder.find_spec(fullname) |
| 469 | loader = spec.loader |
| 470 | try: |
| 471 | loader = loader.loader |
| 472 | except AttributeError: |
| 473 | # For now we still allow raw loaders from |
| 474 | # find_module(). |
| 475 | pass |
| 476 | self.assertIsInstance(finder, importlib.machinery.FileFinder) |
| 477 | self.assertEqual(finder, expected_importer) |
| 478 | self.assertIsInstance(loader, |
| 479 | importlib.machinery.SourceFileLoader) |
| 480 | self.assertIsNone(finder.find_spec(pkgname)) |
| 481 | |
| 482 | with self.assertRaises(ImportError): |
| 483 | list(iter_importers('invalid.module')) |
| 484 | |
| 485 | with self.assertRaises(ImportError): |
| 486 | list(iter_importers('.spam')) |
| 487 | finally: |
| 488 | shutil.rmtree(dirname) |
| 489 | del sys.path[0] |
| 490 | try: |
| 491 | del sys.modules['spam'] |
| 492 | del sys.modules['spam.eggs'] |
| 493 | except KeyError: |
| 494 | pass |
| 495 | |
| 496 | |
| 497 | def test_mixed_namespace(self): |
nothing calls this directly
no test coverage detected