diff options
Diffstat (limited to 'tests/test_containers.py')
-rw-r--r-- | tests/test_containers.py | 44 |
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())) |