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

brett.cannon python-checkins at python.org
Thu Nov 2 00:40:31 CET 2006


Author: brett.cannon
Date: Thu Nov  2 00:40:31 2006
New Revision: 52579

Modified:
   sandbox/trunk/import_in_py/mock_importer.py
   sandbox/trunk/import_in_py/test_importer.py
Log:
Add tests for the filesystem importer and top-level packages.


Modified: sandbox/trunk/import_in_py/mock_importer.py
==============================================================================
--- sandbox/trunk/import_in_py/mock_importer.py	(original)
+++ sandbox/trunk/import_in_py/mock_importer.py	Thu Nov  2 00:40:31 2006
@@ -19,10 +19,17 @@
         self.handles = handles
     
     def handle_code(self, loader, mod_name, path):
-        """Mock implementation of a handler."""
-        called_with = loader, mod_name, path
-        sys.modules[mod_name] = called_with
-        return called_with
+        """Mock implementation of a handler.
+        
+        An object that can have arbitrary attributes attached to it must be
+        returned.
+        
+        """
+        self.loader = loader
+        self.module_name = mod_name
+        self.path = path
+        sys.modules[mod_name] = self
+        return self
 
 class MockPyPycLoader(object):
     

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 Nov  2 00:40:31 2006
@@ -12,6 +12,7 @@
 import new
 import os
 import py_compile
+import shutil
 import StringIO
 import sys
 import tempfile
@@ -180,17 +181,22 @@
                                         self.module_name + self.file_ext)
         with open(self.file_path, 'w') as test_file:
             test_file.write("A file for testing the 'importer' module.")
-        mock_handler = mock_importer.MockHandler(self.file_ext)
+        self.pkg_name = 'test_pkg'
+        self.pkg_path = os.path.join(self.directory, self.pkg_name)
+        os.mkdir(os.path.join(self.directory, self.pkg_name))
+        self.pkg_init_path = os.path.join(self.pkg_path,
+                                            '__init__'+self.file_ext)
+        with open(self.pkg_init_path, 'w') as init_file:
+            init_file.write("This is a file for testing packages.")
+        self.handler = mock_importer.MockHandler(self.file_ext)
         self.importer = importer.FileSystemImporter(self.directory,
-                                                    mock_handler)
+                                                    self.handler)
         self.importer.loader = mock_importer.MockPyPycLoader
         
     def tearDown(self):
         """Clean up the created file."""
-        try:
-            os.remove(self.file_path)
-        except OSError:
-            pass
+        os.remove(self.file_path)
+        shutil.rmtree(self.pkg_path)
 
     def test_find_module_single_handler(self):
         # Having a single handler should work without issue.
@@ -198,6 +204,7 @@
         self.failUnless(isinstance(loader, mock_importer.MockPyPycLoader))
         self.failUnlessEqual(loader.file_path, self.file_path)
         self.failUnless(isinstance(loader.handler, mock_importer.MockHandler))
+        self.failUnless(loader.package is None)
 
     def test_find_module_cannot_find(self):
         # Should return None if it can't find the module.
@@ -217,6 +224,14 @@
         self.failUnless(isinstance(loader, mock_importer.MockPyPycLoader))
         self.failUnlessEqual(loader.file_path, self.file_path)
         self.failUnless(isinstance(loader.handler, mock_importer.MockHandler))
+        
+    def test_pkg_discovery(self):
+        # If a module name refers to a directory with an __init__ file it
+        # should be recognized as a package.
+        loader = self.importer.find_module(self.pkg_name)
+        self.failUnlessEqual(loader.file_path, self.pkg_init_path)
+        self.failUnlessEqual(loader.handler, self.handler)
+        self.failUnlessEqual(loader.package, self.pkg_path)
 
 
 class FileSystemLoaderMockEnv(unittest.TestCase):
@@ -226,7 +241,6 @@
 
     def setUp(self):
         """Create a fresh loader per run."""
-        # XXX mock
         mock_handler = mock_importer.MockHandler()
         self.test_path = "<test path>"
         self.module_name = "test_module_name"
@@ -249,8 +263,9 @@
         # Test a basic module load where there is no sys.modules entry.
         # PyPycFileHelper.setUp() clears sys.modules for us.
         new_module = self.loader.load_module(self.module_name)
-        expected = self.loader, self.module_name, self.test_path
-        self.failUnlessEqual(new_module, expected)
+        self.failUnlessEqual(new_module.loader, self.loader)
+        self.failUnlessEqual(new_module.module_name, self.module_name)
+        self.failUnlessEqual(new_module.path, self.test_path)
 
     def test_load_module_sys_modules(self):
         # Make sure that the loader returns the module from sys.modules if it


More information about the Python-checkins mailing list