summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-06-18 22:17:41 +0000
committerChris McDonough <chrism@agendaless.com>2009-06-18 22:17:41 +0000
commit7f1e1e9918d77958ab7fa5e142883869dbf8dd79 (patch)
tree1c79e53a62b0b9be3adacdfefd495455212ad56b
parent8b3f783c610668aa704b2d63e0a25ee6386cec20 (diff)
downloadpyramid-7f1e1e9918d77958ab7fa5e142883869dbf8dd79.tar.gz
pyramid-7f1e1e9918d77958ab7fa5e142883869dbf8dd79.tar.bz2
pyramid-7f1e1e9918d77958ab7fa5e142883869dbf8dd79.zip
Add path module tests.
-rw-r--r--repoze/bfg/path.py29
-rw-r--r--repoze/bfg/tests/test_path.py51
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)
+
+
+
+
+