[Checkins] SVN: z3c.jbot/trunk/z3c/jbot/ Test Five-support in a unit test; we don't need to tell the same (tired) story again.

Malthe Borch mborch at gmail.com
Mon Feb 8 06:56:46 EST 2010


Log message for revision 108871:
  Test Five-support in a unit test; we don't need to tell the same (tired) story again.

Changed:
  D   z3c.jbot/trunk/z3c/jbot/Five.txt
  U   z3c.jbot/trunk/z3c/jbot/tests/test_doctests.py
  A   z3c.jbot/trunk/z3c/jbot/tests/test_five.py

-=-
Deleted: z3c.jbot/trunk/z3c/jbot/Five.txt
===================================================================
--- z3c.jbot/trunk/z3c/jbot/Five.txt	2010-02-08 11:56:13 UTC (rev 108870)
+++ z3c.jbot/trunk/z3c/jbot/Five.txt	2010-02-08 11:56:45 UTC (rev 108871)
@@ -1,104 +0,0 @@
-Five compatibility tests
-========================
-
-Let's instantiate a Five page template.
-
-  >>> from Products.Five.browser.pagetemplatefile import ZopeTwoPageTemplateFile
-
-  >>> import z3c.jbot.tests
-  >>> directory = z3c.jbot.tests.__path__[0] + "/templates"
-
-To play nicely we'll put the template inside a view.
-  
-  >>> from Products.Five.browser import BrowserView
-  >>> class MockView(BrowserView):
-  ...     template = ZopeTwoPageTemplateFile("example.pt", _prefix=directory)
-
-Let's instantiate the view with a test request.
-  
-  >>> from zope.publisher.browser import TestRequest
-  >>> request = TestRequest("en")
-  >>> view = MockView(None, request)
-
-Verify that the original template is rendered.
-  
-  >>> view.template()
-  u'This is an example page template.\n'
-
-Register template overrides directory.
-  
-  >>> import z3c.jbot.manager
-  >>> import z3c.jbot.interfaces
-  
-  >>> factory = z3c.jbot.manager.TemplateManagerFactory('z3c.jbot.tests.templates')
-  >>> component.provideAdapter(
-  ...     factory, (interface.Interface,), z3c.jbot.interfaces.ITemplateManager)
-
-  >>> manager = factory.manager
-  >>> manager.registerDirectory(directory)
-
-Verify that the override is rendered.
-  
-  >>> view.template()
-  u'This template will override the example template.\n'
-
-  >>> manager.unregisterDirectory(directory)
-
-Register override for HTTP-request layer.
-
-  >>> from zope.publisher.interfaces.browser import IHTTPRequest
-  >>> factory = z3c.jbot.manager.TemplateManagerFactory('z3c.jbot.tests.templates')
-  >>> component.provideAdapter(
-  ...     factory, (IHTTPRequest,),
-  ...     z3c.jbot.interfaces.ITemplateManager, name='http')
-
-  >>> manager = factory.manager
-  >>> manager.registerDirectory(directory)
-  
-  >>> view.template()
-  u'This is an example page template.\n'
-
-On Zope 2, the request is acquired from the site as set by the
-component site hook.
-  
-  >>> from zope.publisher.browser import TestRequest
-  >>> class MockSite(object):
-  ...     REQUEST = TestRequest()
-  ...     getSiteManager = component.getSiteManager
-  
-  >>> from zope.app.component.hooks import setHooks, setSite
-  >>> setHooks()
-  >>> setSite(MockSite())
-
-Examine the request.
-  
-  >>> import z3c.jbot.utility
-  >>> z3c.jbot.utility.getRequest()
-  <zope.publisher.browser.TestRequest ...>
-
-  >>> managers = tuple(z3c.jbot.utility.getManagers())
-  >>> len(managers)
-  2
-
-Verify that template attributes are set per request layer.
-
-  >>> view.template._v_last_read is not False
-  True
-
-  >>> class ISpecificLayer(interface.Interface):
-  ...     pass
-
-  >>> interface.alsoProvides(MockSite.REQUEST, ISpecificLayer)
-  >>> view.template._v_last_read = False
-  >>> view.template._v_last_read is False
-  True
-
-No longer providing this layer, we expect an attribute lookup to
-return the value that was set before the layer was provided.
-  
-  >>> interface.noLongerProvides(MockSite.REQUEST, ISpecificLayer)
-  >>> view.template._v_cache.layer = z3c.jbot.utility.getLayer()
-  >>> view.template._v_last_read is not False
-  True  
-  
-

