From 2a1138550b3220b6f8cd23bae5fed03f0fb448cf Mon Sep 17 00:00:00 2001 From: Raphaël Barrois Date: Fri, 24 Feb 2012 00:07:53 +0100 Subject: Allow using '__' in factory.SelfAttribute. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Raphaël Barrois --- tests/test_declarations.py | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) (limited to 'tests/test_declarations.py') diff --git a/tests/test_declarations.py b/tests/test_declarations.py index dcee38b..0fcdf10 100644 --- a/tests/test_declarations.py +++ b/tests/test_declarations.py @@ -22,12 +22,51 @@ import unittest -from factory.declarations import OrderedDeclaration, Sequence +from factory.declarations import dig, OrderedDeclaration, Sequence class OrderedDeclarationTestCase(unittest.TestCase): def test_errors(self): decl = OrderedDeclaration() self.assertRaises(NotImplementedError, decl.evaluate, None, {}) + +class DigTestCase(unittest.TestCase): + class MyObj(object): + def __init__(self, n): + self.n = n + + def test_parentattr(self): + obj = self.MyObj(1) + obj.a__b__c = self.MyObj(2) + obj.a = self.MyObj(3) + obj.a.b = self.MyObj(4) + obj.a.b.c = self.MyObj(5) + + self.assertEqual(2, dig(obj, 'a__b__c').n) + + def test_private(self): + obj = self.MyObj(1) + self.assertEqual(obj.__class__, dig(obj, '__class__')) + + def test_chaining(self): + obj = self.MyObj(1) + obj.a = self.MyObj(2) + obj.a__c = self.MyObj(3) + obj.a.b = self.MyObj(4) + obj.a.b.c = self.MyObj(5) + + self.assertEqual(2, dig(obj, 'a').n) + self.assertRaises(AttributeError, dig, obj, 'b') + self.assertEqual(2, dig(obj, 'a__n')) + self.assertEqual(3, dig(obj, 'a__c').n) + self.assertRaises(AttributeError, dig, obj, 'a__c__n') + self.assertRaises(AttributeError, dig, obj, 'a__d') + self.assertEqual(4, dig(obj, 'a__b').n) + self.assertEqual(4, dig(obj, 'a__b__n')) + self.assertEqual(5, dig(obj, 'a__b__c').n) + self.assertEqual(5, dig(obj, 'a__b__c__n')) + + + if __name__ == '__main__': unittest.main() -- cgit v1.2.3