[Checkins] SVN: Acquisition/trunk/src/Acquisition/tests.py Document strange behavior with parent pointer cycles involving an intermediate object, but show that these don't lead to infinite recursion
Hanno Schlichting
hannosch at hannosch.eu
Sat Feb 19 11:14:20 EST 2011
Log message for revision 120449:
Document strange behavior with parent pointer cycles involving an intermediate object, but show that these don't lead to infinite recursion
Changed:
U Acquisition/trunk/src/Acquisition/tests.py
-=-
Modified: Acquisition/trunk/src/Acquisition/tests.py
===================================================================
--- Acquisition/trunk/src/Acquisition/tests.py 2011-02-19 16:13:16 UTC (rev 120448)
+++ Acquisition/trunk/src/Acquisition/tests.py 2011-02-19 16:14:19 UTC (rev 120449)
@@ -2427,7 +2427,46 @@
self.assertRaises(AttributeError, Acquisition.aq_acquire,
y, 'non_existant_attr')
+ def test_parent_parent_parent_circles(self):
+ class Impl(Acquisition.Implicit):
+ hello = 'world'
+ class Impl2(Acquisition.Implicit):
+ hello = 'world'
+ class Impl3(Acquisition.Implicit):
+ hello = 'world2'
+ only = 'here'
+ a = Impl()
+ b = Impl2()
+ c = Impl3()
+ a.__parent__ = b
+ b.__parent__ = c
+ c.__parent__ = a
+
+ # This is not quite what you'd expect, an AQ circle with an
+ # intermediate object gives strange results
+ self.assertTrue(a.__parent__.__parent__ is a)
+ self.assertTrue(a.__parent__.__parent__.__parent__.aq_base is b)
+ self.assertTrue(b.__parent__.__parent__ is b)
+ self.assertTrue(c.__parent__.__parent__ is c)
+
+ self.assertEqual(Acquisition.aq_acquire(a, 'hello'), 'world')
+ self.assertEqual(Acquisition.aq_acquire(b, 'hello'), 'world')
+ self.assertEqual(Acquisition.aq_acquire(c, 'hello'), 'world2')
+
+ self.assertRaises(AttributeError, Acquisition.aq_acquire,
+ a, 'only')
+ self.assertEqual(Acquisition.aq_acquire(b, 'only'), 'here')
+ self.assertEqual(Acquisition.aq_acquire(c, 'only'), 'here')
+
+ self.assertRaises(AttributeError, Acquisition.aq_acquire,
+ a, 'non_existant_attr')
+ self.assertRaises(AttributeError, Acquisition.aq_acquire,
+ b, 'non_existant_attr')
+ self.assertRaises(AttributeError, Acquisition.aq_acquire,
+ c, 'non_existant_attr')
+
+
class TestUnicode(unittest.TestCase):
def test_implicit_aq_unicode_should_be_called(self):
More information about the checkins
mailing list