Modified: z3c.jbot/trunk/z3c/jbot/tests/test_doctests.py
===================================================================
--- z3c.jbot/trunk/z3c/jbot/tests/test_doctests.py	2010-02-08 11:56:13 UTC (rev 108870)
+++ z3c.jbot/trunk/z3c/jbot/tests/test_doctests.py	2010-02-08 11:56:45 UTC (rev 108871)
@@ -9,24 +9,18 @@
 import zope.component.testing
 
 def test_suite():
-    doctests = ['README.txt']
     globs = dict(
         interface=zope.interface,
         component=zope.component)
-    
-    try:
-        import Products.Five
-        doctests.append('Five.txt')
-    except:
-        pass
-    
+
     return unittest.TestSuite((
-        zope.testing.doctest.DocFileSuite(doctest,
-                                          optionflags=OPTIONFLAGS,
-                                          setUp=zope.component.testing.setUp,
-                                          tearDown=zope.component.testing.tearDown,
-                                          globs=globs,
-                                          package="z3c.jbot") for doctest in doctests
+        zope.testing.doctest.DocFileSuite(
+            'README.txt',
+            optionflags=OPTIONFLAGS,
+            setUp=zope.component.testing.setUp,
+            tearDown=zope.component.testing.tearDown,
+            globs=globs,
+            package="z3c.jbot"),
         ))
 
 if __name__ == '__main__':

Added: z3c.jbot/trunk/z3c/jbot/tests/test_five.py
===================================================================
--- z3c.jbot/trunk/z3c/jbot/tests/test_five.py	                        (rev 0)
+++ z3c.jbot/trunk/z3c/jbot/tests/test_five.py	2010-02-08 11:56:45 UTC (rev 108871)
@@ -0,0 +1,85 @@
+import unittest
+
+class FiveTests(unittest.TestCase):
+    def setUp(self):
+        import zope.component.testing
+        zope.component.testing.setUp(self)
+
+        from Products.Five.browser.pagetemplatefile import \
+             ZopeTwoPageTemplateFile as Template
+
+        from Products.Five.browser import BrowserView
+        class MockView(BrowserView):
+            template = Template(
+                "templates/example.pt")
+            interface_override = Template(
+                "overrides/interface/z3c.jbot.tests.templates.example.pt")
+            http_override = Template(
+                "overrides/http/z3c.jbot.tests.templates.example.pt")
+            https_override = Template(
+                "overrides/https/z3c.jbot.tests.templates.example.pt")
+
+        # set up mock site and request
+        from zope.publisher.browser import TestRequest
+        class MockSite(object):
+            REQUEST = TestRequest("en")
+            getSiteManager = zope.component.getSiteManager
+        from zope.app.component.hooks import setHooks, setSite
+        setHooks()
+        setSite(MockSite())
+        self._request = MockSite.REQUEST
+
+        # render templates for later comparison
+        view = self._view = MockView(None, MockSite.REQUEST)
+        self._original = view.template()
+        self._interface_override = view.interface_override()
+        self._http_override = view.http_override()
+        self._https_override = view.https_override()
+
+        import z3c.jbot.tests
+        self._tests = z3c.jbot.tests.__path__[0]
+
+    def tearDown(self):
+        import zope.component.testing
+        zope.component.testing.tearDown(self)
+
+    def test_override_for_interface(self):
+        from z3c.jbot.metaconfigure import handler
+        from zope import interface
+        manager = handler(
+            "%s/overrides/interface" % self._tests, interface.Interface)
+        self.assertEqual(self._view.template(), self._interface_override)
+
+    def test_override_for_httprequest(self):
+        from z3c.jbot.metaconfigure import handler
+        from zope import interface
+        from zope.publisher.interfaces.browser import IHTTPRequest
+
+        class IHTTPSRequest(IHTTPRequest):
+            pass
+
+        # register handlers
+        general = handler(
+            "%s/overrides/interface" % self._tests, interface.Interface)
+        http = handler(
+            "%s/overrides/https" % self._tests, IHTTPSRequest)
+
+        # we get the general override
+        self.assertEqual(self._view.template(), self._interface_override)
+
+        # provide the http layer
+        from zope.interface import alsoProvides
+        alsoProvides(self._request, IHTTPSRequest)
+        self.assertEqual(self._view.template(), self._https_override)
+
+        # revert to general override
+        from zope.interface import noLongerProvides
+        noLongerProvides(self._request, IHTTPSRequest)
+        self.assertEqual(self._view.template(), self._interface_override)
+
+def test_suite():
+    return unittest.TestSuite((
+        unittest.makeSuite(FiveTests),))
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')



More information about the checkins mailing list