[Zope-Checkins] CVS: Packages/ZPublisher/tests - testBaseRequest.py:1.1.6.3

Sidnei da Silva sidnei at awkly.org
Wed Nov 3 12:46:34 EST 2004


Update of /cvs-repository/Packages/ZPublisher/tests
In directory cvs.zope.org:/tmp/cvs-serv9379/lib/python/ZPublisher/tests

Modified Files:
      Tag: Zope-2_7-branch
	testBaseRequest.py 
Log Message:

      - Catch AttributeErrors and KeyErrors raised from
        __bobo_traverse__ and convert them to NotFound. In debug mode
        a more verbose error message is issued, the same way it's done
        on attribute/item traversal.


=== Packages/ZPublisher/tests/testBaseRequest.py 1.1.6.2 => 1.1.6.3 ===
--- Packages/ZPublisher/tests/testBaseRequest.py:1.1.6.2	Mon Nov 17 17:34:20 2003
+++ Packages/ZPublisher/tests/testBaseRequest.py	Wed Nov  3 12:46:34 2004
@@ -1,7 +1,7 @@
 from unittest import TestCase, TestSuite, makeSuite, main
 
 import Zope
-Zope.startup()
+#Zope.startup()
 
 from Acquisition import Implicit
 from ZPublisher.BaseRequest import BaseRequest
@@ -17,7 +17,7 @@
         return getattr(self, id)
 
     def view(self):
-        """ Atrribute with docstring.
+        """ Atribute with docstring.
         """
         return 'view content'
 
@@ -27,7 +27,7 @@
     """
 
     def index_html(self):
-        """ Atrribute with docstring.
+        """ Atribute with docstring.
         """
         return 'index_html content'
 
@@ -52,6 +52,13 @@
         REQUEST._hacked_path=1
 
 
+class DummyObjectWithBBT(DummyObjectBasic):
+    """ Dummy class with docstring.
+    """
+
+    def __bobo_traverse__(self, REQUEST, name):
+        raise AttributeError, name
+
 class DummyObjectWithBD(DummyObjectBasic):
     """ Dummy class with docstring.
     """
@@ -63,6 +70,14 @@
             raise RuntimeError('Infinite loop detected.')
         return self, self._default_path
 
+class DummyObjectWithBDBBT(DummyObjectWithBD):
+    """ Dummy class with docstring.
+    """
+
+    def __bobo_traverse__(self, REQUEST, name):
+        if name == self._default_path[0]:
+            return getattr(self, name)
+        raise AttributeError, name
 
 class TestBaseRequest(TestCase):
 
@@ -74,6 +89,8 @@
         self.f1._setObject('objWithDefaultNone', DummyObjectWithDefaultNone() )
         self.f1._setObject('objWithBPTH', DummyObjectWithBPTH() )
         self.f1._setObject('objWithBD', DummyObjectWithBD() )
+        self.f1._setObject('objWithBBT', DummyObjectWithBBT() )
+        self.f1._setObject('objWithBDBBT', DummyObjectWithBDBBT() )
 
     def makeBaseRequest(self):
         response = HTTPResponse()
@@ -140,6 +157,35 @@
         r = self.makeBaseRequest()
         self.f1.objWithBD._default_path = ['']
         self.failUnlessRaises(NotFound, r.traverse, 'folder/objWithBD')
+
+    def test_traverse_withBBT_handles_AttributeError(self):
+        # Test that if __bobo_traverse__ raises AttributeError
+        # that we get a NotFound
+        from ZPublisher import NotFound
+        r = self.makeBaseRequest()
+        self.failUnlessRaises(NotFound, r.traverse, 'folder/objWithBBT/bbt_foo')
+
+    def test_traverse_withBDBBT(self):
+        # Test for an object which has a __browser_default__
+        # and __bobo_traverse__
+        # __bobo_traverse__ should return the object
+        # pointed by __browser_default__
+        r = self.makeBaseRequest()
+        self.f1.objWithBDBBT._default_path = ['view']
+        r.traverse('folder/objWithBDBBT')
+        self.assertEqual(r.URL, '/folder/objWithBDBBT/view')
+        self.assertEqual(r.response.base, '/folder/objWithBDBBT/')
+
+    def test_traverse_withBDBBT_NotFound(self):
+        # Test for an object which has a __browser_default__
+        # and __bobo_traverse__
+        # __bobo_traverse__ should raise an AttributeError, which will
+        # raise a NotFound
+        from ZPublisher import NotFound
+        r = self.makeBaseRequest()
+        self.f1.objWithBDBBT._default_path = ['xxx']
+        r = self.makeBaseRequest()
+        self.failUnlessRaises(NotFound, r.traverse, 'folder/objWithBDBBT')
 
     def test_traverse_slash(self):
         r = self.makeBaseRequest()



More information about the Zope-Checkins mailing list