def test_chaining(self): obj = self.MyObj(1) obj.a = self.MyObj(2) obj.a.b = self.MyObj(3) obj.a.b.c = self.MyObj(4) self.assertEqual(2, declarations.deepgetattr(obj, 'a').n) self.assertRaises(AttributeError, declarations.deepgetattr, obj, 'b') self.assertEqual(2, declarations.deepgetattr(obj, 'a.n')) self.assertEqual(3, declarations.deepgetattr(obj, 'a.c', 3)) self.assertRaises(AttributeError, declarations.deepgetattr, obj, 'a.c.n') self.assertRaises(AttributeError, declarations.deepgetattr, obj, 'a.d') self.assertEqual(3, declarations.deepgetattr(obj, 'a.b').n) self.assertEqual(3, declarations.deepgetattr(obj, 'a.b.n')) self.assertEqual(4, declarations.deepgetattr(obj, 'a.b.c').n) self.assertEqual(4, declarations.deepgetattr(obj, 'a.b.c.n')) self.assertEqual(42, declarations.deepgetattr(obj, 'a.b.c.n.x', 42))