diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-06-18 22:17:41 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-06-18 22:17:41 +0000 |
| commit | 7f1e1e9918d77958ab7fa5e142883869dbf8dd79 (patch) | |
| tree | 1c79e53a62b0b9be3adacdfefd495455212ad56b | |
| parent | 8b3f783c610668aa704b2d63e0a25ee6386cec20 (diff) | |
| download | pyramid-7f1e1e9918d77958ab7fa5e142883869dbf8dd79.tar.gz pyramid-7f1e1e9918d77958ab7fa5e142883869dbf8dd79.tar.bz2 pyramid-7f1e1e9918d77958ab7fa5e142883869dbf8dd79.zip | |
Add path module tests.
| -rw-r--r-- | repoze/bfg/path.py | 29 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_path.py | 51 |
2 files changed, 68 insertions, 12 deletions
diff --git a/repoze/bfg/path.py b/repoze/bfg/path.py index c3d914208..6fee43791 100644 --- a/repoze/bfg/path.py +++ b/repoze/bfg/path.py @@ -1,19 +1,24 @@ import os import sys -def caller_path(path, level=2): +def caller_path(path, level=2, package_globals=None): # package_globals==testing if not os.path.isabs(path): - package_globals = sys._getframe(level).f_globals - if '__bfg_abspath__' not in package_globals: - # this is actually kinda expensive so we memoize the result - package_name = package_globals['__name__'] - package = sys.modules[package_name] - prefix = package_path(package) - try: - package_globals['__bfg_abspath__'] = prefix - except: - pass - prefix = package_globals['__bfg_abspath__'] + + if package_globals is None: + package_globals = sys._getframe(level).f_globals + + if '__bfg_abspath__' in package_globals: + return os.path.join(package_globals['__bfg_abspath__'], path) + + # computing the abspath is actually kinda expensive so we + # memoize the result + package_name = package_globals['__name__'] + package = sys.modules[package_name] + prefix = package_path(package) + try: + package_globals['__bfg_abspath__'] = prefix + except: + pass path = os.path.join(prefix, path) return path diff --git a/repoze/bfg/tests/test_path.py b/repoze/bfg/tests/test_path.py new file mode 100644 index 000000000..42ab1f8fe --- /dev/null +++ b/repoze/bfg/tests/test_path.py @@ -0,0 +1,51 @@ +import unittest + +class TestCallerPath(unittest.TestCase): + def _callFUT(self, path, level=2, package_globals=None): + from repoze.bfg.path import caller_path + return caller_path(path, level, package_globals) + + def test_isabs(self): + self.assertEqual(self._callFUT('/a/b/c'), '/a/b/c') + + def test_pkgrelative(self): + import os + here = os.path.abspath(os.path.dirname(__file__)) + self.assertEqual(self._callFUT('a/b/c'), os.path.join(here, 'a/b/c')) + + def test_memoization_has_bfg_abspath(self): + import os + here = os.path.abspath(os.path.dirname(__file__)) + package_globals = {'__bfg_abspath__':'/foo/bar'} + self.assertEqual( + self._callFUT('a/b/c', + package_globals=package_globals), + os.path.join('/foo/bar', 'a/b/c')) + + def test_memoization_success(self): + import os + here = os.path.abspath(os.path.dirname(__file__)) + package_globals = {'__name__':'repoze.bfg.tests.test_path'} + self.assertEqual( + self._callFUT('a/b/c', + package_globals=package_globals), + os.path.join(here, 'a/b/c')) + self.assertEqual(package_globals['__bfg_abspath__'], here) + + def test_memoization_fail(self): + import os + here = os.path.abspath(os.path.dirname(__file__)) + class faildict(dict): + def __setitem__(self, *arg): + raise KeyError('name') + package_globals = faildict({'__name__':'repoze.bfg.tests.test_path'}) + self.assertEqual( + self._callFUT('a/b/c', + package_globals=package_globals), + os.path.join(here, 'a/b/c')) + self.failIf('__bfg_abspath__' in package_globals) + + + + + |
