1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
import unittest
class TestCallerPath(unittest.TestCase):
def tearDown(self):
from repoze.bfg.tests import test_path
if hasattr(test_path, '__bfg_abspath__'):
del test_path.__bfg_abspath__
def _callFUT(self, path, level=2):
from repoze.bfg.path import caller_path
return caller_path(path, level)
def test_isabs(self):
result = self._callFUT('/a/b/c')
self.assertEqual(result, '/a/b/c')
def test_pkgrelative(self):
import os
here = os.path.abspath(os.path.dirname(__file__))
result = self._callFUT('a/b/c')
self.assertEqual(result, os.path.join(here, 'a/b/c'))
def test_memoization_has_bfg_abspath(self):
import os
from repoze.bfg.tests import test_path
test_path.__bfg_abspath__ = '/foo/bar'
here = os.path.abspath(os.path.dirname(__file__))
result = self._callFUT('a/b/c')
self.assertEqual(result, os.path.join('/foo/bar', 'a/b/c'))
def test_memoization_success(self):
import os
here = os.path.abspath(os.path.dirname(__file__))
from repoze.bfg.tests import test_path
result = self._callFUT('a/b/c')
self.assertEqual(result, os.path.join(here, 'a/b/c'))
self.assertEqual(test_path.__bfg_abspath__, here)
class TestCallerModule(unittest.TestCase):
def _callFUT(self, level=2):
from repoze.bfg.path import caller_module
return caller_module(level)
def test_it_level_1(self):
from repoze.bfg.tests import test_path
result = self._callFUT(1)
self.assertEqual(result, test_path)
def test_it_level_2(self):
from repoze.bfg.tests import test_path
result = self._callFUT(2)
self.assertEqual(result, test_path)
def test_it_level_3(self):
import unittest
result = self._callFUT(3)
self.assertEqual(result, unittest)
class TestPackagePath(unittest.TestCase):
def _callFUT(self, package):
from repoze.bfg.path import package_path
return package_path(package)
def test_it_package(self):
from repoze.bfg import tests
package = DummyPackageOrModule(tests)
result = self._callFUT(package)
self.assertEqual(result, package.package_path)
def test_it_module(self):
from repoze.bfg.tests import test_path
module = DummyPackageOrModule(test_path)
result = self._callFUT(module)
self.assertEqual(result, module.package_path)
def test_memoization_success(self):
from repoze.bfg.tests import test_path
module = DummyPackageOrModule(test_path)
result = self._callFUT(module)
self.assertEqual(module.__bfg_abspath__, module.package_path)
def test_memoization_fail(self):
from repoze.bfg.tests import test_path
module = DummyPackageOrModule(test_path, raise_exc=TypeError)
result = self._callFUT(module)
self.failIf(hasattr(module, '__bfg_abspath__'))
self.assertEqual(result, module.package_path)
class DummyPackageOrModule:
def __init__(self, real_package_or_module, raise_exc=None):
self.__dict__['raise_exc'] = raise_exc
self.__dict__['__name__'] = real_package_or_module.__name__
import os
self.__dict__['package_path'] = os.path.dirname(
os.path.abspath(real_package_or_module.__file__))
def __setattr__(self, key, val):
if self.raise_exc is not None:
raise self.raise_exc
self.__dict__[key] = val
|