[Zope-Checkins] SVN: Zope/trunk/src/App/tests/test_Extensions.py Finish coverage for App.Extensions.getObject.

Tres Seaver tseaver at palladion.com
Mon Apr 5 12:20:12 EDT 2010


Log message for revision 110492:
  Finish coverage for App.Extensions.getObject.

Changed:
  U   Zope/trunk/src/App/tests/test_Extensions.py

-=-
Modified: Zope/trunk/src/App/tests/test_Extensions.py
===================================================================
--- Zope/trunk/src/App/tests/test_Extensions.py	2010-04-05 15:58:31 UTC (rev 110491)
+++ Zope/trunk/src/App/tests/test_Extensions.py	2010-04-05 16:20:11 UTC (rev 110492)
@@ -14,6 +14,7 @@
 """
 import unittest
 
+
 class FuncCodeTests(unittest.TestCase):
 
     def _getTargetClass(self):
@@ -80,9 +81,10 @@
         fc = self._makeOne(f, im=1)
         fc2 = self._makeOne(g, im=1)
         self.failUnless(cmp(fc, fc2) < 0)
- 
-class Test_getPath(unittest.TestCase):
 
+
+class _TempdirBase:
+
     _old_Products___path__ = None
     _tmpdirs = ()
     _old_sys_path = None
@@ -102,10 +104,6 @@
                 if getattr(v, '__file__', '').startswith(self._added_path):
                     del sys.modules[k]
 
-    def _callFUT(self, prefix, name, checkProduct=1, suffixes=('',), cfg=None):
-        from App.Extensions import getPath
-        return getPath(prefix, name, checkProduct, suffixes, cfg)
-
     def _makeTempdir(self):
         import tempfile
         tmp = tempfile.mkdtemp()
@@ -147,6 +145,13 @@
         f.close()
         return fqn
 
+
+class Test_getPath(_TempdirBase, unittest.TestCase):
+
+    def _callFUT(self, prefix, name, checkProduct=1, suffixes=('',), cfg=None):
+        from App.Extensions import getPath
+        return getPath(prefix, name, checkProduct, suffixes, cfg)
+
     def _makeConfig(self, **kw):
         class DummyConfig:
             def __init__(self, **kw):
@@ -253,8 +258,93 @@
                                 suffixes=('py',), cfg=cfg)
         self.assertEqual(path, subpkgfqn)
 
+
+class Test_getObject(_TempdirBase, unittest.TestCase):
+
+    def _callFUT(self, module, name, reload=0, modules=None):
+        from App.Extensions import getObject
+        if modules is not None:
+            return getObject(module, name, reload, modules)
+        return getObject(module, name, reload)
+
+    def test_cache_miss(self):
+        from zExceptions import NotFound
+        MODULES = {'somemodule': {}}
+        self.assertRaises(NotFound,
+                          self._callFUT, 'somemodule', 'name', modules=MODULES)
+
+    def test_cache_hit(self):
+        obj = object()
+        MODULES = {'somemodule': {'name': obj}}
+        found = self._callFUT('somemodule', 'name', modules=MODULES)
+        self.failUnless(found is obj)
+
+    def test_no_such_module(self):
+        from zExceptions import NotFound
+        MODULES = {}
+        self.assertRaises(NotFound, self._callFUT,
+                          'nonesuch', 'name', modules=MODULES)
+        self.failIf('nonesuch' in MODULES)
+
+    def test_not_found_in_module(self):
+        from zExceptions import NotFound
+        MODULES = {}
+        extdir = self._makeTempProduct()
+        ext = self._makeFile(extdir, 'extension.py')
+        self.assertRaises(NotFound, self._callFUT,
+                          'foo.extension', 'name', modules=MODULES)
+        self.failUnless('foo.extension' in MODULES)
+        self.failIf('named' in MODULES['foo.extension'])
+
+    def test_found_in_module(self):
+        MODULES = {}
+        extdir = self._makeTempProduct()
+        ext = self._makeFile(extdir, 'extension.py', EXTENSION_PY)
+        found = self._callFUT('foo.extension', 'named', modules=MODULES)
+        self.assertEqual(found, 'NAMED')
+        self.failUnless('foo.extension' in MODULES)
+        self.assertEqual(MODULES['foo.extension']['named'], 'NAMED')
+
+    def test_found_in_module_pyc(self):
+        from compileall import compile_dir
+        import os
+        MODULES = {}
+        extdir = self._makeTempProduct()
+        ext = self._makeFile(extdir, 'extension.py', EXTENSION_PY)
+        compile_dir(extdir)
+        os.remove(ext)
+        found = self._callFUT('foo.extension', 'named', modules=MODULES)
+        self.assertEqual(found, 'NAMED')
+        self.failUnless('foo.extension' in MODULES)
+        self.assertEqual(MODULES['foo.extension']['named'], 'NAMED')
+
+    def test_found_in_module_after_cache_miss(self):
+        cached = {}
+        MODULES = {'foo.extension': cached}
+        extdir = self._makeTempProduct()
+        ext = self._makeFile(extdir, 'extension.py', EXTENSION_PY)
+        found = self._callFUT('foo.extension', 'named', modules=MODULES)
+        self.assertEqual(found, 'NAMED')
+        self.assertEqual(cached['named'], 'NAMED')
+
+    def test_found_in_module_after_cache_hit_but_reload(self):
+        cached = {'named': 'BEFORE'}
+        MODULES = {'foo.extension': cached}
+        extdir = self._makeTempProduct()
+        ext = self._makeFile(extdir, 'extension.py', EXTENSION_PY)
+        found = self._callFUT('foo.extension', 'named', reload=1,
+                              modules=MODULES)
+        self.assertEqual(found, 'NAMED')
+        self.assertEqual(cached['named'], 'NAMED')
+
+
+EXTENSION_PY = """\
+named = 'NAMED'
+"""
+
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(FuncCodeTests),
         unittest.makeSuite(Test_getPath),
+        unittest.makeSuite(Test_getObject),
     ))



More information about the Zope-Checkins mailing list