[Zope-Checkins] SVN: Zope/trunk/src/ZPublisher/tests/testBaseRequest.py Remove module-scope imports from unit tests.

Tres Seaver tseaver at palladion.com
Sun Apr 19 14:08:43 EDT 2009


Log message for revision 99287:
  Remove module-scope imports from unit tests.

Changed:
  U   Zope/trunk/src/ZPublisher/tests/testBaseRequest.py

-=-
Modified: Zope/trunk/src/ZPublisher/tests/testBaseRequest.py
===================================================================
--- Zope/trunk/src/ZPublisher/tests/testBaseRequest.py	2009-04-19 17:38:06 UTC (rev 99286)
+++ Zope/trunk/src/ZPublisher/tests/testBaseRequest.py	2009-04-19 18:08:43 UTC (rev 99287)
@@ -1,24 +1,36 @@
 import unittest
 
-from Acquisition import Implicit
+class BaseRequest_factory:
 
-import zope.interface
-import zope.component
-import zope.testing.cleanup
-import zope.traversing.namespace
-from zope.publisher.browser import BrowserPage
-from zope.publisher.browser import IBrowserRequest
-from zope.publisher.browser import IDefaultBrowserLayer
-from zope.traversing.interfaces import ITraversable
+    def _makeOne(self, root):
+        from Acquisition import Implicit
 
+        class DummyResponse(Implicit):
 
-class TestBaseRequest(unittest.TestCase):
+            base = ''
+            status = None
+            debug_mode = False
 
-    def _getTargetClass(self):
-        from ZPublisher.BaseRequest import BaseRequest
-        return BaseRequest
+            def setStatus(self, code):
+                self.status = code
 
-    def _makeOne(self, root):
+            def setBase(self, base):
+                if base is None:
+                    base = ''
+                elif not base.endswith('/'):
+                    base = base+'/'
+                self.base = str(base)
+
+            def notFoundError(self, name):
+                from zExceptions import NotFound
+                raise NotFound(name)
+
+            # Real responses raise NotFound, to avoid information disclosure
+            #def forbiddenError(self, name):
+            #    from zExceptions import Forbidden
+            #    raise Forbidden(name)
+            forbiddenError = notFoundError
+
         response = DummyResponse()
         environment = { 'URL': '',
                         'PARENTS': [root],
@@ -28,14 +40,118 @@
                         'response': response }
         return self._getTargetClass()(environment)
 
