[Checkins] SVN: plone.z3cform/trunk/plone/z3cform/t Add some tests for the traversal adapter
Martin Aspeli
optilude at gmx.net
Tue Aug 26 16:45:53 EDT 2008
Log message for revision 90363:
Add some tests for the traversal adapter
Changed:
U plone.z3cform/trunk/plone/z3cform/tests.py
A plone.z3cform/trunk/plone/z3cform/traversal.txt
-=-
Modified: plone.z3cform/trunk/plone/z3cform/tests.py
===================================================================
--- plone.z3cform/trunk/plone/z3cform/tests.py 2008-08-26 19:44:03 UTC (rev 90362)
+++ plone.z3cform/trunk/plone/z3cform/tests.py 2008-08-26 20:45:52 UTC (rev 90363)
@@ -61,8 +61,11 @@
fieldsets_txt = doctest.DocFileSuite('fieldsets/README.txt')
fieldsets_txt.layer = testing_zcml_layer
+ traversal_txt = doctest.DocFileSuite('traversal.txt')
+ traversal_txt.layer = testing_zcml_layer
+
return unittest.TestSuite([
- layout_txt, fieldsets_txt,
+ layout_txt, fieldsets_txt, traversal_txt,
doctest.DocFileSuite(
'README.txt',
@@ -83,4 +86,5 @@
'plone.z3cform.crud.crud',
setUp=testing.setUp, tearDown=testing.tearDown,
),
+
])
Added: plone.z3cform/trunk/plone/z3cform/traversal.txt
===================================================================
--- plone.z3cform/trunk/plone/z3cform/traversal.txt (rev 0)
+++ plone.z3cform/trunk/plone/z3cform/traversal.txt 2008-08-26 20:45:52 UTC (rev 90363)
@@ -0,0 +1,74 @@
+Traversal
+=========
+
+plone.z3cform allows you to traverse to a widget using the ++wiget++ namespace
+adapter on a form view. Note that widgets may need to mix in
+Acquisition.Explicit to be truly traversable in Zope 2.
+
+First, we create a simple form and context.
+
+ >>> from zope.interface import alsoProvides
+ >>> from zope.publisher.browser import TestRequest
+ >>> from zope.annotation.interfaces import IAttributeAnnotatable
+ >>> from z3c.form.interfaces import IFormLayer
+
+ >>> def make_request(form={}):
+ ... request = TestRequest()
+ ... request.form.update(form)
+ ... alsoProvides(request, IFormLayer)
+ ... alsoProvides(request, IAttributeAnnotatable)
+ ... return request
+
+ >>> from zope import interface, schema
+ >>> from z3c.form import form, field, button
+ >>> from plone.z3cform.layout import FormWrapper
+
+ >>> class MySchema(interface.Interface):
+ ... age = schema.Int(title=u"Age")
+
+ >>> from z3c.form.interfaces import IFieldsForm
+ >>> from zope.interface import implements
+ >>> class MyForm(form.Form):
+ ... implements(IFieldsForm)
+ ... fields = field.Fields(MySchema)
+ ... ignoreContext = True # don't use context to get widget data
+ ...
+ ... def update(self):
+ ... print "Updating test form"
+ ... super(MyForm, self).update()
+
+ >>> class MyFormWrapper(FormWrapper):
+ ... form = MyForm
+ ... label = u"Please enter your age"
+
+ >>> from zope.component import provideAdapter
+ >>> from zope.publisher.interfaces.browser import IBrowserRequest
+ >>> from zope.interface import Interface
+
+ >>> provideAdapter(adapts=(Interface, IBrowserRequest),
+ ... provides=Interface,
+ ... factory=MyFormWrapper,
+ ... name=u"test-form")
+
+ >>> from Acquisition import Implicit
+ >>> class Bar(Implicit):
+ ... __allow_access_to_unprotected_subobjects__ = 1
+ ... implements(Interface)
+
+ >>> from zope.component import getMultiAdapter
+ >>> context = Bar()
+ >>> request = make_request()
+
+Now, let's emulate the publisher and look up the namespace traversal
+adapter. For example, let's say we'd traversed to
+../@@test-form/++widget++age. The publisher would then do:
+
+ >>> form = getMultiAdapter((context, request), name=u"test-form")
+
+ >>> from zope.traversing.interfaces import ITraversable
+ >>> traverser = getMultiAdapter((form, request), name=u"widget")
+ >>> traverser.traverse('age', [])
+ Updating test form
+ <TextWidget 'form.widgets.age'>
+
+Please note that this point, the form has been updated, but not rendered.
\ No newline at end of file
More information about the Checkins
mailing list