diff options
Diffstat (limited to 'Lib/importlib/test')
-rw-r--r-- | Lib/importlib/test/import_/test___package__.py | 7 | ||||
-rw-r--r-- | Lib/importlib/test/import_/test_caching.py | 3 | ||||
-rw-r--r-- | Lib/importlib/test/import_/test_path.py | 142 | ||||
-rw-r--r-- | Lib/importlib/test/import_/util.py | 5 | ||||
-rw-r--r-- | Lib/importlib/test/test_api.py | 8 |
5 files changed, 15 insertions, 150 deletions
diff --git a/Lib/importlib/test/import_/test___package__.py b/Lib/importlib/test/import_/test___package__.py index e91dfc1..2aa0814 100644 --- a/Lib/importlib/test/import_/test___package__.py +++ b/Lib/importlib/test/import_/test___package__.py @@ -38,8 +38,9 @@ class Using__package__(unittest.TestCase): with util.mock_modules('pkg.__init__', 'pkg.fake') as importer: with util.import_state(meta_path=[importer]): import_util.import_('pkg.fake') - module = import_util.import_('', globals={'__package__': 'pkg.fake'}, - fromlist=['attr'], level=2) + module = import_util.import_('', + globals={'__package__': 'pkg.fake'}, + fromlist=['attr'], level=2) self.assertEquals(module.__name__, 'pkg') def test_using___name__(self): @@ -82,7 +83,7 @@ class Setting__package__(unittest.TestCase): with util.import_state(meta_path=[mock]): del mock['top_level'].__package__ module = import_util.import_('top_level') - self.assert_(module.__package__ is None) + self.assertEqual(module.__package__, '') # [package] def test_package(self): diff --git a/Lib/importlib/test/import_/test_caching.py b/Lib/importlib/test/import_/test_caching.py index 3a895dc..e37c69a 100644 --- a/Lib/importlib/test/import_/test_caching.py +++ b/Lib/importlib/test/import_/test_caching.py @@ -64,7 +64,8 @@ class UseCache(unittest.TestCase): with util.import_state(meta_path=[importer]): module = import_util.import_('pkg', fromlist=['module']) self.assert_(hasattr(module, 'module')) - self.assertEquals(id(module.module), id(sys.modules['pkg.module'])) + self.assertEquals(id(module.module), + id(sys.modules['pkg.module'])) def test_main(): diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py index b4ae779..249b95b 100644 --- a/Lib/importlib/test/import_/test_path.py +++ b/Lib/importlib/test/import_/test_path.py @@ -10,148 +10,6 @@ from types import MethodType import unittest -class BaseTests(unittest.TestCase): - - """When sys.meta_path cannot find the desired module, sys.path is - consulted. For each entry on the sequence [order], sys.path_importer_cache - is checked to see if it contains a key for the entry [cache check]. If an - importer is found then it is consulted before trying the next entry in - sys.path [cache use]. The 'path' argument to find_module() is never used - when trying to find a module [path not used]. - - If an entry from sys.path is not in sys.path_importer_cache, sys.path_hooks - is called in turn [hooks order]. If a path hook cannot handle an entry, - ImportError is raised [hook failure]. Otherwise the resulting object is - cached in sys.path_importer_cache and then consulted [hook success]. If no - hook is found, None is set in sys.path_importer_cache and the default - importer is tried [no hook]. - - For use of __path__ in a package, the above is all true, just substitute - "sys.path" for "__path__". - - """ - - def order_test(self, to_import, entry, search_path, path=[]): - # [order] - log = [] - class LogFindModule(util.mock_modules): - def find_module(self, fullname): - log.append(self) - return super().find_module(fullname) - - assert len(search_path) == 2 - misser = LogFindModule(search_path[0]) - hitter = LogFindModule(to_import) - with nested(misser, hitter): - cache = dict(zip(search_path, (misser, hitter))) - with util.import_state(path=path, path_importer_cache=cache): - import_util.import_(to_import) - self.assertEquals(log[0], misser) - self.assertEquals(log[1], hitter) - - @import_util.importlib_only # __import__ uses PyDict_GetItem(), bypassing log. - def cache_use_test(self, to_import, entry, path=[]): - # [cache check], [cache use] - log = [] - class LoggingDict(dict): - def __getitem__(self, item): - log.append(item) - return super(LoggingDict, self).__getitem__(item) - - with util.mock_modules(to_import) as importer: - cache = LoggingDict() - cache[entry] = importer - with util.import_state(path=[entry], path_importer_cache=cache): - module = import_util.import_(to_import, fromlist=['a']) - self.assert_(module is importer[to_import]) - self.assertEquals(len(cache), 1) - self.assertEquals([entry], log) - - def hooks_order_test(self, to_import, entry, path=[]): - # [hooks order], [hooks failure], [hook success] - log = [] - def logging_hook(entry): - log.append(entry) - raise ImportError - with util.mock_modules(to_import) as importer: - hitter = import_util.mock_path_hook(entry, importer=importer) - path_hooks = [logging_hook, logging_hook, hitter] - with util.import_state(path_hooks=path_hooks, path=path): - import_util.import_(to_import) - self.assertEquals(sys.path_importer_cache[entry], importer) - self.assertEquals(len(log), 2) - - # [no hook] XXX Worry about after deciding how to handle the default hook. - - def path_argument_test(self, to_import): - # [path not used] - class BadImporter: - """Class to help detect TypeError from calling find_module() with - an improper number of arguments.""" - def find_module(name): - raise ImportError - - try: - import_util.import_(to_import) - except ImportError: - pass - - -class PathTests(BaseTests): - - """Tests for sys.path.""" - - def test_order(self): - self.order_test('hit', 'second', ['first', 'second'], - ['first', 'second']) - - def test_cache_use(self): - entry = "found!" - self.cache_use_test('hit', entry, [entry]) - - def test_hooks_order(self): - entry = "found!" - self.hooks_order_test('hit', entry, [entry]) - - def test_path_argument(self): - name = 'total junk' - with util.uncache(name): - self.path_argument_test(name) - - -class __path__Tests(BaseTests): - - """Tests for __path__.""" - - def run_test(self, test, entry, path, *args): - with util.mock_modules('pkg.__init__') as importer: - importer['pkg'].__path__ = path - importer.load_module('pkg') - test('pkg.hit', entry, *args) - - - @import_util.importlib_only # XXX Unknown reason why this fails. - def test_order(self): - self.run_test(self.order_test, 'second', ('first', 'second'), ['first', - 'second']) - - def test_cache_use(self): - location = "I'm here!" - self.run_test(self.cache_use_test, location, [location]) - - def test_hooks_order(self): - location = "I'm here!" - self.run_test(self.hooks_order_test, location, [location]) - - def test_path_argument(self): - module = imp.new_module('pkg') - module.__path__ = ['random __path__'] - name = 'pkg.whatever' - sys.modules['pkg'] = module - with util.uncache('pkg', name): - self.path_argument_test(name) - - class FinderTests(unittest.TestCase): """Tests for SysPathImporter.""" diff --git a/Lib/importlib/test/import_/util.py b/Lib/importlib/test/import_/util.py index 3481b99..6ab0651 100644 --- a/Lib/importlib/test/import_/util.py +++ b/Lib/importlib/test/import_/util.py @@ -1,5 +1,5 @@ import functools -import importlib +import importlib._bootstrap using___import__ = False @@ -9,7 +9,8 @@ def import_(*args, **kwargs): """Delegate to allow for injecting different implementations of import.""" if using___import__: return __import__(*args, **kwargs) - return importlib.Import()(*args, **kwargs) + #return importlib.Import()(*args, **kwargs) + return importlib._bootstrap._import(*args, **kwargs) def importlib_only(fxn): diff --git a/Lib/importlib/test/test_api.py b/Lib/importlib/test/test_api.py index 2958adb..8847dc9 100644 --- a/Lib/importlib/test/test_api.py +++ b/Lib/importlib/test/test_api.py @@ -1,6 +1,8 @@ -import unittest -import importlib from . import util +import imp +import importlib +import sys +import unittest class ImportModuleTests(unittest.TestCase): @@ -33,6 +35,7 @@ class ImportModuleTests(unittest.TestCase): relative_name = '.{0}'.format(module_name) with util.mock_modules(pkg_long_name, absolute_name) as mock: with util.import_state(meta_path=[mock]): + importlib.import_module(pkg_name) module = importlib.import_module(relative_name, pkg_name) self.assertEqual(module.__name__, absolute_name) @@ -44,6 +47,7 @@ class ImportModuleTests(unittest.TestCase): name = '{0}.mod'.format(pkg_name) with util.mock_modules(pkg_long_name, name) as mock: with util.import_state(meta_path=[mock]): + importlib.import_module(pkg_name) module = importlib.import_module(name, pkg_name) self.assertEqual(module.__name__, name) |