+    def _makeBasicObjectClass(self):
+        from Acquisition import Implicit
+
+        class DummyObjectBasic(Implicit):
+            """Dummy class with docstring."""
+
+            def _setObject(self, id, object):
+                setattr(self, id, object)
+                return getattr(self, id)
+
+            def view(self):
+                """Attribute with docstring."""
+                return 'view content'
+
+            def noview(self):
+                # Attribute without docstring.
+                return 'unpublishable'
+
+        return DummyObjectBasic
+
+    def _makeBasicObject(self):
+        return self._makeBasicObjectClass()()
+
+    def _makeObjectWithDefault(self):
+
+        class DummyObjectWithDefault(self._makeBasicObjectClass()):
+            """Dummy class with docstring."""
+
+            def index_html(self):
+                """Attribute with docstring."""
+                return 'index_html content'
+
+        return DummyObjectWithDefault()
+
+    def _makeObjectWithDefaultNone(self):
+
+        class DummyObjectWithDefaultNone(self._makeBasicObjectClass()):
+            """Dummy class with docstring."""
+
+            index_html = None
+
+        return DummyObjectWithDefaultNone()
+
+    def _makeObjectWithBPTH(self):
+
+        class DummyObjectWithBPTH(self._makeBasicObjectClass()):
+            """Dummy class with __before_publishing_traverse__."""
+
+            def __before_publishing_traverse__(self, object, REQUEST):
+                if REQUEST['_test_counter'] < 100:
+                    REQUEST['_test_counter'] += 1
+                else:
+                    raise RuntimeError('Infinite loop detected.')
+                REQUEST['TraversalRequestNameStack'] += self._path
+                REQUEST._hacked_path=1
+
+        return DummyObjectWithBPTH()
+
+    def _makeObjectWithBD(self):
+        class DummyObjectWithBD(self._makeBasicObjectClass()):
+            """Dummy class with __browser_default__."""
+            def __browser_default__(self, REQUEST):
+                if REQUEST['_test_counter'] < 100:
+                    REQUEST['_test_counter'] += 1
+                else:
+                    raise RuntimeError('Infinite loop detected.')
+                return self, self._default_path
+        return DummyObjectWithBD()
+
+    def _makeObjectWithBDBBT(self):
+        class DummyObjectWithBDBBT(self._makeBasicObjectClass()):
+            """Dummy class with __browser_default__."""
+            def __browser_default__(self, REQUEST):
+                if REQUEST['_test_counter'] < 100:
+                    REQUEST['_test_counter'] += 1
+                else:
+                    raise RuntimeError('Infinite loop detected.')
+                return self, self._default_path
+            def __bobo_traverse__(self, REQUEST, name):
+                if name == self._default_path[0]:
+                    return getattr(self, name)
+                raise AttributeError, name
+        return DummyObjectWithBDBBT()
+
+    def _makeObjectWithEmptyDocstring(self):
+        from Acquisition import Implicit
+
+        class DummyObjectWithEmptyDocstring(Implicit):
+            ""
+            def view(self):
+                """Attribute with docstring."""
+                return 'view content'
+
+            def noview(self):
+                # Attribute without docstring.
+                return 'unpublishable'
+        return DummyObjectWithEmptyDocstring()
+
+class TestBaseRequest(unittest.TestCase, BaseRequest_factory):
+
+    def _getTargetClass(self):
+        from ZPublisher.BaseRequest import BaseRequest
+        return BaseRequest
+
     def _makeRootAndFolder(self):
