(self, depth, run_name=None)
| 400 | if verbose > 1: print(" Added nephew module:", nephew_fname) |
| 401 | |
| 402 | def _check_relative_imports(self, depth, run_name=None): |
| 403 | contents = r"""\ |
| 404 | from __future__ import absolute_import |
| 405 | from . import sibling |
| 406 | from ..uncle.cousin import nephew |
| 407 | """ |
| 408 | pkg_dir, mod_fname, mod_name, mod_spec = ( |
| 409 | self._make_pkg(contents, depth)) |
| 410 | if run_name is None: |
| 411 | expected_name = mod_name |
| 412 | else: |
| 413 | expected_name = run_name |
| 414 | try: |
| 415 | self._add_relative_modules(pkg_dir, contents, depth) |
| 416 | pkg_name = mod_name.rpartition('.')[0] |
| 417 | if verbose > 1: print("Running from source:", mod_name) |
| 418 | d1 = run_module(mod_name, run_name=run_name) # Read from source |
| 419 | self.assertEqual(d1["__name__"], expected_name) |
| 420 | self.assertEqual(d1["__package__"], pkg_name) |
| 421 | self.assertIn("sibling", d1) |
| 422 | self.assertIn("nephew", d1) |
| 423 | del d1 # Ensure __loader__ entry doesn't keep file open |
| 424 | importlib.invalidate_caches() |
| 425 | __import__(mod_name) |
| 426 | os.remove(mod_fname) |
| 427 | if not sys.dont_write_bytecode and sys.implementation.cache_tag: |
| 428 | make_legacy_pyc(mod_fname) |
| 429 | unload(mod_name) # In case the loader caches paths |
| 430 | if verbose > 1: print("Running from compiled:", mod_name) |
| 431 | importlib.invalidate_caches() |
| 432 | d2 = run_module(mod_name, run_name=run_name) # Read from bytecode |
| 433 | self.assertEqual(d2["__name__"], expected_name) |
| 434 | self.assertEqual(d2["__package__"], pkg_name) |
| 435 | self.assertIn("sibling", d2) |
| 436 | self.assertIn("nephew", d2) |
| 437 | del d2 # Ensure __loader__ entry doesn't keep file open |
| 438 | finally: |
| 439 | self._del_pkg(pkg_dir) |
| 440 | if verbose > 1: print("Module executed successfully") |
| 441 | |
| 442 | def test_run_module(self): |
| 443 | for depth in range(4): |
no test coverage detected