aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_importlib/builtin/test_loader.py
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2012-07-20 14:48:53 -0400
committerBrett Cannon <brett@python.org>2012-07-20 14:48:53 -0400
commit45a5e3afe52ed89f298242143c5f7e2bb992ac63 (patch)
tree2255a23f991f1452335d865939f6c30d7b2d7d48 /Lib/test/test_importlib/builtin/test_loader.py
parent4afc1c08d04a9c083b654178ea4f947563510836 (diff)
downloadcpython-45a5e3afe52ed89f298242143c5f7e2bb992ac63.tar.gz
cpython-45a5e3afe52ed89f298242143c5f7e2bb992ac63.zip
Issue #15168: Move importlb.test to test.test_importlib.
This should make the Linux distros happy as it is now easier to leave importlib's tests out of their base Python distribution.
Diffstat (limited to 'Lib/test/test_importlib/builtin/test_loader.py')
-rw-r--r--Lib/test/test_importlib/builtin/test_loader.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/Lib/test/test_importlib/builtin/test_loader.py b/Lib/test/test_importlib/builtin/test_loader.py
new file mode 100644
index 00000000000..8e186e71560
--- /dev/null
+++ b/Lib/test/test_importlib/builtin/test_loader.py
@@ -0,0 +1,105 @@
+import importlib
+from importlib import machinery
+from .. import abc
+from .. import util
+from . import util as builtin_util
+
+import sys
+import types
+import unittest
+
+
+class LoaderTests(abc.LoaderTests):
+
+ """Test load_module() for built-in modules."""
+
+ verification = {'__name__': 'errno', '__package__': '',
+ '__loader__': machinery.BuiltinImporter}
+
+ def verify(self, module):
+ """Verify that the module matches against what it should have."""
+ self.assertIsInstance(module, types.ModuleType)
+ for attr, value in self.verification.items():
+ self.assertEqual(getattr(module, attr), value)
+ self.assertIn(module.__name__, sys.modules)
+
+ load_module = staticmethod(lambda name:
+ machinery.BuiltinImporter.load_module(name))
+
+ def test_module(self):
+ # Common case.
+ with util.uncache(builtin_util.NAME):
+ module = self.load_module(builtin_util.NAME)
+ self.verify(module)
+
+ def test_package(self):
+ # Built-in modules cannot be a package.
+ pass
+
+ def test_lacking_parent(self):
+ # Built-in modules cannot be a package.
+ pass
+
+ def test_state_after_failure(self):
+ # Not way to force an imoprt failure.
+ pass
+
+ def test_module_reuse(self):
+ # Test that the same module is used in a reload.
+ with util.uncache(builtin_util.NAME):
+ module1 = self.load_module(builtin_util.NAME)
+ module2 = self.load_module(builtin_util.NAME)
+ self.assertIs(module1, module2)
+
+ def test_unloadable(self):
+ name = 'dssdsdfff'
+ assert name not in sys.builtin_module_names
+ with self.assertRaises(ImportError) as cm:
+ self.load_module(name)
+ self.assertEqual(cm.exception.name, name)
+
+ def test_already_imported(self):
+ # Using the name of a module already imported but not a built-in should
+ # still fail.
+ assert hasattr(importlib, '__file__') # Not a built-in.
+ with self.assertRaises(ImportError) as cm:
+ self.load_module('importlib')
+ self.assertEqual(cm.exception.name, 'importlib')
+
+
+class InspectLoaderTests(unittest.TestCase):
+
+ """Tests for InspectLoader methods for BuiltinImporter."""
+
+ def test_get_code(self):
+ # There is no code object.
+ result = machinery.BuiltinImporter.get_code(builtin_util.NAME)
+ self.assertIsNone(result)
+
+ def test_get_source(self):
+ # There is no source.
+ result = machinery.BuiltinImporter.get_source(builtin_util.NAME)
+ self.assertIsNone(result)
+
+ def test_is_package(self):
+ # Cannot be a package.
+ result = machinery.BuiltinImporter.is_package(builtin_util.NAME)
+ self.assertTrue(not result)
+
+ def test_not_builtin(self):
+ # Modules not built-in should raise ImportError.
+ for meth_name in ('get_code', 'get_source', 'is_package'):
+ method = getattr(machinery.BuiltinImporter, meth_name)
+ with self.assertRaises(ImportError) as cm:
+ method(builtin_util.BAD_NAME)
+ self.assertRaises(builtin_util.BAD_NAME)
+
+
+
+def test_main():
+ from test.support import run_unittest
+ run_unittest(LoaderTests, InspectLoaderTests)
+
+
+if __name__ == '__main__':
+ test_main()