]> granicus.if.org Git - python/commitdiff
Issue #19712: Port test.test_importlib.import_ tests to use PEP 451
authorBrett Cannon <brett@python.org>
Fri, 29 Nov 2013 21:17:05 +0000 (16:17 -0500)
committerBrett Cannon <brett@python.org>
Fri, 29 Nov 2013 21:17:05 +0000 (16:17 -0500)
that don't require changing test.test_importlib.util.mock_modules().

Lib/test/test_importlib/import_/test___loader__.py
Lib/test/test_importlib/import_/test_api.py
Lib/test/test_importlib/import_/test_path.py

index 9c18d19709f0b09e7608fe792fb139781941cca5..6df80101fa504883b12dd60db7d7f89ce94cffec 100644 (file)
@@ -1,3 +1,4 @@
+from importlib import machinery
 import sys
 import types
 import unittest
@@ -6,6 +7,27 @@ from .. import util
 from . import util as import_util
 
 
+class SpecLoaderMock:
+
+    def find_spec(self, fullname, path=None, target=None):
+        return machinery.ModuleSpec(fullname, self)
+
+    def exec_module(self, module):
+        pass
+
+
+class SpecLoaderAttributeTests:
+
+    def test___loader__(self):
+        loader = SpecLoaderMock()
+        with util.uncache('blah'), util.import_state(meta_path=[loader]):
+            module = self.__import__('blah')
+        self.assertEqual(loader, module.__loader__)
+
+Frozen_SpecTests, Source_SpecTests = util.test_both(
+        SpecLoaderAttributeTests, __import__=import_util.__import__)
+
+
 class LoaderMock:
 
     def find_module(self, fullname, path=None):
index dc8b8a8f38bb4d346fcd6f5f26ed465aa843811b..439c105e9b49d95ef2d5c4359d088ad70defb109 100644 (file)
@@ -1,19 +1,37 @@
 from .. import util
 from . import util as import_util
+
+from importlib import machinery
 import sys
 import types
 import unittest
 
+PKG_NAME = 'fine'
+SUBMOD_NAME = 'fine.bogus'
+
+
+class BadSpecFinderLoader:
+    @classmethod
+    def find_spec(cls, fullname, path=None, target=None):
+        if fullname == SUBMOD_NAME:
+            spec = machinery.ModuleSpec(fullname, cls)
+            return spec
+
+    @staticmethod
+    def exec_module(module):
+        if module.__name__ == SUBMOD_NAME:
+            raise ImportError('I cannot be loaded!')
+
 
 class BadLoaderFinder:
-    bad = 'fine.bogus'
     @classmethod
     def find_module(cls, fullname, path):
-        if fullname == cls.bad:
+        if fullname == SUBMOD_NAME:
             return cls
+
     @classmethod
     def load_module(cls, fullname):
-        if fullname == cls.bad:
+        if fullname == SUBMOD_NAME:
             raise ImportError('I cannot be loaded!')
 
 
@@ -37,27 +55,39 @@ class APITest:
     def test_nonexistent_fromlist_entry(self):
         # If something in fromlist doesn't exist, that's okay.
         # issue15715
-        mod = types.ModuleType('fine')
+        mod = types.ModuleType(PKG_NAME)
         mod.__path__ = ['XXX']
-        with util.import_state(meta_path=[BadLoaderFinder]):
-            with util.uncache('fine'):
-                sys.modules['fine'] = mod
-                self.__import__('fine', fromlist=['not here'])
+        with util.import_state(meta_path=[self.bad_finder_loader]):
+            with util.uncache(PKG_NAME):
+                sys.modules[PKG_NAME] = mod
+                self.__import__(PKG_NAME, fromlist=['not here'])
 
     def test_fromlist_load_error_propagates(self):
         # If something in fromlist triggers an exception not related to not
         # existing, let that exception propagate.
         # issue15316
-        mod = types.ModuleType('fine')
+        mod = types.ModuleType(PKG_NAME)
         mod.__path__ = ['XXX']
-        with util.import_state(meta_path=[BadLoaderFinder]):
-            with util.uncache('fine'):
-                sys.modules['fine'] = mod
+        with util.import_state(meta_path=[self.bad_finder_loader]):
+            with util.uncache(PKG_NAME):
+                sys.modules[PKG_NAME] = mod
                 with self.assertRaises(ImportError):
-                    self.__import__('fine', fromlist=['bogus'])
+                    self.__import__(PKG_NAME,
+                                    fromlist=[SUBMOD_NAME.rpartition('.')[-1]])
+
+
+class OldAPITests(APITest):
+    bad_finder_loader = BadLoaderFinder
+
+Frozen_OldAPITests, Source_OldAPITests = util.test_both(
+        OldAPITests, __import__=import_util.__import__)
+
+
+class SpecAPITests(APITest):
+    bad_finder_loader = BadSpecFinderLoader
 
-Frozen_APITests, Source_APITests = util.test_both(
-        APITest, __import__=import_util.__import__)
+Frozen_SpecAPITests, Source_SpecAPITests = util.test_both(
+        SpecAPITests, __import__=import_util.__import__)
 
 
 if __name__ == '__main__':
index 14fdaa339e11f03daf00d931975ce34923750b94..2e5033eb9ef2681585ed4e79c801a4331330d1ab 100644 (file)
@@ -17,7 +17,7 @@ class FinderTests:
     """Tests for PathFinder."""
 
     def test_failure(self):
-        # Test None returned upon not finding a suitable finder.
+        # Test None returned upon not finding a suitable loader.
         module = '<test module>'
         with util.import_state():
             self.assertIsNone(self.machinery.PathFinder.find_module(module))