ยปCore Development>Code coverage>Lib/importlib/test/import_/test_packages.py

Python code coverage for Lib/importlib/test/import_/test_packages.py

#countcontent
1n/afrom .. import util
2n/afrom . import util as import_util
3n/aimport sys
4n/aimport unittest
5n/aimport importlib
6n/afrom test import support
7n/a
8n/a
9n/aclass ParentModuleTests(unittest.TestCase):
10n/a
11n/a """Importing a submodule should import the parent modules."""
12n/a
13n/a def test_import_parent(self):
14n/a with util.mock_modules('pkg.__init__', 'pkg.module') as mock:
15n/a with util.import_state(meta_path=[mock]):
16n/a module = import_util.import_('pkg.module')
17n/a self.assertIn('pkg', sys.modules)
18n/a
19n/a def test_bad_parent(self):
20n/a with util.mock_modules('pkg.module') as mock:
21n/a with util.import_state(meta_path=[mock]):
22n/a with self.assertRaises(ImportError) as cm:
23n/a import_util.import_('pkg.module')
24n/a self.assertEqual(cm.exception.name, 'pkg')
25n/a
26n/a def test_raising_parent_after_importing_child(self):
27n/a def __init__():
28n/a import pkg.module
29n/a 1/0
30n/a mock = util.mock_modules('pkg.__init__', 'pkg.module',
31n/a module_code={'pkg': __init__})
32n/a with mock:
33n/a with util.import_state(meta_path=[mock]):
34n/a with self.assertRaises(ZeroDivisionError):
35n/a import_util.import_('pkg')
36n/a self.assertNotIn('pkg', sys.modules)
37n/a self.assertIn('pkg.module', sys.modules)
38n/a with self.assertRaises(ZeroDivisionError):
39n/a import_util.import_('pkg.module')
40n/a self.assertNotIn('pkg', sys.modules)
41n/a self.assertIn('pkg.module', sys.modules)
42n/a
43n/a def test_raising_parent_after_relative_importing_child(self):
44n/a def __init__():
45n/a from . import module
46n/a 1/0
47n/a mock = util.mock_modules('pkg.__init__', 'pkg.module',
48n/a module_code={'pkg': __init__})
49n/a with mock:
50n/a with util.import_state(meta_path=[mock]):
51n/a with self.assertRaises((ZeroDivisionError, ImportError)):
52n/a # This raises ImportError on the "from . import module"
53n/a # line, not sure why.
54n/a import_util.import_('pkg')
55n/a self.assertNotIn('pkg', sys.modules)
56n/a with self.assertRaises((ZeroDivisionError, ImportError)):
57n/a import_util.import_('pkg.module')
58n/a self.assertNotIn('pkg', sys.modules)
59n/a # XXX False
60n/a #self.assertIn('pkg.module', sys.modules)
61n/a
62n/a def test_raising_parent_after_double_relative_importing_child(self):
63n/a def __init__():
64n/a from ..subpkg import module
65n/a 1/0
66n/a mock = util.mock_modules('pkg.__init__', 'pkg.subpkg.__init__',
67n/a 'pkg.subpkg.module',
68n/a module_code={'pkg.subpkg': __init__})
69n/a with mock:
70n/a with util.import_state(meta_path=[mock]):
71n/a with self.assertRaises((ZeroDivisionError, ImportError)):
72n/a # This raises ImportError on the "from ..subpkg import module"
73n/a # line, not sure why.
74n/a import_util.import_('pkg.subpkg')
75n/a self.assertNotIn('pkg.subpkg', sys.modules)
76n/a with self.assertRaises((ZeroDivisionError, ImportError)):
77n/a import_util.import_('pkg.subpkg.module')
78n/a self.assertNotIn('pkg.subpkg', sys.modules)
79n/a # XXX False
80n/a #self.assertIn('pkg.subpkg.module', sys.modules)
81n/a
82n/a def test_module_not_package(self):
83n/a # Try to import a submodule from a non-package should raise ImportError.
84n/a assert not hasattr(sys, '__path__')
85n/a with self.assertRaises(ImportError) as cm:
86n/a import_util.import_('sys.no_submodules_here')
87n/a self.assertEqual(cm.exception.name, 'sys.no_submodules_here')
88n/a
89n/a def test_module_not_package_but_side_effects(self):
90n/a # If a module injects something into sys.modules as a side-effect, then
91n/a # pick up on that fact.
92n/a name = 'mod'
93n/a subname = name + '.b'
94n/a def module_injection():
95n/a sys.modules[subname] = 'total bunk'
96n/a mock_modules = util.mock_modules('mod',
97n/a module_code={'mod': module_injection})
98n/a with mock_modules as mock:
99n/a with util.import_state(meta_path=[mock]):
100n/a try:
101n/a submodule = import_util.import_(subname)
102n/a finally:
103n/a support.unload(subname)
104n/a
105n/a
106n/adef test_main():
107n/a from test.support import run_unittest
108n/a run_unittest(ParentModuleTests)
109n/a
110n/a
111n/aif __name__ == '__main__':
112n/a test_main()