[Checkins] SVN: zope.browserzcml2/trunk/src/zope/browserzcml2/ Added rudimentary ftests. Probably doesn't cover all edge cases, but

Philipp von Weitershausen philikon at philikon.de
Fri Apr 21 15:54:39 EDT 2006


Log message for revision 67255:
  Added rudimentary ftests.  Probably doesn't cover all edge cases, but
  it definitely shows that pages created this way are publishable, with
  security and all that.
  

Changed:
  A   zope.browserzcml2/trunk/src/zope/browserzcml2/browserzcml2-ftesting.zcml
  A   zope.browserzcml2/trunk/src/zope/browserzcml2/ftest.txt
  A   zope.browserzcml2/trunk/src/zope/browserzcml2/ftesting.zcml
  A   zope.browserzcml2/trunk/src/zope/browserzcml2/ftests.py

-=-
Added: zope.browserzcml2/trunk/src/zope/browserzcml2/browserzcml2-ftesting.zcml
===================================================================
--- zope.browserzcml2/trunk/src/zope/browserzcml2/browserzcml2-ftesting.zcml	2006-04-21 19:53:06 UTC (rev 67254)
+++ zope.browserzcml2/trunk/src/zope/browserzcml2/browserzcml2-ftesting.zcml	2006-04-21 19:54:38 UTC (rev 67255)
@@ -0,0 +1 @@
+<include package="zope.browserzcml2" file="ftesting.zcml" />
\ No newline at end of file


