[Python-checkins] r52189 - sandbox/trunk/import_in_py/test_importer.py

brett.cannon python-checkins at python.org
Thu Oct 5 21:28:51 CEST 2006


Author: brett.cannon
Date: Thu Oct  5 21:28:51 2006
New Revision: 52189

Modified:
   sandbox/trunk/import_in_py/test_importer.py
Log:
Refactor testing of built-in and frozen importers so a superclass can be used.
Still have to set up for the frozen importers, though.


Modified: sandbox/trunk/import_in_py/test_importer.py
==============================================================================
--- sandbox/trunk/import_in_py/test_importer.py	(original)
+++ sandbox/trunk/import_in_py/test_importer.py	Thu Oct  5 21:28:51 2006
@@ -3,62 +3,83 @@
 import importer
 import sys
 
-class BuiltinImporterTests(unittest.TestCase):
 
-    """Test the built-in module importer."""
+class BuiltinFrozen_Tester(unittest.TestCase):
+
+    """Common test cases for built-in and frozen modules.
+
+    Expected attributes:
+    * self.importer
+        The meta_path importer to test.
+    * self.module_name
+        Name of a module that the importer can import.
+    * self.bad_module_names
+        Sequence of module names that cannot be imported.
+
+    """
 
     def test_find_module_basic(self):
-        # Make sure only built-in modules are found.
-        for name in sys.builtin_module_names:
-            self.failUnless(importer.BuiltinImporter.find_module(name))
-        self.failUnless(not importer.BuiltinImporter.find_module('time'),
-                        'incorrectly found an extension module')
-        self.failUnless(not importer.BuiltinImporter.find_module('token'),
-                        'incorrectly found a Python module')
+        # Make sure expected modules can be found.
+        self.failUnless(self.importer.find_module(self.module_name))
+
+    def test_find_module_failures(self):
+        # Modules of the wrong type should not be found.
+        for module_name in self.bad_module_names:
+            self.failUnlessEqual(self.importer.find_module(module_name), None)
+
+    def test_find_module_arg_count(self):
         # Cover proper number of arguments.
-        self.failUnlessRaises(TypeError, importer.BuiltinImporter.find_module)
-        self.failUnlessRaises(TypeError, importer.BuiltinImporter.find_module,
-                                'sys', None, None)
+        self.failUnlessRaises(TypeError, self.importer.find_module)
+        self.failUnlessRaises(TypeError, self.importer.find_module,
+                                self.module_name, None, None)
 
     def test_find_module_path_shortcut(self):
         # Test short-circuiting of finding a module if 'path' argument is given
         # a value.
-        self.failUnless(not importer.BuiltinImporter.find_module('sys', ''))
+        self.failUnless(not self.importer.find_module(self.module_name, ''))
 
     def test_load_module_prev_import_check(self):
-        # If a module is already in 'sys' it should be returned without being
-        # re-initialized.
-        self.failUnlessEqual(importer.BuiltinImporter.load_module('sys'),
-                             sys.modules['sys'])
+        # If a module is already in sys.modules it should be returned without
+        # being re-initialized.
+        self.failUnlessEqual(self.importer.load_module(self.module_name),
+                             sys.modules[self.module_name])
 
     def test_load_module_new_import(self):
-        # Make sure importing of a built-in that was not done before works
+        # Make sure importing of a modules -in that was not done before works
         # properly.
         try:
-            del sys.modules['sys']
+            del sys.modules[self.module_name]
         except KeyError:
             pass
-        sys_module = importer.BuiltinImporter.load_module('sys')
-        self.failUnless(sys_module)
-        self.failUnless(hasattr(sys_module, 'version'))
+        loaded_module = self.importer.load_module(self.module_name)
+        self.failUnlessEqual(self.module_name, loaded_module.__name__)
 
     def test_load_module_no_path_argument(self):
         # TypeError should be raise if 'path' argument set.
-        self.failUnlessRaises(TypeError, importer.BuiltinImporter.load_module,
-                                'sys', '')
+        self.failUnlessRaises(TypeError, self.importer.load_module,
+                                self.module_name, '')
 
     def test_load_module_ImportError(self):
         self.failUnlessRaises(ImportError,
-                                importer.BuiltinImporter.load_module,
-                                'gobbledeegook')
+                                self.importer.load_module,
+                                self.bad_module_names[0])
 
     def test_load_module_arg_count(self):
-        self.failUnlessRaises(TypeError, importer.BuiltinImporter.load_module)
-        self.failUnlessRaises(TypeError, importer.BuiltinImporter.load_module,
-                                'sys', None, None)
+        self.failUnlessRaises(TypeError, self.importer.load_module)
+        self.failUnlessRaises(TypeError, self.importer.load_module,
+                                self.module_name, None, None)
+
+
+class BuiltinImporterTests(BuiltinFrozen_Tester):
+
+    """Test the built-in module importer."""
+
+    importer = importer.BuiltinImporter
+    module_name = 'sys'
+    bad_module_names = ('tokenize', 'time', '__hello__')
 
 
-class FrozenImporterTests(unittest.TestCase):
+class FrozenImporterTests(BuiltinFrozen_Tester):
 
     """Test the frozen module importer.
     


More information about the Python-checkins mailing list