[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