[Zope-Checkins] SVN: Zope/trunk/src/App/ Start on tests for 'getPath'.
Tres Seaver
tseaver at palladion.com
Sun Apr 4 07:48:49 EDT 2010
Log message for revision 110486:
Start on tests for 'getPath'.
Changed:
U Zope/trunk/src/App/Extensions.py
U Zope/trunk/src/App/tests/test_Extensions.py
-=-
Modified: Zope/trunk/src/App/Extensions.py
===================================================================
--- Zope/trunk/src/App/Extensions.py 2010-04-04 00:06:50 UTC (rev 110485)
+++ Zope/trunk/src/App/Extensions.py 2010-04-04 11:48:48 UTC (rev 110486)
@@ -49,7 +49,7 @@
else: s=d
if exists(s): return s
-def getPath(prefix, name, checkProduct=1, suffixes=('',)):
+def getPath(prefix, name, checkProduct=1, suffixes=('',), cfg=None):
"""Find a file in one of several relative locations
Arguments:
@@ -70,6 +70,8 @@
suffixes -- a sequences of file suffixes to check.
By default, the name is used without a suffix.
+ cfg -- ease testing (not part of the API)
+
The search takes on multiple homes which are the instance home,
the directory containing the directory containing the software
home, and possibly product areas.
@@ -89,8 +91,9 @@
if r is not None: result = r
if result is None:
- import App.config
- cfg = App.config.getConfiguration()
+ if cfg is None:
+ import App.config
+ cfg = App.config.getConfiguration()
locations = []
locations.append(cfg.instancehome)
sw = getattr(cfg, 'softwarehome', None)
Modified: Zope/trunk/src/App/tests/test_Extensions.py
===================================================================
--- Zope/trunk/src/App/tests/test_Extensions.py 2010-04-04 00:06:50 UTC (rev 110485)
+++ Zope/trunk/src/App/tests/test_Extensions.py 2010-04-04 11:48:48 UTC (rev 110486)
@@ -80,9 +80,108 @@
fc = self._makeOne(f, im=1)
fc2 = self._makeOne(g, im=1)
self.failUnless(cmp(fc, fc2) < 0)
-
+
+class Test_getPath(unittest.TestCase):
+ _old_Products___path__ = None
+ _tmpdirs = ()
+
+ def tearDown(self):
+ import shutil
+ if self._old_Products___path__ is not None:
+ import Products
+ Products.__path__ = self._old_Products___path__
+ for tmpdir in self._tmpdirs:
+ shutil.rmtree(tmpdir)
+
+ 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()
+ self._tmpdirs += (tmp,)
+ return tmp
+
+ def _makeTempExtension(self, name='foo', extname='Extensions', dir=None):
+ import os
+ if dir is None:
+ dir = self._makeTempdir()
+ if name is None:
+ extdir = os.path.join(dir, extname)
+ else:
+ extdir = os.path.join(dir, name, extname)
+ os.makedirs(extdir)
+ return extdir
+
+ def _makeTempProduct(self, name='foo', extname='Extensions'):
+ import Products
+ root = self._makeTempdir()
+ pdir = self._makeTempExtension(name=name, extname=extname, dir=root)
+ Products.__path__ = (root,)
+ return pdir
+
+ def _makeFile(self, dir, name, text='#extension'):
+ import os
+ fqn = os.path.join(dir, name)
+ f = open(fqn, 'w')
+ f.write(text)
+ f.flush()
+ f.close()
+ return fqn
+
+ def _makeConfig(self, **kw):
+ class DummyConfig:
+ def __init__(self, **kw):
+ self.__dict__.update(kw)
+ return DummyConfig(**kw)
+
+ def test_name_as_path_raises(self):
+ self.assertRaises(ValueError, self._callFUT, 'Extensions', 'foo/bar')
+
+ def test_found_in_product(self):
+ instdir = self._makeTempdir()
+ swdir = self._makeTempdir()
+ cfg = self._makeConfig(instancehome=instdir,
+ softwarehome=swdir,
+ )
+ extdir = self._makeTempProduct()
+ ext = self._makeFile(extdir, 'extension.py')
+ path = self._callFUT('Extensions', 'foo.extension',
+ suffixes=('py',), cfg=cfg)
+ self.assertEqual(path, ext)
+
+ def test_not_found_in_product(self):
+ instdir = self._makeTempdir()
+ swdir = self._makeTempdir()
+ cfg = self._makeConfig(instancehome=instdir,
+ softwarehome=swdir,
+ )
+ extdir = self._makeTempProduct()
+ ext = self._makeFile(extdir, 'extension.py')
+ path = self._callFUT('Extensions', 'foo.other',
+ suffixes=('py',), cfg=cfg)
+ self.assertEqual(path, None)
+
+ def test_wo_checkProduct_skips_product(self):
+ import Products
+ del Products.__path__ # so any iteration will raise
+ instdir = self._makeTempdir()
+ instext = self._makeTempExtension(name=None, dir=instdir)
+ instfqn = self._makeFile(instext, 'extension.py')
+ swdir = self._makeTempdir()
+ swext = self._makeTempExtension(name=None, dir=swdir)
+ swfqn = self._makeFile(swext, 'extension.py')
+ cfg = self._makeConfig(instancehome=instdir,
+ softwarehome=swdir,
+ )
+ path = self._callFUT('Extensions', 'extension', checkProduct=0,
+ suffixes=('py',), cfg=cfg)
+ self.assertEqual(path, instfqn)
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(FuncCodeTests),
+ unittest.makeSuite(Test_getPath),
))
More information about the Zope-Checkins
mailing list