aboutsummaryrefslogtreecommitdiff
path: root/tests/test_containers.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_containers.py')
-rw-r--r--tests/test_containers.py44
1 files changed, 42 insertions, 2 deletions
diff --git a/tests/test_containers.py b/tests/test_containers.py
index 34b61d4..6e58573 100644
--- a/tests/test_containers.py
+++ b/tests/test_containers.py
@@ -43,18 +43,52 @@ class LazyStubTestCase(unittest.TestCase):
self.assertRaises(AttributeError, getattr, stub, 'three')
+ def test_accessing_container(self):
+ class LazyAttr(containers.LazyValue):
+ def __init__(self, obj_attr, container_attr):
+ self.obj_attr = obj_attr
+ self.container_attr = container_attr
+
+ def evaluate(self, obj, containers=()):
+ if containers:
+ add = getattr(containers[0], self.container_attr)
+ else:
+ add = 0
+ return getattr(obj, self.obj_attr) + add
+
+ class DummyContainer(object):
+ three = 3
+
+ stub = containers.LazyStub({'one': LazyAttr('two', 'three'), 'two': 2, 'three': 42},
+ containers=(DummyContainer(),))
+
+ self.assertEqual(5, stub.one)
+
+ stub = containers.LazyStub({'one': LazyAttr('two', 'three'), 'two': 2, 'three': 42},
+ containers=())
+ self.assertEqual(2, stub.one)
+
def test_cyclic_definition(self):
class LazyAttr(containers.LazyValue):
def __init__(self, attrname):
self.attrname = attrname
- def evaluate(self, obj):
+ def evaluate(self, obj, container=None):
return 1 + getattr(obj, self.attrname)
stub = containers.LazyStub({'one': LazyAttr('two'), 'two': LazyAttr('one')})
self.assertRaises(containers.CyclicDefinitionError, getattr, stub, 'one')
+ def test_representation(self):
+ class RandomObj(object):
+ pass
+
+ stub = containers.LazyStub({'one': 1, 'two': 2}, target_class=RandomObj)
+ self.assertIn('RandomObj', repr(stub))
+ self.assertIn('RandomObj', str(stub))
+ self.assertIn('one', str(stub))
+
class OrderedDeclarationMock(declarations.OrderedDeclaration):
pass
@@ -134,7 +168,13 @@ class DeclarationDictTestCase(unittest.TestCase):
def test_update_with_public(self):
d = containers.DeclarationDict()
- d.update_with_public({'one': 1, '_two': 2, 'three': 3})
+ d.update_with_public({
+ 'one': 1,
+ '_two': 2,
+ 'three': 3,
+ 'classmethod': classmethod(lambda c: 1),
+ 'staticmethod': staticmethod(lambda: 1),
+ })
self.assertEqual(set(['one', 'three']), set(d))
self.assertEqual(set([1, 3]), set(d.values()))