[Checkins] SVN: z3c.menu.ready2go/trunk/ Started adding doc tests

Roger Ineichen roger at projekt01.ch
Mon Jan 21 06:29:30 EST 2008


Log message for revision 83054:
  Started adding doc tests

Changed:
  U   z3c.menu.ready2go/trunk/buildout.cfg
  D   z3c.menu.ready2go/trunk/externals/
  A   z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/README.txt
  A   z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/testing.py
  U   z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py

-=-
Modified: z3c.menu.ready2go/trunk/buildout.cfg
===================================================================
--- z3c.menu.ready2go/trunk/buildout.cfg	2008-01-21 10:22:11 UTC (rev 83053)
+++ z3c.menu.ready2go/trunk/buildout.cfg	2008-01-21 11:29:30 UTC (rev 83054)
@@ -1,6 +1,5 @@
 [buildout]
 develop = .
-          externals/zope.viewlet
 parts = test checker coverage
 
 [test]

Added: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/README.txt
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/README.txt	                        (rev 0)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/README.txt	2008-01-21 11:29:30 UTC (rev 83054)
@@ -0,0 +1,133 @@
+===============
+Ready 2 go Menu
+===============
+
+The z3c.menu.ready2go package provides a menu implementation which allows you 
+to implement menus based on content providers and viewlets.
+
+Let's see what this means.
+
+
+Global Menu
+-----------
+
+Let's create some menu and register them as viewlet manager:
+
+  >>> from zope.viewlet.interfaces import IViewlet
+  >>> from zope.viewlet import manager
+  >>> from z3c.menu.ready2go import interfaces
+  >>> from z3c.menu.ready2go import IGlobalMenu
+  >>> from z3c.menu.ready2go import ISiteMenu
+  >>> from z3c.menu.ready2go import IContextMenu
+  >>> from z3c.menu.ready2go import IAddMenu
+  >>> from z3c.menu.ready2go.manager import MenuManager
+
+  >>> GlobalMenu = manager.ViewletManager('left', IGlobalMenu,
+  ...     bases=(MenuManager,))
+
+  >>> SiteMenu = manager.ViewletManager('left', ISiteMenu,
+  ...     bases=(MenuManager,))
+
+  >>> ContextMenu = manager.ViewletManager('left', IContextMenu,
+  ...     bases=(MenuManager,))
+
+  >>> AddMenu = manager.ViewletManager('left', IAddMenu,
+  ...     bases=(MenuManager,))
+
+Our menu managers implement IMenuManager:
+
+  >>> interfaces.IMenuManager.implementedBy(GlobalMenu)
+  True
+
+  >>> interfaces.IMenuManager.implementedBy(SiteMenu)
+  True
+
+  >>> interfaces.IMenuManager.implementedBy(ContextMenu)
+  True
+
+  >>> interfaces.IMenuManager.implementedBy(AddMenu)
+  True
+
+Now we have to define a context:
+
+  >>> import zope.interface
+  >>> from zope.app.container import contained
+  >>> from zope.app.container.interfaces import IContained
+  >>> class Content(contained.Contained):
+  ...     zope.interface.implements(IContained)
+  >>> root['content'] = Content()
+  >>> content = root['content']
+
+  >>> from zope.publisher.browser import TestRequest
+  >>> request = TestRequest()
+
+And we need a view:
+
+  >>> from zope.publisher.interfaces.browser import IBrowserView
+  >>> class View(contained.Contained):
+  ... 
+  ...     zope.interface.implements(IBrowserView)
+  ... 
+  ...     def __init__(self, context, request):
+  ...         self.__parent__ = context
+  ...         self.context = context
+  ...         self.request = request
+
+  >>> view = View(content, request)
+
+Our menus can adapt the context, request and view:
+
+  >>> globalMenu = GlobalMenu(content, request, view)
+  >>> globalMenu.update()
+  >>> globalMenu.render()
+  u''
+
+  >>> siteMenu = SiteMenu(content, request, view)
+  >>> siteMenu.update()
+  >>> siteMenu.render()
+  u''
+
+  >>> contextMenu = ContextMenu(content, request, view)
+  >>> contextMenu.update()
+  >>> contextMenu.render()
+  u''
+
+  >>> addMenu = AddMenu(content, request, view)
+  >>> addMenu.update()
+  >>> addMenu.render()
+  u''
+
+
+Global Menu Item
+----------------
+
+
+But now we register a context menu item for the IMenu:
+
+  >>> import zope.component
+  >>> from zope.publisher.interfaces.browser import IDefaultBrowserLayer
+
+  >>> from z3c.menu.ready2go.item import GlobalMenuItem
+  >>> class RootMenuItem(GlobalMenuItem):
+  ...
+  ...     viewName = 'root.html'
+
+Now we need a security checker for our menu item
+
+  >>> from zope.security.checker import NamesChecker, defineChecker
+  >>> viewletChecker = NamesChecker(('update', 'render'))
+  >>> defineChecker(RootMenuItem, viewletChecker)
+
+  >>> zope.component.provideAdapter(
+  ...     RootMenuItem,
+  ...     (zope.interface.Interface, IDefaultBrowserLayer,
+  ...     IBrowserView, IGlobalMenu),
+  ...     IViewlet, name='RootMenuItem')
+
+Now let's render the global menu again:
+
+  >>> globalMenu.update()
+  >>> print globalMenu.render()
+  <li class="selected">
+    <a href="http://127.0.0.1/root.html"><span>RootMenuItem</span></a>
+  </li>