Property changes on: zope.browserzcml2/trunk/src/zope/browserzcml2/browserzcml2-ftesting.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zope.browserzcml2/trunk/src/zope/browserzcml2/ftest.txt
===================================================================
--- zope.browserzcml2/trunk/src/zope/browserzcml2/ftest.txt	2006-04-21 19:53:06 UTC (rev 67254)
+++ zope.browserzcml2/trunk/src/zope/browserzcml2/ftest.txt	2006-04-21 19:54:38 UTC (rev 67255)
@@ -0,0 +1,120 @@
+Publishing browser pages
+========================
+
+Let's use the test browser and a couple demo pages to see how pages
+can be published.
+
+  >>> from zope.testbrowser.testing import Browser
+
+
+Simple pages
+------------
+
+Simple pages are just published like you would expect it from a
+browser page:
+
+  >>> browser = Browser('http://localhost/bz2-simplepage.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  I've got a Swiss Army knife
+
+Protected pages will obviously not be viewable by anonymous:
+
+  >>> browser = Browser('http://localhost/bz2-protectedpage.html')
+  Traceback (most recent call last):
+    ...
+  HTTPError: HTTP Error 401: Unauthorized
+
+Instead you'll need proper credentials:
+
+  >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+  >>> browser.open('http://localhost/bz2-protectedpage.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  I've got a Swiss Army knife
+
+
+Other factories
+---------------
+
+Page factories don't necessarily have to be classes.  For example,
+functions can serve that purpose, too.  We will still see proper
+security handling:
+
+  >>> browser = Browser('http://localhost/bz2-functionfactory.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  I've got a Swiss Army knife
+
+Now with a protected factory:
+
+  >>> browser = Browser('http://localhost/bz2-protectedfactory.html')
+  Traceback (most recent call last):
+    ...
+  HTTPError: HTTP Error 401: Unauthorized
+
+  >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+  >>> browser.open('http://localhost/bz2-protectedpage.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  I've got a Swiss Army knife
+
+
+Page with page template
+-----------------------
+
+Often, pages don't generate HTML themselves but defer to a Page
+Template, like this one:
+
+  >>> browser = Browser('http://localhost/bz2-templatepage.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  Hi, the name's MacGyver.
+
+
+Pages from templates
+--------------------
+
+If all the page really is is a Page Template, a shortcut ZCML
+directive (browser2:pageTemplate) can be used to avoid implementing an
+extra class:
+
+  >>> browser = Browser('http://localhost/bz2-pagetemplate.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  Hi, the name's MacGyver.
+
+
+Pages from class
+----------------
+
+For the convenience of certain cases, several pages can be created
+from a single class at once.  They each have different names (of
+course), but can also have different permissions.  For example, this
+one is publically viewable:
+
+  >>> browser = Browser('http://localhost/bz2-fromclass1.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  Hi, the name's MacGyver.
+
+This page created from the same class is not publically viewable:
+
+  >>> browser = Browser('http://localhost/bz2-fromclass2.html')
+  Traceback (most recent call last):
+    ...
+  HTTPError: HTTP Error 401: Unauthorized
+
+  >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw')
+  >>> browser.open('http://localhost/bz2-fromclass2.html')
+  >>> print browser.headers['status']
+  200 Ok
+  >>> print browser.contents
+  Peter Thornton


Property changes on: zope.browserzcml2/trunk/src/zope/browserzcml2/ftest.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zope.browserzcml2/trunk/src/zope/browserzcml2/ftesting.zcml
===================================================================
--- zope.browserzcml2/trunk/src/zope/browserzcml2/ftesting.zcml	2006-04-21 19:53:06 UTC (rev 67254)
+++ zope.browserzcml2/trunk/src/zope/browserzcml2/ftesting.zcml	2006-04-21 19:54:38 UTC (rev 67255)
@@ -0,0 +1,64 @@
+<configure
+    xmlns="http://namespaces.zope.org/zope"
+    xmlns:browser2="http://namespaces.zope.org/browser2"
+    >
+
+  <browser2:page
+      for="*"
+      name="bz2-simplepage.html"
+      factory="zope.browserzcml2.ftests.MacGyverPage"
+      permission="zope.Public"
+      />
+
+  <browser2:page
+      for="*"
+      name="bz2-protectedpage.html"
+      factory="zope.browserzcml2.ftests.MacGyverPage"
+      permission="zope.ManageContent"
+      />
+
+  <browser2:page
+      for="*"
+      name="bz2-functionfactory.html"
+      factory="zope.browserzcml2.ftests.makeAMacGyverPage"
+      permission="zope.Public"
+      />
+
+  <browser2:page
+      for="*"
+      name="bz2-protectedfactory.html"
+      factory="zope.browserzcml2.ftests.makeAMacGyverPage"
+      permission="zope.ManageContent"
+      />
+
+  <browser2:page
+      for="*"
+      name="bz2-templatepage.html"
+      factory="zope.browserzcml2.ftests.MacGyverTemplatePage"
+      permission="zope.Public"
+      />
+
+  <browser2:pageTemplate
+      for="*"
+      name="bz2-pagetemplate.html"
+      template="test.pt"
+      permission="zope.Public"
+      />
+
+  <browser2:pagesFromClass
+      for="*"
+      class="zope.browserzcml2.ftests.PhoenixPages"
+      >
+      <page
+          name="bz2-fromclass1.html"
+          attribute="macgyver"
+          permission="zope.Public"
+          />
+      <page
+          name="bz2-fromclass2.html"
+          attribute="pete"
+          permission="zope.ManageContent"
+          />
+  </browser2:pagesFromClass>
+
+</configure>


Property changes on: zope.browserzcml2/trunk/src/zope/browserzcml2/ftesting.zcml
___________________________________________________________________
Name: svn:eol-style
   + native

Added: zope.browserzcml2/trunk/src/zope/browserzcml2/ftests.py
===================================================================
--- zope.browserzcml2/trunk/src/zope/browserzcml2/ftests.py	2006-04-21 19:53:06 UTC (rev 67254)
+++ zope.browserzcml2/trunk/src/zope/browserzcml2/ftests.py	2006-04-21 19:54:38 UTC (rev 67255)
@@ -0,0 +1,46 @@
+##############################################################################
+#
+# Copyright (c) 2006 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Tests
+
+$Id$
+"""
+import unittest
+import zope.formlib.interfaces
+import zope.interface
+from zope.app.pagetemplate import ViewPageTemplateFile
+from zope.app.testing.functional import FunctionalDocFileSuite
+
+class MacGyverPage(zope.formlib.Page):
+    def __call__(self):
+        return u"I've got a Swiss Army knife"
+
+ at zope.interface.implementer(zope.formlib.interfaces.IPage)
+def makeAMacGyverPage(context, request):
+    return MacGyverPage(context, request)
+
+class MacGyverTemplatePage(zope.formlib.Page):
+    __call__ = ViewPageTemplateFile('test.pt')
+
+class PhoenixPages(object):
+    macgyver = ViewPageTemplateFile('test.pt')
+    def pete(self):
+        return u'Peter Thornton'
+
+def test_suite():
+    return unittest.TestSuite([
+        FunctionalDocFileSuite('ftest.txt')
+        ])
+
+if __name__ == '__main__':
+    unittest.main(defaultTest='test_suite')


Property changes on: zope.browserzcml2/trunk/src/zope/browserzcml2/ftests.py
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:eol-style
   + native



More information about the Checkins mailing list