summaryrefslogtreecommitdiffstats
path: root/Lib/importlib/test/test_util.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/importlib/test/test_util.py')
-rw-r--r--Lib/importlib/test/test_util.py208
1 files changed, 0 insertions, 208 deletions
diff --git a/Lib/importlib/test/test_util.py b/Lib/importlib/test/test_util.py
deleted file mode 100644
index efc8977..0000000
--- a/Lib/importlib/test/test_util.py
+++ /dev/null
@@ -1,208 +0,0 @@
-from importlib import util
-from . import util as test_util
-import imp
-import sys
-import types
-import unittest
-
-
-class ModuleForLoaderTests(unittest.TestCase):
-
- """Tests for importlib.util.module_for_loader."""
-
- def return_module(self, name):
- fxn = util.module_for_loader(lambda self, module: module)
- return fxn(self, name)
-
- def raise_exception(self, name):
- def to_wrap(self, module):
- raise ImportError
- fxn = util.module_for_loader(to_wrap)
- try:
- fxn(self, name)
- except ImportError:
- pass
-
- def test_new_module(self):
- # Test that when no module exists in sys.modules a new module is
- # created.
- module_name = 'a.b.c'
- with test_util.uncache(module_name):
- module = self.return_module(module_name)
- self.assertIn(module_name, sys.modules)
- self.assertIsInstance(module, types.ModuleType)
- self.assertEqual(module.__name__, module_name)
-
- def test_reload(self):
- # Test that a module is reused if already in sys.modules.
- name = 'a.b.c'
- module = imp.new_module('a.b.c')
- with test_util.uncache(name):
- sys.modules[name] = module
- returned_module = self.return_module(name)
- self.assertIs(returned_module, sys.modules[name])
-
- def test_new_module_failure(self):
- # Test that a module is removed from sys.modules if added but an
- # exception is raised.
- name = 'a.b.c'
- with test_util.uncache(name):
- self.raise_exception(name)
- self.assertNotIn(name, sys.modules)
-
- def test_reload_failure(self):
- # Test that a failure on reload leaves the module in-place.
- name = 'a.b.c'
- module = imp.new_module(name)
- with test_util.uncache(name):
- sys.modules[name] = module
- self.raise_exception(name)
- self.assertIs(module, sys.modules[name])
-
- def test_decorator_attrs(self):
- def fxn(self, module): pass
- wrapped = util.module_for_loader(fxn)
- self.assertEqual(wrapped.__name__, fxn.__name__)
- self.assertEqual(wrapped.__qualname__, fxn.__qualname__)
-
- def test_false_module(self):
- # If for some odd reason a module is considered false, still return it
- # from sys.modules.
- class FalseModule(types.ModuleType):
- def __bool__(self): return False
-
- name = 'mod'
- module = FalseModule(name)
- with test_util.uncache(name):
- self.assertFalse(module)
- sys.modules[name] = module
- given = self.return_module(name)
- self.assertIs(given, module)
-
- def test_attributes_set(self):
- # __name__, __loader__, and __package__ should be set (when
- # is_package() is defined; undefined implicitly tested elsewhere).
- class FakeLoader:
- def __init__(self, is_package):
- self._pkg = is_package
- def is_package(self, name):
- return self._pkg
- @util.module_for_loader
- def load_module(self, module):
- return module
-
- name = 'pkg.mod'
- with test_util.uncache(name):
- loader = FakeLoader(False)
- module = loader.load_module(name)
- self.assertEqual(module.__name__, name)
- self.assertIs(module.__loader__, loader)
- self.assertEqual(module.__package__, 'pkg')
-
- name = 'pkg.sub'
- with test_util.uncache(name):
- loader = FakeLoader(True)
- module = loader.load_module(name)
- self.assertEqual(module.__name__, name)
- self.assertIs(module.__loader__, loader)
- self.assertEqual(module.__package__, name)
-
-
-class SetPackageTests(unittest.TestCase):
-
- """Tests for importlib.util.set_package."""
-
- def verify(self, module, expect):
- """Verify the module has the expected value for __package__ after
- passing through set_package."""
- fxn = lambda: module
- wrapped = util.set_package(fxn)
- wrapped()
- self.assertTrue(hasattr(module, '__package__'))
- self.assertEqual(expect, module.__package__)
-
- def test_top_level(self):
- # __package__ should be set to the empty string if a top-level module.
- # Implicitly tests when package is set to None.
- module = imp.new_module('module')
- module.__package__ = None
- self.verify(module, '')
-
- def test_package(self):
- # Test setting __package__ for a package.
- module = imp.new_module('pkg')
- module.__path__ = ['<path>']
- module.__package__ = None
- self.verify(module, 'pkg')
-
- def test_submodule(self):
- # Test __package__ for a module in a package.
- module = imp.new_module('pkg.mod')
- module.__package__ = None
- self.verify(module, 'pkg')
-
- def test_setting_if_missing(self):
- # __package__ should be set if it is missing.
- module = imp.new_module('mod')
- if hasattr(module, '__package__'):
- delattr(module, '__package__')
- self.verify(module, '')
-
- def test_leaving_alone(self):
- # If __package__ is set and not None then leave it alone.
- for value in (True, False):
- module = imp.new_module('mod')
- module.__package__ = value
- self.verify(module, value)
-
- def test_decorator_attrs(self):
- def fxn(module): pass
- wrapped = util.set_package(fxn)
- self.assertEqual(wrapped.__name__, fxn.__name__)
- self.assertEqual(wrapped.__qualname__, fxn.__qualname__)
-
-
-class ResolveNameTests(unittest.TestCase):
-
- """Tests importlib.util.resolve_name()."""
-
- def test_absolute(self):
- # bacon
- self.assertEqual('bacon', util.resolve_name('bacon', None))
-
- def test_aboslute_within_package(self):
- # bacon in spam
- self.assertEqual('bacon', util.resolve_name('bacon', 'spam'))
-
- def test_no_package(self):
- # .bacon in ''
- with self.assertRaises(ValueError):
- util.resolve_name('.bacon', '')
-
- def test_in_package(self):
- # .bacon in spam
- self.assertEqual('spam.eggs.bacon',
- util.resolve_name('.bacon', 'spam.eggs'))
-
- def test_other_package(self):
- # ..bacon in spam.bacon
- self.assertEqual('spam.bacon',
- util.resolve_name('..bacon', 'spam.eggs'))
-
- def test_escape(self):
- # ..bacon in spam
- with self.assertRaises(ValueError):
- util.resolve_name('..bacon', 'spam')
-
-
-def test_main():
- from test import support
- support.run_unittest(
- ModuleForLoaderTests,
- SetPackageTests,
- ResolveNameTests
- )
-
-
-if __name__ == '__main__':
- test_main()