[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