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

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

#countcontent
1n/a"""Test that the semantics relating to the 'fromlist' argument are correct."""
2n/afrom .. import util
3n/afrom . import util as import_util
4n/aimport imp
5n/aimport unittest
6n/a
7n/aclass ReturnValue(unittest.TestCase):
8n/a
9n/a """The use of fromlist influences what import returns.
10n/a
11n/a If direct ``import ...`` statement is used, the root module or package is
12n/a returned [import return]. But if fromlist is set, then the specified module
13n/a is actually returned (whether it is a relative import or not)
14n/a [from return].
15n/a
16n/a """
17n/a
18n/a def test_return_from_import(self):
19n/a # [import return]
20n/a with util.mock_modules('pkg.__init__', 'pkg.module') as importer:
21n/a with util.import_state(meta_path=[importer]):
22n/a module = import_util.import_('pkg.module')
23n/a self.assertEqual(module.__name__, 'pkg')
24n/a
25n/a def test_return_from_from_import(self):
26n/a # [from return]
27n/a with util.mock_modules('pkg.__init__', 'pkg.module')as importer:
28n/a with util.import_state(meta_path=[importer]):
29n/a module = import_util.import_('pkg.module', fromlist=['attr'])
30n/a self.assertEqual(module.__name__, 'pkg.module')
31n/a
32n/a
33n/aclass HandlingFromlist(unittest.TestCase):
34n/a
35n/a """Using fromlist triggers different actions based on what is being asked
36n/a of it.
37n/a
38n/a If fromlist specifies an object on a module, nothing special happens
39n/a [object case]. This is even true if the object does not exist [bad object].
40n/a
41n/a If a package is being imported, then what is listed in fromlist may be
42n/a treated as a module to be imported [module]. And this extends to what is
43n/a contained in __all__ when '*' is imported [using *]. And '*' does not need
44n/a to be the only name in the fromlist [using * with others].
45n/a
46n/a """
47n/a
48n/a def test_object(self):
49n/a # [object case]
50n/a with util.mock_modules('module') as importer:
51n/a with util.import_state(meta_path=[importer]):
52n/a module = import_util.import_('module', fromlist=['attr'])
53n/a self.assertEqual(module.__name__, 'module')
54n/a
55n/a def test_unexistent_object(self):
56n/a # [bad object]
57n/a with util.mock_modules('module') as importer:
58n/a with util.import_state(meta_path=[importer]):
59n/a module = import_util.import_('module', fromlist=['non_existent'])
60n/a self.assertEqual(module.__name__, 'module')
61n/a self.assertTrue(not hasattr(module, 'non_existent'))
62n/a
63n/a def test_module_from_package(self):
64n/a # [module]
65n/a with util.mock_modules('pkg.__init__', 'pkg.module') as importer:
66n/a with util.import_state(meta_path=[importer]):
67n/a module = import_util.import_('pkg', fromlist=['module'])
68n/a self.assertEqual(module.__name__, 'pkg')
69n/a self.assertTrue(hasattr(module, 'module'))
70n/a self.assertEqual(module.module.__name__, 'pkg.module')
71n/a
72n/a def test_empty_string(self):
73n/a with util.mock_modules('pkg.__init__', 'pkg.mod') as importer:
74n/a with util.import_state(meta_path=[importer]):
75n/a module = import_util.import_('pkg.mod', fromlist=[''])
76n/a self.assertEqual(module.__name__, 'pkg.mod')
77n/a
78n/a def basic_star_test(self, fromlist=['*']):
79n/a # [using *]
80n/a with util.mock_modules('pkg.__init__', 'pkg.module') as mock:
81n/a with util.import_state(meta_path=[mock]):
82n/a mock['pkg'].__all__ = ['module']
83n/a module = import_util.import_('pkg', fromlist=fromlist)
84n/a self.assertEqual(module.__name__, 'pkg')
85n/a self.assertTrue(hasattr(module, 'module'))
86n/a self.assertEqual(module.module.__name__, 'pkg.module')
87n/a
88n/a def test_using_star(self):
89n/a # [using *]
90n/a self.basic_star_test()
91n/a
92n/a def test_fromlist_as_tuple(self):
93n/a self.basic_star_test(('*',))
94n/a
95n/a def test_star_with_others(self):
96n/a # [using * with others]
97n/a context = util.mock_modules('pkg.__init__', 'pkg.module1', 'pkg.module2')
98n/a with context as mock:
99n/a with util.import_state(meta_path=[mock]):
100n/a mock['pkg'].__all__ = ['module1']
101n/a module = import_util.import_('pkg', fromlist=['module2', '*'])
102n/a self.assertEqual(module.__name__, 'pkg')
103n/a self.assertTrue(hasattr(module, 'module1'))
104n/a self.assertTrue(hasattr(module, 'module2'))
105n/a self.assertEqual(module.module1.__name__, 'pkg.module1')
106n/a self.assertEqual(module.module2.__name__, 'pkg.module2')
107n/a
108n/a
109n/adef test_main():
110n/a from test.support import run_unittest
111n/a run_unittest(ReturnValue, HandlingFromlist)
112n/a
113n/aif __name__ == '__main__':
114n/a test_main()