-        root = DummyObjectBasic()
-        folder = root._setObject('folder', DummyObjectBasic())
+        root = self._makeBasicObject()
+        folder = root._setObject('folder', self._makeBasicObject())
         return root, folder
 
     def test_traverse_basic(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objBasic', DummyObjectBasic())
+        folder._setObject('objBasic', self._makeBasicObject())
         r = self._makeOne(root)
         r.traverse('folder/objBasic')
         self.assertEqual(r.URL, '/folder/objBasic')
@@ -43,7 +159,7 @@
 
     def test_traverse_withDefault(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithDefault', DummyObjectWithDefault())
+        folder._setObject('objWithDefault', self._makeObjectWithDefault())
         r = self._makeOne(root)
         r.traverse('folder/objWithDefault')
         self.assertEqual(r.URL, '/folder/objWithDefault/index_html')
@@ -51,7 +167,8 @@
 
     def test_traverse_withDefaultNone(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithDefaultNone', DummyObjectWithDefaultNone())
+        folder._setObject('objWithDefaultNone',
+                          self._makeObjectWithDefaultNone())
         r = self._makeOne(root)
         r.traverse('folder/objWithDefaultNone')
         self.assertEqual(r.URL, '/folder/objWithDefaultNone')
@@ -59,7 +176,7 @@
 
     def test_traverse_withBPTH(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithBPTH', DummyObjectWithBPTH())
+        folder._setObject('objWithBPTH', self._makeObjectWithBPTH())
         folder.objWithBPTH._path = ['view']
         r = self._makeOne(root)
         r.traverse('folder/objWithBPTH')
@@ -68,7 +185,7 @@
 
     def test_traverse_withBDView(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithBD', DummyObjectWithBD())
+        folder._setObject('objWithBD', self._makeObjectWithBD())
         folder.objWithBD._default_path = ['view']
         r = self._makeOne(root)
         r.traverse('folder/objWithBD')
@@ -77,9 +194,9 @@
 
     def test_traverse_withAcquisition(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithBPTH', DummyObjectWithBPTH())
+        folder._setObject('objWithBPTH', self._makeObjectWithBPTH())
         folder.objWithBPTH._path = ['view']
-        folder._setObject('objWithBD', DummyObjectWithBD())
+        folder._setObject('objWithBD', self._makeObjectWithBD())
         folder.objWithBD._default_path = ['view']
         r = self._makeOne(root)
         r.traverse('folder/objWithBD/objWithBPTH')
@@ -89,10 +206,10 @@
     def test_traverse_withBDAndBPTH(self):
         # Collector 1079 (infinite loop 1)
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objBasic', DummyObjectBasic())
-        folder._setObject('objWithBPTH', DummyObjectWithBPTH())
+        folder._setObject('objBasic', self._makeBasicObject())
+        folder._setObject('objWithBPTH', self._makeObjectWithBPTH())
         folder.objWithBPTH._path = ['objBasic']
-        folder._setObject('objWithBD', DummyObjectWithBD())
+        folder._setObject('objWithBD', self._makeObjectWithBD())
         folder.objWithBD._default_path = ['objWithBPTH']
         r = self._makeOne(root)
         r.traverse('folder/objWithBD')
@@ -103,7 +220,7 @@
         # Collector 1079 (infinite loop 2)
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithBD', DummyObjectWithBD())
+        folder._setObject('objWithBD', self._makeObjectWithBD())
         folder.objWithBD._default_path = ['']
         r = self._makeOne(root)
         self.failUnlessRaises(NotFound, r.traverse, 'folder/objWithBD')
@@ -113,7 +230,11 @@
         # that we get a NotFound
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithBBT', DummyObjectWithBBT())
+        def _faux___bobo_traverse__(REQUEST, name):
+            raise AttributeError, name
+        obj = self._makeBasicObject()
+        obj.__bobo_traverse__ = _faux___bobo_traverse__
+        folder._setObject('objWithBBT', obj)
         r = self._makeOne(root)
         self.failUnlessRaises(NotFound, r.traverse,
                               'folder/objWithBBT/bbt_foo')
@@ -124,7 +245,7 @@
         # __bobo_traverse__ should return the object
         # pointed by __browser_default__
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithBDBBT', DummyObjectWithBDBBT())
+        folder._setObject('objWithBDBBT', self._makeObjectWithBDBBT())
         folder.objWithBDBBT._default_path = ['view']
         r = self._makeOne(root)
         r.traverse('folder/objWithBDBBT')
@@ -138,14 +259,14 @@
         # raise a NotFound
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithBDBBT', DummyObjectWithBDBBT())
+        folder._setObject('objWithBDBBT', self._makeObjectWithBDBBT())
         folder.objWithBDBBT._default_path = ['xxx']
         r = self._makeOne(root)
         self.failUnlessRaises(NotFound, r.traverse, 'folder/objWithBDBBT')
 
     def test_traverse_slash(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithDefault', DummyObjectWithDefault())
+        folder._setObject('objWithDefault', self._makeObjectWithDefault())
         r = self._makeOne(root)
         r['PARENTS'] = [folder.objWithDefault]
         r.traverse('/')
@@ -154,7 +275,7 @@
 
     def test_traverse_attribute_with_docstring(self):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objBasic', DummyObjectBasic())
+        folder._setObject('objBasic', self._makeBasicObject())
         r = self._makeOne(root)
         r.traverse('folder/objBasic/view')
         self.assertEqual(r.URL, '/folder/objBasic/view')
@@ -163,21 +284,23 @@
     def test_traverse_attribute_without_docstring(self):
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objBasic', DummyObjectBasic())
+        folder._setObject('objBasic', self._makeBasicObject())
         r = self._makeOne(root)
         self.assertRaises(NotFound, r.traverse, 'folder/objBasic/noview')
 
     def test_traverse_class_without_docstring(self):
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithoutDocstring', DummyObjectWithoutDocstring())
+        folder._setObject('objWithoutDocstring', 
+                          self._makeObjectWithEmptyDocstring())
         r = self._makeOne(root)
         self.assertRaises(NotFound, r.traverse, 'folder/objWithoutDocstring')
 
     def test_traverse_attribute_of_class_without_docstring(self):
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
-        folder._setObject('objWithoutDocstring', DummyObjectWithoutDocstring())
+        folder._setObject('objWithoutDocstring', 
+                          self._makeObjectWithEmptyDocstring())
         r = self._makeOne(root)
         self.assertRaises(NotFound, r.traverse,
                               'folder/objWithoutDocstring/view')
@@ -186,7 +309,8 @@
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
         r = self._makeOne(root)
-        folder._setObject('objWithoutDocstring', DummyObjectWithoutDocstring())
+        folder._setObject('objWithoutDocstring', 
+                          self._makeObjectWithEmptyDocstring())
         self.assertRaises(NotFound, r.traverse,
                               'folder/objWithoutDocstring/noview')
 
@@ -255,67 +379,155 @@
         self.assertRaises(NotFound, r.traverse, 'not_found')
 
 
-class TestBaseRequestZope3Views(unittest.TestCase):
+class TestBaseRequestZope3Views(unittest.TestCase, BaseRequest_factory):
 
+    _dummy_interface = None
+
     def _getTargetClass(self):
         from ZPublisher.BaseRequest import BaseRequest
         return BaseRequest
 
     def _makeOne(self, root):
-        response = DummyResponse()
-        environment = { 'URL': '',
-                        'PARENTS': [root],
-                        'steps': [],
-                        '_hacked_path': 0,
-                        '_test_counter': 0,
-                        'response': response }
-
-        request = self._getTargetClass()(environment)
-
+        from zope.interface import directlyProvides
+        from zope.publisher.browser import IDefaultBrowserLayer
+        request = super(TestBaseRequestZope3Views, self)._makeOne(root)
         # The request needs to implement the proper interface
-        zope.interface.directlyProvides(request, IDefaultBrowserLayer)
+        directlyProvides(request, IDefaultBrowserLayer)
         return request
 
     def _makeRootAndFolder(self):
-        root = DummyObjectBasic()
-        folder = root._setObject('folder', DummyObjectZ3('folder'))
+        root = self._makeBasicObject()
+        folder = root._setObject('folder', self._makeDummyObject('folder'))
         return root, folder
 
+    def _dummyInterface(self):
+        from zope.interface import Interface
+        if self._dummy_interface is not None:
+            return self._dummy_interface
+
+        class IDummy(Interface):
+            """IDummy"""
+
+        self._dummy_interface = IDummy
+        return IDummy
+
+    def _makeDummyObject(self, name='dummy'):
+        from zope.interface import implements
+
+        class DummyObjectZ3(self._makeBasicObjectClass()):
+            implements(self._dummyInterface())
+            def __init__(self, name):
+                self.name = name
+
+        return DummyObjectZ3(name)
+
+    def _makeDummyObjectWithAttr(self, name):
+        from zope.interface import implements
+
+        class DummyObjectZ3WithAttr(self._makeBasicObjectClass()):
+            implements(self._dummyInterface())
+            def __init__(self, name):
+                self.name = name
+
+            def meth(self):
+                """doc"""
+                return 'meth on %s' % self.name
+            def methonly(self):
+                """doc"""
+                return 'methonly on %s' % self.name
+
+        return DummyObjectZ3WithAttr(name)
+
     def setUp(self):
-        zope.testing.cleanup.cleanUp()
+        from zope.testing.cleanup import cleanUp
 
-        gsm = zope.component.getGlobalSiteManager()
+        cleanUp()
+        self._registerAdapters()
 
+    def _registerAdapters(self):
+        from Acquisition import Implicit
+        from zope.component import getGlobalSiteManager
+        from zope.interface import Interface
+        from zope.publisher.browser import BrowserPage
+        from zope.publisher.browser import IDefaultBrowserLayer
+        from zope.traversing.interfaces import ITraversable
+        from zope.traversing.namespace import view
+
+        gsm = getGlobalSiteManager()
+
+        IDummy = self._dummyInterface()
+
+        class DummyView(Implicit):
+            def __init__(self, content, request):
+                self.content = content
+                self.request = request
+            def __call__(self):
+                return 'view on %s' % (self.content.name)
+
+        class DummyPage(BrowserPage):
+
+            # BrowserPage is an IBrowserPublisher with a browserDefault that
+            # returns self, () so that __call__ is invoked by the publisher.
+
+            def __call__(self):
+                return 'Test page'
+
+        class DummyPage2(BrowserPage):
+
+            def browserDefault(self, request):
+                # intentionally return something that's not self
+                return DummyPage(self.context, request), ()
+
+            # __call__ remains unimplemented, baseclass raises NotImplementedError
+
+        class DummyPage3(BrowserPage):
+
+            def browserDefault(self, request):
+                # intentionally return a method here
+                return self.foo, ()
+
+            def foo(self):
+                return 'Test page'
+
+            # __call__ remains unimplemented, baseclass raises NotImplementedError
+
+        class DummyPage4(Implicit, DummyPage):
+            # a normal page that can implicitly acquire attributes
+            pass
+
         # Define the views
         gsm.registerAdapter(DummyView, (IDummy, IDefaultBrowserLayer),
-                            zope.interface.Interface, 'meth')
+                            Interface, 'meth')
         gsm.registerAdapter(DummyPage, (IDummy, IDefaultBrowserLayer),
-                            zope.interface.Interface, 'page')
+                            Interface, 'page')
         gsm.registerAdapter(DummyPage2, (IDummy, IDefaultBrowserLayer),
-                            zope.interface.Interface, 'page2')
+                            Interface, 'page2')
         gsm.registerAdapter(DummyPage3, (IDummy, IDefaultBrowserLayer),
-                            zope.interface.Interface, 'page3')
+                            Interface, 'page3')
         gsm.registerAdapter(DummyPage4, (IDummy, IDefaultBrowserLayer),
-                            zope.interface.Interface, 'page4')
+                            Interface, 'page4')
 
         # Bind the 'view' namespace (for @@ traversal)
-        gsm.registerAdapter(zope.traversing.namespace.view,
-                            (IDummy, IDefaultBrowserLayer), ITraversable,
-                            'view')
+        gsm.registerAdapter(view,
+                            (self._dummyInterface(), IDefaultBrowserLayer),
+                            ITraversable, 'view')
 
     def tearDown(self):
-        zope.testing.cleanup.cleanUp()
+        from zope.testing.cleanup import cleanUp
+        cleanUp()
 
     def _setDefaultViewName(self, name):
+        from zope.component import getGlobalSiteManager
         from zope.component.interfaces import IDefaultViewName
-        gsm = zope.component.getGlobalSiteManager()
-        gsm.registerAdapter(name, (IDummy, IBrowserRequest), IDefaultViewName,
-                            '')
+        from zope.publisher.browser import IBrowserRequest
+        gsm = getGlobalSiteManager()
+        gsm.registerAdapter(name, (self._dummyInterface(), IBrowserRequest),
+                            IDefaultViewName, '')
 
     def test_traverse_view(self):
         #simple view
         root, folder = self._makeRootAndFolder()
-        folder._setObject('obj', DummyObjectZ3('obj'))
+        folder._setObject('obj', self._makeDummyObject('obj'))
         r = self._makeOne(root)
         ob = r.traverse('folder/obj/meth')
         self.assertEqual(ob(), 'view on obj')
@@ -329,7 +541,7 @@
     def test_traverse_view_attr_local(self):
         #method on object used first
         root, folder = self._makeRootAndFolder()
-        folder._setObject('withattr', DummyObjectZ3WithAttr('withattr'))
+        folder._setObject('withattr', self._makeDummyObjectWithAttr('withattr'))
         r = self._makeOne(root)
         ob = r.traverse('folder/withattr/meth')
         self.assertEqual(ob(), 'meth on withattr')
@@ -343,8 +555,8 @@
     def test_traverse_view_attr_above(self):
         #view takes precedence over acquired attribute
         root, folder = self._makeRootAndFolder()
-        folder2 = root._setObject('folder2', DummyObjectZ3WithAttr('folder2'))
-        folder2._setObject('obj2', DummyObjectZ3('obj2'))
+        folder2 = root._setObject('folder2', self._makeDummyObjectWithAttr('folder2'))
+        folder2._setObject('obj2', self._makeDummyObject('obj2'))
         r = self._makeOne(root)
         ob = r.traverse('folder2/obj2/meth')
         self.assertEqual(ob(), 'view on obj2') # used to be buggy (acquired)
@@ -358,8 +570,8 @@
     def test_traverse_view_attr_local2(self):
         #method with other method above
         root, folder = self._makeRootAndFolder()
-        folder2 = root._setObject('folder2', DummyObjectZ3WithAttr('folder2'))
-        folder2._setObject('withattr2', DummyObjectZ3WithAttr('withattr2'))
+        folder2 = root._setObject('folder2', self._makeDummyObjectWithAttr('folder2'))
+        folder2._setObject('withattr2', self._makeDummyObjectWithAttr('withattr2'))
         r = self._makeOne(root)
         ob = r.traverse('folder2/withattr2/meth')
         self.assertEqual(ob(), 'meth on withattr2')
@@ -374,8 +586,8 @@
         #normal acquired attribute without view
         from ZPublisher import NotFound
         root, folder = self._makeRootAndFolder()
-        folder2 = root._setObject('folder2', DummyObjectZ3WithAttr('folder2'))
-        folder2._setObject('obj2', DummyObjectZ3('obj2'))
+        folder2 = root._setObject('folder2', self._makeDummyObjectWithAttr('folder2'))
+        folder2._setObject('obj2', self._makeDummyObject('obj2'))
         r = self._makeOne(root)
         ob = r.traverse('folder2/obj2/methonly')
         self.assertEqual(ob(), 'methonly on folder2')
@@ -387,7 +599,7 @@
     def test_quoting_goggles(self):
         #View goggles ('@@') should not be quoted
         root, folder = self._makeRootAndFolder()
-        folder._setObject('obj', DummyObjectZ3('obj'))
+        folder._setObject('obj', self._makeDummyObject('obj'))
         r = self._makeOne(root)
         r.traverse('folder/obj/@@meth')
         self.assertEqual(r['URL'], '/folder/obj/@@meth')
@@ -395,7 +607,7 @@
     def test_quoting_plusplus(self):
         #View markers ('++ should not be quoted
         root, folder = self._makeRootAndFolder()
-        folder._setObject('obj', DummyObjectZ3('obj'))
+        folder._setObject('obj', self._makeDummyObject('obj'))
         r = self._makeOne(root)
         r.traverse('folder/obj/++view++meth')
         self.assertEqual(r['URL'], '/folder/obj/++view++meth')
@@ -404,7 +616,7 @@
         # browserDefault can return self, () to indicate that the
         # object itself wants to be published (using __call__):
         root, folder = self._makeRootAndFolder()
-        folder._setObject('obj', DummyObjectZ3('obj'))
+        folder._setObject('obj', self._makeDummyObject('obj'))
         r = self._makeOne(root)
         ob = r.traverse('folder/obj/page')
         self.assertEqual(ob(), 'Test page')
@@ -426,7 +638,7 @@
         # an object providing IAcquirer, it should wrap it in the
         # object being traversed
         root, folder = self._makeRootAndFolder()
-        ob2 = DummyObjectZ3('ob2')
+        ob2 = self._makeDummyObject('ob2')
         folder._setObject('ob2', ob2)
         r = self._makeOne(root)
         ob = r.traverse('folder/page4')
@@ -434,166 +646,7 @@
         # make sure we can acquire
         self.assertEqual(ob.ob2, ob2)
 
-class DummyResponse(Implicit):
 
-    base = ''
-    status = None
-    debug_mode = False
-
-    def setStatus(self, code):
-        self.status = code
-
-    def setBase(self, base):
-        if base is None:
-            base = ''
-        elif not base.endswith('/'):
-            base = base+'/'
-        self.base = str(base)
-
-    def notFoundError(self, name):
-        from zExceptions import NotFound
-        raise NotFound(name)
-
-    # Real responses raise NotFound, to avoid information disclosure
-    #def forbiddenError(self, name):
-    #    from zExceptions import Forbidden
-    #    raise Forbidden(name)
-    forbiddenError = notFoundError
-
-class DummyObjectBasic(Implicit):
-    """Dummy class with docstring."""
-
-    def _setObject(self, id, object):
-        setattr(self, id, object)
-        return getattr(self, id)
-
-    def view(self):
-        """Attribute with docstring."""
-        return 'view content'
-
-    def noview(self):
-        # Attribute without docstring.
-        return 'unpublishable'
-
-
-class DummyObjectWithoutDocstring(Implicit):
-    ""
-
-    def view(self):
-        """Attribute with docstring."""
-        return 'view content'
-
-    def noview(self):
-        # Attribute without docstring.
-        return 'unpublishable'
-
-
-class DummyObjectWithDefault(DummyObjectBasic):
-    """Dummy class with docstring."""
-
-    def index_html(self):
-        """Attribute with docstring."""
-        return 'index_html content'
-
-
-class DummyObjectWithDefaultNone(DummyObjectWithDefault):
-    """Dummy class with docstring."""
-
-    index_html = None
-
-
-class DummyObjectWithBPTH(DummyObjectBasic):
-    """Dummy class with docstring."""
-
-    def __before_publishing_traverse__(self, object, REQUEST):
-        if REQUEST['_test_counter'] < 100:
-            REQUEST['_test_counter'] += 1
-        else:
-            raise RuntimeError('Infinite loop detected.')
-        REQUEST['TraversalRequestNameStack'] += self._path
-        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."""
-
-    def __browser_default__(self, REQUEST):
-        if REQUEST['_test_counter'] < 100:
-            REQUEST['_test_counter'] += 1
-        else:
-            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 IDummy(zope.interface.Interface):
-    """IDummy"""
-
-class DummyObjectZ3(DummyObjectBasic):
-    zope.interface.implements(IDummy)
-    def __init__(self, name):
-        self.name = name
-
-class DummyObjectZ3WithAttr(DummyObjectZ3):
-    def meth(self):
-        """doc"""
-        return 'meth on %s' % self.name
-    def methonly(self):
-        """doc"""
-        return 'methonly on %s' % self.name
-
-class DummyView(Implicit):
-    def __init__(self, content, request):
-        self.content = content
-        self.request = request
-    def __call__(self):
-        return 'view on %s' % (self.content.name)
-
-class DummyPage(BrowserPage):
-
-    # BrowserPage is an IBrowserPublisher with a browserDefault that
-    # returns self, () so that __call__ is invoked by the publisher.
-
-    def __call__(self):
-        return 'Test page'
-
-class DummyPage2(BrowserPage):
-
-    def browserDefault(self, request):
-        # intentionally return something that's not self
-        return DummyPage(self.context, request), ()
-
-    # __call__ remains unimplemented, baseclass raises NotImplementedError
-
-class DummyPage3(BrowserPage):
-
-    def browserDefault(self, request):
-        # intentionally return a method here
-        return self.foo, ()
-
-    def foo(self):
-        return 'Test page'
-
-    # __call__ remains unimplemented, baseclass raises NotImplementedError
-
-class DummyPage4(Implicit, DummyPage):
-    # a normal page that can implicitly acquire attributes
-    pass
-
 def test_suite():
     return unittest.TestSuite((
         unittest.makeSuite(TestBaseRequest),



More information about the Zope-Checkins mailing list