(self)
| 563 | self._del_pkg(pkg_dir) |
| 564 | |
| 565 | def test_pkgutil_walk_packages(self): |
| 566 | # This is a dodgy hack to use the test_runpy infrastructure to test |
| 567 | # issue #15343. Issue #15348 declares this is indeed a dodgy hack ;) |
| 568 | import pkgutil |
| 569 | max_depth = 4 |
| 570 | base_name = "__runpy_pkg__" |
| 571 | package_suffixes = ["uncle", "uncle.cousin"] |
| 572 | module_suffixes = ["uncle.cousin.nephew", base_name + ".sibling"] |
| 573 | expected_packages = set() |
| 574 | expected_modules = set() |
| 575 | for depth in range(1, max_depth): |
| 576 | pkg_name = ".".join([base_name] * depth) |
| 577 | expected_packages.add(pkg_name) |
| 578 | for name in package_suffixes: |
| 579 | expected_packages.add(pkg_name + "." + name) |
| 580 | for name in module_suffixes: |
| 581 | expected_modules.add(pkg_name + "." + name) |
| 582 | pkg_name = ".".join([base_name] * max_depth) |
| 583 | expected_packages.add(pkg_name) |
| 584 | expected_modules.add(pkg_name + ".runpy_test") |
| 585 | pkg_dir, mod_fname, mod_name, mod_spec = ( |
| 586 | self._make_pkg("", max_depth)) |
| 587 | self.addCleanup(self._del_pkg, pkg_dir) |
| 588 | for depth in range(2, max_depth+1): |
| 589 | self._add_relative_modules(pkg_dir, "", depth) |
| 590 | for moduleinfo in pkgutil.walk_packages([pkg_dir]): |
| 591 | self.assertIsInstance(moduleinfo, pkgutil.ModuleInfo) |
| 592 | self.assertIsInstance(moduleinfo.module_finder, |
| 593 | importlib.machinery.FileFinder) |
| 594 | if moduleinfo.ispkg: |
| 595 | expected_packages.remove(moduleinfo.name) |
| 596 | else: |
| 597 | expected_modules.remove(moduleinfo.name) |
| 598 | self.assertEqual(len(expected_packages), 0, expected_packages) |
| 599 | self.assertEqual(len(expected_modules), 0, expected_modules) |
| 600 | |
| 601 | class RunPathTestCase(unittest.TestCase, CodeExecutionMixin): |
| 602 | """Unit tests for runpy.run_path""" |
nothing calls this directly
no test coverage detected