Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 40b22d0

Browse files
committed
Issue #16803: test.test_importlib.test_api now runs under frozen and
source.
1 parent 87efae2 commit 40b22d0

1 file changed

Lines changed: 69 additions & 37 deletions

File tree

Lib/test/test_importlib/test_api.py

Lines changed: 69 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
from . import util
22

3-
import importlib
4-
from importlib import _bootstrap
5-
from importlib import machinery
3+
frozen_init, source_init = util.import_importlib('importlib')
4+
frozen_machinery, source_machinery = util.import_importlib('importlib.machinery')
5+
66
import sys
77
from test import support
88
import types
99
import unittest
1010

1111

12-
class ImportModuleTests(unittest.TestCase):
12+
class ImportModuleTests:
1313

1414
"""Test importlib.import_module."""
1515

1616
def test_module_import(self):
1717
# Test importing a top-level module.
1818
with util.mock_modules('top_level') as mock:
1919
with util.import_state(meta_path=[mock]):
20-
module = importlib.import_module('top_level')
20+
module = self.init.import_module('top_level')
2121
self.assertEqual(module.__name__, 'top_level')
2222

2323
def test_absolute_package_import(self):
@@ -27,7 +27,7 @@ def test_absolute_package_import(self):
2727
name = '{0}.mod'.format(pkg_name)
2828
with util.mock_modules(pkg_long_name, name) as mock:
2929
with util.import_state(meta_path=[mock]):
30-
module = importlib.import_module(name)
30+
module = self.init.import_module(name)
3131
self.assertEqual(module.__name__, name)
3232

3333
def test_shallow_relative_package_import(self):
@@ -39,17 +39,17 @@ def test_shallow_relative_package_import(self):
3939
relative_name = '.{0}'.format(module_name)
4040
with util.mock_modules(pkg_long_name, absolute_name) as mock:
4141
with util.import_state(meta_path=[mock]):
42-
importlib.import_module(pkg_name)
43-
module = importlib.import_module(relative_name, pkg_name)
42+
self.init.import_module(pkg_name)
43+
module = self.init.import_module(relative_name, pkg_name)
4444
self.assertEqual(module.__name__, absolute_name)
4545

4646
def test_deep_relative_package_import(self):
4747
modules = ['a.__init__', 'a.b.__init__', 'a.c']
4848
with util.mock_modules(*modules) as mock:
4949
with util.import_state(meta_path=[mock]):
50-
importlib.import_module('a')
51-
importlib.import_module('a.b')
52-
module = importlib.import_module('..c', 'a.b')
50+
self.init.import_module('a')
51+
self.init.import_module('a.b')
52+
module = self.init.import_module('..c', 'a.b')
5353
self.assertEqual(module.__name__, 'a.c')
5454

5555
def test_absolute_import_with_package(self):
@@ -60,15 +60,15 @@ def test_absolute_import_with_package(self):
6060
name = '{0}.mod'.format(pkg_name)
6161
with util.mock_modules(pkg_long_name, name) as mock:
6262
with util.import_state(meta_path=[mock]):
63-
importlib.import_module(pkg_name)
64-
module = importlib.import_module(name, pkg_name)
63+
self.init.import_module(pkg_name)
64+
module = self.init.import_module(name, pkg_name)
6565
self.assertEqual(module.__name__, name)
6666

6767
def test_relative_import_wo_package(self):
6868
# Relative imports cannot happen without the 'package' argument being
6969
# set.
7070
with self.assertRaises(TypeError):
71-
importlib.import_module('.support')
71+
self.init.import_module('.support')
7272

7373

7474
def test_loaded_once(self):
@@ -77,19 +77,25 @@ def test_loaded_once(self):
7777
# module currently being imported.
7878
b_load_count = 0
7979
def load_a():
80-
importlib.import_module('a.b')
80+
self.init.import_module('a.b')
8181
def load_b():
8282
nonlocal b_load_count
8383
b_load_count += 1
8484
code = {'a': load_a, 'a.b': load_b}
8585
modules = ['a.__init__', 'a.b']
8686
with util.mock_modules(*modules, module_code=code) as mock:
8787
with util.import_state(meta_path=[mock]):
88-
importlib.import_module('a.b')
88+
self.init.import_module('a.b')
8989
self.assertEqual(b_load_count, 1)
9090

91+
class Frozen_ImportModuleTests(ImportModuleTests, unittest.TestCase):
92+
init = frozen_init
93+
94+
class Source_ImportModuleTests(ImportModuleTests, unittest.TestCase):
95+
init = source_init
96+
9197

92-
class FindLoaderTests(unittest.TestCase):
98+
class FindLoaderTests:
9399

94100
class FakeMetaFinder:
95101
@staticmethod
@@ -103,7 +109,7 @@ def test_sys_modules(self):
103109
loader = 'a loader!'
104110
module.__loader__ = loader
105111
sys.modules[name] = module
106-
found = importlib.find_loader(name)
112+
found = self.init.find_loader(name)
107113
self.assertEqual(loader, found)
108114

109115
def test_sys_modules_loader_is_None(self):
@@ -114,7 +120,7 @@ def test_sys_modules_loader_is_None(self):
114120
module.__loader__ = None
115121
sys.modules[name] = module
116122
with self.assertRaises(ValueError):
117-
importlib.find_loader(name)
123+
self.init.find_loader(name)
118124

119125
def test_sys_modules_loader_is_not_set(self):
120126
# Should raise ValueError
@@ -128,14 +134,14 @@ def test_sys_modules_loader_is_not_set(self):
128134
pass
129135
sys.modules[name] = module
130136
with self.assertRaises(ValueError):
131-
importlib.find_loader(name)
137+
self.init.find_loader(name)
132138

