[z3-checkins] r21754 - in z3/Five/branch/Five-1.2: . browser/tests

efge at codespeak.net efge at codespeak.net
Fri Jan 6 19:01:54 CET 2006


Author: efge
Date: Fri Jan  6 19:01:54 2006
New Revision: 21754

Modified:
   z3/Five/branch/Five-1.2/CHANGES.txt
   z3/Five/branch/Five-1.2/browser/tests/test_traversable.py
   z3/Five/branch/Five-1.2/fiveconfigure.py
   z3/Five/branch/Five-1.2/traversable.py
Log:
Fix cleanup of five:traversable.

Modified: z3/Five/branch/Five-1.2/CHANGES.txt
==============================================================================
--- z3/Five/branch/Five-1.2/CHANGES.txt	(original)
+++ z3/Five/branch/Five-1.2/CHANGES.txt	Fri Jan  6 19:01:54 2006
@@ -17,6 +17,8 @@
 
 * Made Five send a ContainerModifiedEvent when appropriate.
 
+* Fix cleanup of five:traversable.
+
 Restructuring
 -------------
 

Modified: z3/Five/branch/Five-1.2/browser/tests/test_traversable.py
==============================================================================
--- z3/Five/branch/Five-1.2/browser/tests/test_traversable.py	(original)
+++ z3/Five/branch/Five-1.2/browser/tests/test_traversable.py	Fri Jan  6 19:01:54 2006
@@ -19,6 +19,11 @@
 if __name__ == '__main__':
     execfile(os.path.join(sys.path[0], 'framework.py'))
 
+
+class SimpleClass(object):
+    """Class with no __bobo_traverse__."""
+
+
 def test_traversable():
     """
     Test the behaviour of Five-traversable classes.
@@ -56,6 +61,9 @@
       ... <five:traversable
       ...     class="Products.Five.tests.testing.fancycontent.FancyContent"
       ...     />
+      ... <five:traversable
+      ...     class="Products.Five.browser.tests.test_traversable.SimpleClass"
+      ...     />
       ... 
       ... <browser:page
       ...     for="Products.Five.tests.testing.fancycontent.IFancyContent"
@@ -96,6 +104,22 @@
 
       >>> from zope.app.tests.placelesssetup import tearDown
       >>> tearDown()
+
+    Verify that after cleanup, there's no cruft left from five:traversable::
+
+      >>> from Products.Five.browser.tests.test_traversable import SimpleClass
+      >>> hasattr(SimpleClass, '__bobo_traverse__')
+      False
+      >>> hasattr(SimpleClass, '__fallback_traverse__')
+      False
+
+      >>> from Products.Five.tests.testing.fancycontent import FancyContent
+      >>> hasattr(FancyContent, '__bobo_traverse__')
+      True
+      >>> hasattr(FancyContent.__bobo_traverse__, '__five_method__')
+      False
+      >>> hasattr(FancyContent, '__fallback_traverse__')
+      False
     """
 
 def test_suite():

Modified: z3/Five/branch/Five-1.2/fiveconfigure.py
==============================================================================
--- z3/Five/branch/Five-1.2/fiveconfigure.py	(original)
+++ z3/Five/branch/Five-1.2/fiveconfigure.py	Fri Jan  6 19:01:54 2006
@@ -267,12 +267,14 @@
     method = getattr(class_, name, None)
     if isFiveMethod(method):
         original = getattr(class_, fallback, None)
-        if original is None:
+        if original is not None:
+            delattr(class_, fallback)
+        if original is None or isFiveMethod(original):
             try:
                 delattr(class_, name)
             except AttributeError:
                 pass
-        else:                
+        else:
             setattr(class_, name, original)
 
     if attr is not None:

Modified: z3/Five/branch/Five-1.2/traversable.py
==============================================================================
--- z3/Five/branch/Five-1.2/traversable.py	(original)
+++ z3/Five/branch/Five-1.2/traversable.py	Fri Jan  6 19:01:54 2006
@@ -56,6 +56,7 @@
         and let Zope do it's job.
         """
         raise AttributeError, name
+    __fallback_traverse__.__five_method__ = True
 
     def __bobo_traverse__(self, REQUEST, name):
         """Hook for Zope 2 traversal


More information about the z3-checkins mailing list