Mercurial > cpython-lru_cache-weakref
annotate Lib/test/test_importlib/test_api.py @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 07229c6104b1 |
| children |
| rev | line source |
|---|---|
|
51426
7a1356d2aeef
Rewrite the code implementing __import__ for importlib. Now it is much simpler
Brett Cannon <bcannon@gmail.com>
parents:
51236
diff
changeset
|
1 from . import util |
|
84159
5e8b377942f7
Issue #17177: stop using imp in test_importlib
Brett Cannon <brett@python.org>
parents:
84123
diff
changeset
|
2 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
3 frozen_init, source_init = util.import_importlib('importlib') |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
4 frozen_util, source_util = util.import_importlib('importlib.util') |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
5 frozen_machinery, source_machinery = util.import_importlib('importlib.machinery') |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
6 |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
7 import os.path |
|
51426
7a1356d2aeef
Rewrite the code implementing __import__ for importlib. Now it is much simpler
Brett Cannon <bcannon@gmail.com>
parents:
51236
diff
changeset
|
8 import sys |
|
77945
906c69928049
Issue #15210: Greatly simplify the test for supporting importlib
Brett Cannon <brett@python.org>
parents:
77916
diff
changeset
|
9 from test import support |
|
81882
4a4688b865ff
Add a test for fix of issue #17098
Brett Cannon <brett@python.org>
parents:
78485
diff
changeset
|
10 import types |
|
51426
7a1356d2aeef
Rewrite the code implementing __import__ for importlib. Now it is much simpler
Brett Cannon <bcannon@gmail.com>
parents:
51236
diff
changeset
|
11 import unittest |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
12 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
13 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
14 class ImportModuleTests: |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
15 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
16 """Test importlib.import_module.""" |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
17 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
18 def test_module_import(self): |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
19 # Test importing a top-level module. |
|
51236
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
20 with util.mock_modules('top_level') as mock: |
|
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
21 with util.import_state(meta_path=[mock]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
22 module = self.init.import_module('top_level') |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
23 self.assertEqual(module.__name__, 'top_level') |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
24 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
25 def test_absolute_package_import(self): |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
26 # Test importing a module from a package with an absolute name. |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
27 pkg_name = 'pkg' |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
28 pkg_long_name = '{0}.__init__'.format(pkg_name) |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
29 name = '{0}.mod'.format(pkg_name) |
|
51236
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
30 with util.mock_modules(pkg_long_name, name) as mock: |
|
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
31 with util.import_state(meta_path=[mock]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
32 module = self.init.import_module(name) |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
33 self.assertEqual(module.__name__, name) |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
34 |
|
51993
ebe10810ebed
Add a test for importlib.import_module.
Brett Cannon <bcannon@gmail.com>
parents:
51426
diff
changeset
|
35 def test_shallow_relative_package_import(self): |
|
62758
6c3c543ede8c
Fix a spelling mistake in a comment.
Brett Cannon <bcannon@gmail.com>
parents:
55737
diff
changeset
|
36 # Test importing a module from a package through a relative import. |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
37 pkg_name = 'pkg' |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
38 pkg_long_name = '{0}.__init__'.format(pkg_name) |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
39 module_name = 'mod' |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
40 absolute_name = '{0}.{1}'.format(pkg_name, module_name) |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
41 relative_name = '.{0}'.format(module_name) |
|
51236
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
42 with util.mock_modules(pkg_long_name, absolute_name) as mock: |
|
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
43 with util.import_state(meta_path=[mock]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
44 self.init.import_module(pkg_name) |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
45 module = self.init.import_module(relative_name, pkg_name) |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
46 self.assertEqual(module.__name__, absolute_name) |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
47 |
|
51993
ebe10810ebed
Add a test for importlib.import_module.
Brett Cannon <bcannon@gmail.com>
parents:
51426
diff
changeset
|
48 def test_deep_relative_package_import(self): |
|
ebe10810ebed
Add a test for importlib.import_module.
Brett Cannon <bcannon@gmail.com>
parents:
51426
diff
changeset
|
49 modules = ['a.__init__', 'a.b.__init__', 'a.c'] |
|
ebe10810ebed
Add a test for importlib.import_module.
Brett Cannon <bcannon@gmail.com>
parents:
51426
diff
changeset
|
50 with util.mock_modules(*modules) as mock: |
|
ebe10810ebed
Add a test for importlib.import_module.
Brett Cannon <bcannon@gmail.com>
parents:
51426
diff
changeset
|
51 with util.import_state(meta_path=[mock]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
52 self.init.import_module('a') |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
53 self.init.import_module('a.b') |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
54 module = self.init.import_module('..c', 'a.b') |
|
51993
ebe10810ebed
Add a test for importlib.import_module.
Brett Cannon <bcannon@gmail.com>
parents:
51426
diff
changeset
|
55 self.assertEqual(module.__name__, 'a.c') |
|
ebe10810ebed
Add a test for importlib.import_module.
Brett Cannon <bcannon@gmail.com>
parents:
51426
diff
changeset
|
56 |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
57 def test_absolute_import_with_package(self): |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
58 # Test importing a module from a package with an absolute name with |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
59 # the 'package' argument given. |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
60 pkg_name = 'pkg' |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
61 pkg_long_name = '{0}.__init__'.format(pkg_name) |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
62 name = '{0}.mod'.format(pkg_name) |
|
51236
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
63 with util.mock_modules(pkg_long_name, name) as mock: |
|
d85ef26efd10
Rename importlib.test.support to importlib.test.util.
Brett Cannon <bcannon@gmail.com>
parents:
50845
diff
changeset
|
64 with util.import_state(meta_path=[mock]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
65 self.init.import_module(pkg_name) |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
66 module = self.init.import_module(name, pkg_name) |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
67 self.assertEqual(module.__name__, name) |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
68 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
69 def test_relative_import_wo_package(self): |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
70 # Relative imports cannot happen without the 'package' argument being |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
71 # set. |
|
55737
b65ebed06eb0
Move over to using assertRaises as a context manager for importlib tests.
Brett Cannon <bcannon@gmail.com>
parents:
51993
diff
changeset
|
72 with self.assertRaises(TypeError): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
73 self.init.import_module('.support') |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
74 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
75 |
|
73973
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
76 def test_loaded_once(self): |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
77 # Issue #13591: Modules should only be loaded once when |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
78 # initializing the parent package attempts to import the |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
79 # module currently being imported. |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
80 b_load_count = 0 |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
81 def load_a(): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
82 self.init.import_module('a.b') |
|
73973
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
83 def load_b(): |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
84 nonlocal b_load_count |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
85 b_load_count += 1 |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
86 code = {'a': load_a, 'a.b': load_b} |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
87 modules = ['a.__init__', 'a.b'] |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
88 with util.mock_modules(*modules, module_code=code) as mock: |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
89 with util.import_state(meta_path=[mock]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
90 self.init.import_module('a.b') |
|
73973
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
91 self.assertEqual(b_load_count, 1) |
|
d2504d30f259
Issue #13591: import_module potentially imports a module twice.
Meador Inge <meadori@gmail.com>
parents:
62758
diff
changeset
|
92 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
93 class Frozen_ImportModuleTests(ImportModuleTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
94 init = frozen_init |
|
75324
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
95 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
96 class Source_ImportModuleTests(ImportModuleTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
97 init = source_init |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
98 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
99 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
100 class FindLoaderTests: |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
101 |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
102 class FakeMetaFinder: |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
103 @staticmethod |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
104 def find_module(name, path=None): return name, path |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
105 |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
106 def test_sys_modules(self): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
107 # If a module with __loader__ is in sys.modules, then return it. |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
108 name = 'some_mod' |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
109 with util.uncache(name): |
|
84159
5e8b377942f7
Issue #17177: stop using imp in test_importlib
Brett Cannon <brett@python.org>
parents:
84123
diff
changeset
|
110 module = types.ModuleType(name) |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
111 loader = 'a loader!' |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
112 module.__loader__ = loader |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
113 sys.modules[name] = module |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
114 found = self.init.find_loader(name) |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
115 self.assertEqual(loader, found) |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
116 |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
117 def test_sys_modules_loader_is_None(self): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
118 # If sys.modules[name].__loader__ is None, raise ValueError. |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
119 name = 'some_mod' |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
120 with util.uncache(name): |
|
84159
5e8b377942f7
Issue #17177: stop using imp in test_importlib
Brett Cannon <brett@python.org>
parents:
84123
diff
changeset
|
121 module = types.ModuleType(name) |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
122 module.__loader__ = None |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
123 sys.modules[name] = module |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
124 with self.assertRaises(ValueError): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
125 self.init.find_loader(name) |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
126 |
|
82648
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
127 def test_sys_modules_loader_is_not_set(self): |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
128 # Should raise ValueError |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
129 # Issue #17099 |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
130 name = 'some_mod' |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
131 with util.uncache(name): |
|
84159
5e8b377942f7
Issue #17177: stop using imp in test_importlib
Brett Cannon <brett@python.org>
parents:
84123
diff
changeset
|
132 module = types.ModuleType(name) |
|
82648
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
133 try: |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
134 del module.__loader__ |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
135 except AttributeError: |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
136 pass |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
137 sys.modules[name] = module |
|
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
138 with self.assertRaises(ValueError): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
139 self.init.find_loader(name) |
|
82648
cee04627bdd0
Issue #17099: Have importlib.find_loader() raise ValueError when
Brett Cannon <brett@python.org>
parents:
81981
diff
changeset
|
140 |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
141 def test_success(self): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
142 # Return the loader found on sys.meta_path. |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
143 name = 'some_mod' |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
144 with util.uncache(name): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
145 with util.import_state(meta_path=[self.FakeMetaFinder]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
146 self.assertEqual((name, None), self.init.find_loader(name)) |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
147 |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
148 def test_success_path(self): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
149 # Searching on a path should work. |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
150 name = 'some_mod' |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
151 path = 'path to some place' |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
152 with util.uncache(name): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
153 with util.import_state(meta_path=[self.FakeMetaFinder]): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
154 self.assertEqual((name, path), |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
155 self.init.find_loader(name, path)) |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
156 |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
157 def test_nothing(self): |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
158 # None is returned upon failure to find a loader. |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
159 self.assertIsNone(self.init.find_loader('nevergoingtofindthismodule')) |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
160 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
161 class Frozen_FindLoaderTests(FindLoaderTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
162 init = frozen_init |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
163 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
164 class Source_FindLoaderTests(FindLoaderTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
165 init = source_init |
|
76891
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
166 |
|
7bf8ac742d2f
Issue #13959: Introduce importlib.find_loader().
Brett Cannon <brett@python.org>
parents:
75324
diff
changeset
|
167 |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
168 class FindSpecTests: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
169 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
170 class FakeMetaFinder: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
171 @staticmethod |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
172 def find_spec(name, path=None, target=None): return name, path, target |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
173 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
174 def test_sys_modules(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
175 name = 'some_mod' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
176 with util.uncache(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
177 module = types.ModuleType(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
178 loader = 'a loader!' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
179 spec = self.machinery.ModuleSpec(name, loader) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
180 module.__loader__ = loader |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
181 module.__spec__ = spec |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
182 sys.modules[name] = module |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
183 found = self.init.find_spec(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
184 self.assertEqual(found, spec) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
185 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
186 def test_sys_modules_without___loader__(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
187 name = 'some_mod' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
188 with util.uncache(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
189 module = types.ModuleType(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
190 del module.__loader__ |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
191 loader = 'a loader!' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
192 spec = self.machinery.ModuleSpec(name, loader) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
193 module.__spec__ = spec |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
194 sys.modules[name] = module |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
195 found = self.init.find_spec(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
196 self.assertEqual(found, spec) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
197 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
198 def test_sys_modules_spec_is_None(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
199 name = 'some_mod' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
200 with util.uncache(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
201 module = types.ModuleType(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
202 module.__spec__ = None |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
203 sys.modules[name] = module |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
204 with self.assertRaises(ValueError): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
205 self.init.find_spec(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
206 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
207 def test_sys_modules_loader_is_None(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
208 name = 'some_mod' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
209 with util.uncache(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
210 module = types.ModuleType(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
211 spec = self.machinery.ModuleSpec(name, None) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
212 module.__spec__ = spec |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
213 sys.modules[name] = module |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
214 found = self.init.find_spec(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
215 self.assertEqual(found, spec) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
216 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
217 def test_sys_modules_spec_is_not_set(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
218 name = 'some_mod' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
219 with util.uncache(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
220 module = types.ModuleType(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
221 try: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
222 del module.__spec__ |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
223 except AttributeError: |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
224 pass |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
225 sys.modules[name] = module |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
226 with self.assertRaises(ValueError): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
227 self.init.find_spec(name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
228 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
229 def test_success(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
230 name = 'some_mod' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
231 with util.uncache(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
232 with util.import_state(meta_path=[self.FakeMetaFinder]): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
233 self.assertEqual((name, None, None), |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
234 self.init.find_spec(name)) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
235 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
236 def test_success_path(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
237 # Searching on a path should work. |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
238 name = 'some_mod' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
239 path = 'path to some place' |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
240 with util.uncache(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
241 with util.import_state(meta_path=[self.FakeMetaFinder]): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
242 self.assertEqual((name, path, None), |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
243 self.init.find_spec(name, path)) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
244 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
245 def test_nothing(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
246 # None is returned upon failure to find a loader. |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
247 self.assertIsNone(self.init.find_spec('nevergoingtofindthismodule')) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
248 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
249 class Frozen_FindSpecTests(FindSpecTests, unittest.TestCase): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
250 init = frozen_init |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
251 machinery = frozen_machinery |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
252 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
253 class Source_FindSpecTests(FindSpecTests, unittest.TestCase): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
254 init = source_init |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
255 machinery = source_machinery |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
256 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
257 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
258 class ReloadTests: |
|
84123
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
259 |
|
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
260 """Test module reloading for builtin and extension modules.""" |
|
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
261 |
|
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
262 def test_reload_modules(self): |
|
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
263 for mod in ('tokenize', 'time', 'marshal'): |
|
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
264 with self.subTest(module=mod): |
|
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
265 with support.CleanImport(mod): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
266 module = self.init.import_module(mod) |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
267 self.init.reload(module) |
|
84123
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
268 |
|
85175
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
269 def test_module_replaced(self): |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
270 def code(): |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
271 import sys |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
272 module = type(sys)('top_level') |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
273 module.spam = 3 |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
274 sys.modules['top_level'] = module |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
275 mock = util.mock_modules('top_level', |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
276 module_code={'top_level': code}) |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
277 with mock: |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
278 with util.import_state(meta_path=[mock]): |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
279 module = self.init.import_module('top_level') |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
280 reloaded = self.init.reload(module) |
|
85175
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
281 actual = sys.modules['top_level'] |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
282 self.assertEqual(actual.spam, 3) |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
283 self.assertEqual(reloaded.spam, 3) |
|
1af087712e69
Closes issue #18698: ensure importlib.reload() returns the module out of sys.modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
84159
diff
changeset
|
284 |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
285 def test_reload_missing_loader(self): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
286 with support.CleanImport('types'): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
287 import types |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
288 loader = types.__loader__ |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
289 del types.__loader__ |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
290 reloaded = self.init.reload(types) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
291 |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
292 self.assertIs(reloaded, types) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
293 self.assertIs(sys.modules['types'], types) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
294 self.assertEqual(reloaded.__loader__.path, loader.path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
295 |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
296 def test_reload_loader_replaced(self): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
297 with support.CleanImport('types'): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
298 import types |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
299 types.__loader__ = None |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
300 self.init.invalidate_caches() |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
301 reloaded = self.init.reload(types) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
302 |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
303 self.assertIsNot(reloaded.__loader__, None) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
304 self.assertIs(reloaded, types) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
305 self.assertIs(sys.modules['types'], types) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
306 |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
307 def test_reload_location_changed(self): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
308 name = 'spam' |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
309 with support.temp_cwd(None) as cwd: |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
310 with util.uncache('spam'): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
311 with support.DirsOnSysPath(cwd): |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
312 # Start as a plain module. |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
313 self.init.invalidate_caches() |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
314 path = os.path.join(cwd, name + '.py') |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
315 cached = self.util.cache_from_source(path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
316 expected = {'__name__': name, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
317 '__package__': '', |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
318 '__file__': path, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
319 '__cached__': cached, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
320 '__doc__': None, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
321 '__builtins__': __builtins__, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
322 } |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
323 support.create_empty_file(path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
324 module = self.init.import_module(name) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
325 ns = vars(module) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
326 loader = ns.pop('__loader__') |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
327 spec = ns.pop('__spec__') |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
328 self.assertEqual(spec.name, name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
329 self.assertEqual(spec.loader, loader) |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
330 self.assertEqual(loader.path, path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
331 self.assertEqual(ns, expected) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
332 |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
333 # Change to a package. |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
334 self.init.invalidate_caches() |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
335 init_path = os.path.join(cwd, name, '__init__.py') |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
336 cached = self.util.cache_from_source(init_path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
337 expected = {'__name__': name, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
338 '__package__': name, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
339 '__file__': init_path, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
340 '__cached__': cached, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
341 '__path__': [os.path.dirname(init_path)], |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
342 '__doc__': None, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
343 '__builtins__': __builtins__, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
344 } |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
345 os.mkdir(name) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
346 os.rename(path, init_path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
347 reloaded = self.init.reload(module) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
348 ns = vars(reloaded) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
349 loader = ns.pop('__loader__') |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
350 spec = ns.pop('__spec__') |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
351 self.assertEqual(spec.name, name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
352 self.assertEqual(spec.loader, loader) |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
353 self.assertIs(reloaded, module) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
354 self.assertEqual(loader.path, init_path) |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
355 self.maxDiff = None |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
356 self.assertEqual(ns, expected) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
357 |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
358 def test_reload_namespace_changed(self): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
359 name = 'spam' |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
360 with support.temp_cwd(None) as cwd: |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
361 with util.uncache('spam'): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
362 with support.DirsOnSysPath(cwd): |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
363 # Start as a namespace package. |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
364 self.init.invalidate_caches() |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
365 bad_path = os.path.join(cwd, name, '__init.py') |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
366 cached = self.util.cache_from_source(bad_path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
367 expected = {'__name__': name, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
368 '__package__': name, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
369 '__doc__': None, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
370 } |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
371 os.mkdir(name) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
372 with open(bad_path, 'w') as init_file: |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
373 init_file.write('eggs = None') |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
374 module = self.init.import_module(name) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
375 ns = vars(module) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
376 loader = ns.pop('__loader__') |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
377 path = ns.pop('__path__') |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
378 spec = ns.pop('__spec__') |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
379 self.assertEqual(spec.name, name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
380 self.assertIs(spec.loader, None) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
381 self.assertIsNot(loader, None) |
|
86820
78d36d54391c
Issue #19413: Disregard duplicate namespace portions during reload tests.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86819
diff
changeset
|
382 self.assertEqual(set(path), |
|
78d36d54391c
Issue #19413: Disregard duplicate namespace portions during reload tests.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86819
diff
changeset
|
383 set([os.path.dirname(bad_path)])) |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
384 with self.assertRaises(AttributeError): |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
385 # a NamespaceLoader |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
386 loader.path |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
387 self.assertEqual(ns, expected) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
388 |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
389 # Change to a regular package. |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
390 self.init.invalidate_caches() |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
391 init_path = os.path.join(cwd, name, '__init__.py') |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
392 cached = self.util.cache_from_source(init_path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
393 expected = {'__name__': name, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
394 '__package__': name, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
395 '__file__': init_path, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
396 '__cached__': cached, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
397 '__path__': [os.path.dirname(init_path)], |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
398 '__doc__': None, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
399 '__builtins__': __builtins__, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
400 'eggs': None, |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
401 } |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
402 os.rename(bad_path, init_path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
403 reloaded = self.init.reload(module) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
404 ns = vars(reloaded) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
405 loader = ns.pop('__loader__') |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
406 spec = ns.pop('__spec__') |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
407 self.assertEqual(spec.name, name) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
408 self.assertEqual(spec.loader, loader) |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
409 self.assertIs(reloaded, module) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
410 self.assertEqual(loader.path, init_path) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
411 self.assertEqual(ns, expected) |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
412 |
|
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
413 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
414 class Frozen_ReloadTests(ReloadTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
415 init = frozen_init |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
416 util = frozen_util |
|
84123
01da7bf11ca1
Issue #18193: Add importlib.reload(), documenting (but not
Brett Cannon <brett@python.org>
parents:
83607
diff
changeset
|
417 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
418 class Source_ReloadTests(ReloadTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
419 init = source_init |
|
86819
88c3a1a3c2ff
Issue #19413: Restore pre-3.3 reload() semantics of re-finding modules.
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86433
diff
changeset
|
420 util = source_util |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
421 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
422 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
423 class InvalidateCacheTests: |
|
75324
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
424 |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
425 def test_method_called(self): |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
426 # If defined the method should be called. |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
427 class InvalidatingNullFinder: |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
428 def __init__(self, *ignored): |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
429 self.called = False |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
430 def find_module(self, *args): |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
431 return None |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
432 def invalidate_caches(self): |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
433 self.called = True |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
434 |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
435 key = 'gobledeegook' |
|
78485
0a75ce232f56
Issue #15502: Finish bringing importlib.abc in line with the current
Brett Cannon <brett@python.org>
parents:
78201
diff
changeset
|
436 meta_ins = InvalidatingNullFinder() |
|
0a75ce232f56
Issue #15502: Finish bringing importlib.abc in line with the current
Brett Cannon <brett@python.org>
parents:
78201
diff
changeset
|
437 path_ins = InvalidatingNullFinder() |
|
0a75ce232f56
Issue #15502: Finish bringing importlib.abc in line with the current
Brett Cannon <brett@python.org>
parents:
78201
diff
changeset
|
438 sys.meta_path.insert(0, meta_ins) |
|
75324
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
439 self.addCleanup(lambda: sys.path_importer_cache.__delitem__(key)) |
|
78485
0a75ce232f56
Issue #15502: Finish bringing importlib.abc in line with the current
Brett Cannon <brett@python.org>
parents:
78201
diff
changeset
|
440 sys.path_importer_cache[key] = path_ins |
|
0a75ce232f56
Issue #15502: Finish bringing importlib.abc in line with the current
Brett Cannon <brett@python.org>
parents:
78201
diff
changeset
|
441 self.addCleanup(lambda: sys.meta_path.remove(meta_ins)) |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
442 self.init.invalidate_caches() |
|
78485
0a75ce232f56
Issue #15502: Finish bringing importlib.abc in line with the current
Brett Cannon <brett@python.org>
parents:
78201
diff
changeset
|
443 self.assertTrue(meta_ins.called) |
|
0a75ce232f56
Issue #15502: Finish bringing importlib.abc in line with the current
Brett Cannon <brett@python.org>
parents:
78201
diff
changeset
|
444 self.assertTrue(path_ins.called) |
|
75324
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
445 |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
446 def test_method_lacking(self): |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
447 # There should be no issues if the method is not defined. |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
448 key = 'gobbledeegook' |
|
84159
5e8b377942f7
Issue #17177: stop using imp in test_importlib
Brett Cannon <brett@python.org>
parents:
84123
diff
changeset
|
449 sys.path_importer_cache[key] = None |
|
75324
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
450 self.addCleanup(lambda: sys.path_importer_cache.__delitem__(key)) |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
451 self.init.invalidate_caches() # Shouldn't trigger an exception. |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
452 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
453 class Frozen_InvalidateCacheTests(InvalidateCacheTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
454 init = frozen_init |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
455 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
456 class Source_InvalidateCacheTests(InvalidateCacheTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
457 init = source_init |
|
75324
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
458 |
|
de125ee32897
Update importlib.invalidate_caches() to be more general.
Brett Cannon <brett@python.org>
parents:
73973
diff
changeset
|
459 |
|
77916
818db871d29a
Issue #15210: If _frozen_importlib is not found in sys.modules by
Brett Cannon <brett@python.org>
parents:
76891
diff
changeset
|
460 class FrozenImportlibTests(unittest.TestCase): |
|
818db871d29a
Issue #15210: If _frozen_importlib is not found in sys.modules by
Brett Cannon <brett@python.org>
parents:
76891
diff
changeset
|
461 |
|
818db871d29a
Issue #15210: If _frozen_importlib is not found in sys.modules by
Brett Cannon <brett@python.org>
parents:
76891
diff
changeset
|
462 def test_no_frozen_importlib(self): |
|
818db871d29a
Issue #15210: If _frozen_importlib is not found in sys.modules by
Brett Cannon <brett@python.org>
parents:
76891
diff
changeset
|
463 # Should be able to import w/o _frozen_importlib being defined. |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
464 # Can't do an isinstance() check since separate copies of importlib |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
465 # may have been used for import, so just check the name is not for the |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
466 # frozen loader. |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
467 self.assertNotEqual(source_init.__loader__.__class__.__name__, |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
468 'FrozenImporter') |
|
77916
818db871d29a
Issue #15210: If _frozen_importlib is not found in sys.modules by
Brett Cannon <brett@python.org>
parents:
76891
diff
changeset
|
469 |
|
818db871d29a
Issue #15210: If _frozen_importlib is not found in sys.modules by
Brett Cannon <brett@python.org>
parents:
76891
diff
changeset
|
470 |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
471 class StartupTests: |
|
81882
4a4688b865ff
Add a test for fix of issue #17098
Brett Cannon <brett@python.org>
parents:
78485
diff
changeset
|
472 |
|
4a4688b865ff
Add a test for fix of issue #17098
Brett Cannon <brett@python.org>
parents:
78485
diff
changeset
|
473 def test_everyone_has___loader__(self): |
|
4a4688b865ff
Add a test for fix of issue #17098
Brett Cannon <brett@python.org>
parents:
78485
diff
changeset
|
474 # Issue #17098: all modules should have __loader__ defined. |
|
4a4688b865ff
Add a test for fix of issue #17098
Brett Cannon <brett@python.org>
parents:
78485
diff
changeset
|
475 for name, module in sys.modules.items(): |
|
4a4688b865ff
Add a test for fix of issue #17098
Brett Cannon <brett@python.org>
parents:
78485
diff
changeset
|
476 if isinstance(module, types.ModuleType): |
|
87347
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
477 with self.subTest(name=name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
478 self.assertTrue(hasattr(module, '__loader__'), |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
479 '{!r} lacks a __loader__ attribute'.format(name)) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
480 if self.machinery.BuiltinImporter.find_module(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
481 self.assertIsNot(module.__loader__, None) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
482 elif self.machinery.FrozenImporter.find_module(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
483 self.assertIsNot(module.__loader__, None) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
484 |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
485 def test_everyone_has___spec__(self): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
486 for name, module in sys.modules.items(): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
487 if isinstance(module, types.ModuleType): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
488 with self.subTest(name=name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
489 self.assertTrue(hasattr(module, '__spec__')) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
490 if self.machinery.BuiltinImporter.find_module(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
491 self.assertIsNot(module.__spec__, None) |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
492 elif self.machinery.FrozenImporter.find_module(name): |
|
07229c6104b1
Implement PEP 451 (ModuleSpec).
Eric Snow <ericsnowcurrently@gmail.com>
parents:
86820
diff
changeset
|
493 self.assertIsNot(module.__spec__, None) |
|
86433
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
494 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
495 class Frozen_StartupTests(StartupTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
496 machinery = frozen_machinery |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
497 |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
498 class Source_StartupTests(StartupTests, unittest.TestCase): |
|
9d96a3163dbf
Issue #16803: test.test_importlib.test_api now runs under frozen and
Brett Cannon <brett@python.org>
parents:
85175
diff
changeset
|
499 machinery = source_machinery |
|
50845
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
500 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
501 |
|
aac51b70c74c
Add initial implementation of importlib. See the NOTES files for what is
Brett Cannon <bcannon@gmail.com>
parents:
diff
changeset
|
502 if __name__ == '__main__': |
| 81883 | 503 unittest.main() |