133139
def test_success(self):
134140
# Return the loader found on sys.meta_path.
135141
name = 'some_mod'
136142
with util.uncache(name):
137143
with util.import_state(meta_path=[self.FakeMetaFinder]):
138-
self.assertEqual((name, None), importlib.find_loader(name))
144+
self.assertEqual((name, None), self.init.find_loader(name))
139145

140146
def test_success_path(self):
141147
# Searching on a path should work.
@@ -144,23 +150,29 @@ def test_success_path(self):
144150
with util.uncache(name):
145151
with util.import_state(meta_path=[self.FakeMetaFinder]):
146152
self.assertEqual((name, path),
147-
importlib.find_loader(name, path))
153+
self.init.find_loader(name, path))
148154

149155
def test_nothing(self):
150156
# None is returned upon failure to find a loader.
151-
self.assertIsNone(importlib.find_loader('nevergoingtofindthismodule'))
157+
self.assertIsNone(self.init.find_loader('nevergoingtofindthismodule'))
152158

159+
class Frozen_FindLoaderTests(FindLoaderTests, unittest.TestCase):
160+
init = frozen_init
153161

154-
class ReloadTests(unittest.TestCase):
162+
class Source_FindLoaderTests(FindLoaderTests, unittest.TestCase):
163+
init = source_init
164+
165+
166+
class ReloadTests:
155167

156168
"""Test module reloading for builtin and extension modules."""
157169

158170
def test_reload_modules(self):
159171
for mod in ('tokenize', 'time', 'marshal'):
160172
with self.subTest(module=mod):
161173
with support.CleanImport(mod):
162-
module = importlib.import_module(mod)
163-
importlib.reload(module)
174+
module = self.init.import_module(mod)
175+
self.init.reload(module)
164176

165177
def test_module_replaced(self):
166178
def code():
@@ -172,14 +184,20 @@ def code():
172184
module_code={'top_level': code})
173185
with mock:
174186
with util.import_state(meta_path=[mock]):
175-
module = importlib.import_module('top_level')
176-
reloaded = importlib.reload(module)
187+
module = self.init.import_module('top_level')
188+
reloaded = self.init.reload(module)
177189
actual = sys.modules['top_level']
178190
self.assertEqual(actual.spam, 3)
179191
self.assertEqual(reloaded.spam, 3)
180192

193+
class Frozen_ReloadTests(ReloadTests, unittest.TestCase):
194+
init = frozen_init
195+
196+
class Source_ReloadTests(ReloadTests, unittest.TestCase):
197+
init = source_init
181198

182-
class InvalidateCacheTests(unittest.TestCase):
199+
200+
class InvalidateCacheTests:
183201

184202
def test_method_called(self):
185203
# If defined the method should be called.
@@ -198,7 +216,7 @@ def invalidate_caches(self):
198216
self.addCleanup(lambda: sys.path_importer_cache.__delitem__(key))
199217
sys.path_importer_cache[key] = path_ins
200218
self.addCleanup(lambda: sys.meta_path.remove(meta_ins))
201-
importlib.invalidate_caches()
219+
self.init.invalidate_caches()
202220
self.assertTrue(meta_ins.called)
203221
self.assertTrue(path_ins.called)
204222

@@ -207,31 +225,45 @@ def test_method_lacking(self):
207225
key = 'gobbledeegook'
208226
sys.path_importer_cache[key] = None
209227
self.addCleanup(lambda: sys.path_importer_cache.__delitem__(key))
210-
importlib.invalidate_caches() # Shouldn't trigger an exception.
228+
self.init.invalidate_caches() # Shouldn't trigger an exception.
229+
230+
class Frozen_InvalidateCacheTests(InvalidateCacheTests, unittest.TestCase):
231+
init = frozen_init
232+
233+
class Source_InvalidateCacheTests(InvalidateCacheTests, unittest.TestCase):
234+
init = source_init
211235

212236

213237
class FrozenImportlibTests(unittest.TestCase):
214238

215239
def test_no_frozen_importlib(self):
216240
# Should be able to import w/o _frozen_importlib being defined.
217-
module = support.import_fresh_module('importlib', blocked=['_frozen_importlib'])
218-
self.assertFalse(isinstance(module.__loader__,
219-
machinery.FrozenImporter))
241+
# Can't do an isinstance() check since separate copies of importlib
242+
# may have been used for import, so just check the name is not for the
243+
# frozen loader.
244+
self.assertNotEqual(source_init.__loader__.__class__.__name__,
245+
'FrozenImporter')
220246

221247

222-
class StartupTests(unittest.TestCase):
248+
class StartupTests:
223249

224250
def test_everyone_has___loader__(self):
225251
# Issue #17098: all modules should have __loader__ defined.
226252
for name, module in sys.modules.items():
227253
if isinstance(module, types.ModuleType):
228254
self.assertTrue(hasattr(module, '__loader__'),
229255
'{!r} lacks a __loader__ attribute'.format(name))
230-
if importlib.machinery.BuiltinImporter.find_module(name):
256+
if self.machinery.BuiltinImporter.find_module(name):
231257
self.assertIsNot(module.__loader__, None)
232-
elif importlib.machinery.FrozenImporter.find_module(name):
258+
elif self.machinery.FrozenImporter.find_module(name):
233259
self.assertIsNot(module.__loader__, None)
234260

261+
class Frozen_StartupTests(StartupTests, unittest.TestCase):
262+
machinery = frozen_machinery
263+
264+
class Source_StartupTests(StartupTests, unittest.TestCase):
265+
machinery = source_machinery
266+
235267

236268
if __name__ == '__main__':
237269
unittest.main()

0 commit comments

Comments
 (0)