Property changes on: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/README.txt
___________________________________________________________________
Name: svn:eol-style
   + native

Added: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/testing.py
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/testing.py	                        (rev 0)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/testing.py	2008-01-21 11:29:30 UTC (rev 83054)
@@ -0,0 +1,47 @@
+##############################################################################
+#
+# Copyright (c) 2005 Zope Foundation 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.
+#
+##############################################################################
+"""
+$Id: tests.py 82943 2008-01-18 10:01:06Z rogerineichen $
+"""
+__docformat__ = 'restructuredtext'
+
+import zope.security
+from zope.app.testing import setup, ztapi
+
+
+class TestParticipation(object):
+    principal = 'foobar'
+    interaction = None
+
+
+def setUp(test):
+    root = setup.placefulSetUp(site=True)
+    test.globs['root'] = root
+
+
+    # resource namespace setup
+    from zope.traversing.interfaces import ITraversable
+    from zope.traversing.namespace import resource
+    ztapi.provideAdapter(None, ITraversable, resource, name="resource")
+    ztapi.provideView(None, None, ITraversable, "resource", resource)
+
+    from zope.app.pagetemplate import metaconfigure
+    from zope.contentprovider import tales
+    metaconfigure.registerType('provider', tales.TALESProviderExpression)
+
+    zope.security.management.getInteraction().add(TestParticipation())
+
+
+def tearDown(test):
+    setup.placefulTearDown()


Property changes on: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/testing.py
___________________________________________________________________
Name: svn:eol-style
   + native

Modified: z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py
===================================================================
--- z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py	2008-01-21 10:22:11 UTC (rev 83053)
+++ z3c.menu.ready2go/trunk/src/z3c/menu/ready2go/tests.py	2008-01-21 11:29:30 UTC (rev 83054)
@@ -18,6 +18,8 @@
 import unittest
 import zope.interface
 import zope.component
+from zope.testing import doctest
+from zope.testing.doctestunit import DocFileSuite
 from zope.traversing.browser.interfaces import IAbsoluteURL
 from zope.traversing.interfaces import IPhysicallyLocatable
 from zope.app.component import hooks
@@ -27,6 +29,7 @@
 from z3c.menu.ready2go import interfaces
 from z3c.menu.ready2go import item
 from z3c.menu.ready2go import manager
+from z3c.menu.ready2go import testing
 
 
 class ParentStub(object):
@@ -122,6 +125,10 @@
 
 def test_suite():
     return unittest.TestSuite((
+        DocFileSuite('README.txt',
+            setUp=testing.setUp, tearDown=testing.tearDown,
+            optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS,
+            ),
         unittest.makeSuite(MenuManagerTest),
         unittest.makeSuite(GlobalMenuItemTest),
         unittest.makeSuite(SiteMenuItemTest),



More information about the Checkins mailing list