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), )) _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org https://mail.zope.org/mailman/listinfo/zope-checkins