[Checkins] SVN: z3ext.layoutform/trunk/ update tests
Nikolay Kim
fafhrd at datacom.kz
Mon Dec 22 11:10:00 EST 2008
Log message for revision 94247:
update tests
Changed:
U z3ext.layoutform/trunk/buildout.cfg
U z3ext.layoutform/trunk/src/z3ext/layoutform/form.py
A z3ext.layoutform/trunk/src/z3ext/layoutform/tests/form.txt
U z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml
U z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py
-=-
Modified: z3ext.layoutform/trunk/buildout.cfg
===================================================================
--- z3ext.layoutform/trunk/buildout.cfg 2008-12-22 16:06:58 UTC (rev 94246)
+++ z3ext.layoutform/trunk/buildout.cfg 2008-12-22 16:10:00 UTC (rev 94247)
@@ -1,6 +1,5 @@
[buildout]
develop = .
- externals/z3ext.layout
parts = test coverage-test coverage-report i18n i18nall i18ncheck i18ndude
[test]
Modified: z3ext.layoutform/trunk/src/z3ext/layoutform/form.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/form.py 2008-12-22 16:06:58 UTC (rev 94246)
+++ z3ext.layoutform/trunk/src/z3ext/layoutform/form.py 2008-12-22 16:10:00 UTC (rev 94247)
@@ -63,27 +63,15 @@
def extractData(self):
data, errors = super(PageletForm, self).extractData()
for form in self.groups:
- if not IForm.providedBy(form):
- continue
-
formData, formErrors = form.extractData()
data.update(formData)
if formErrors:
- if errors:
- errors += formErrors
- else:
- errors = formErrors
+ errors += formErrors
for form in self.subforms:
- if not IForm.providedBy(form):
- continue
-
formData, formErrors = form.extractData()
if formErrors:
- if errors:
- errors += formErrors
- else:
- errors = formErrors
+ errors += formErrors
return data, errors
Added: z3ext.layoutform/trunk/src/z3ext/layoutform/tests/form.txt
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/tests/form.txt (rev 0)
+++ z3ext.layoutform/trunk/src/z3ext/layoutform/tests/form.txt 2008-12-22 16:10:00 UTC (rev 94247)
@@ -0,0 +1,298 @@
+===========
+PageletForm
+===========
+
+ >>> from zope import interface, component, schema
+ >>> from zope.app.testing.functional import getRootFolder
+ >>> root = getRootFolder()
+ >>> sm = component.getSiteManager()
+
+ >>> class IPerson(interface.Interface):
+ ...
+ ... name = schema.TextLine(
+ ... title=u'Name',
+ ... missing_value = u'',
+ ... required=True)
+ ...
+ ... age = schema.Int(
+ ... title=u'Age',
+ ... description=u"The person's age.",
+ ... min=0,
+ ... default=20,
+ ... required=False)
+
+ >>> from z3c.form import group, button
+ >>> from z3ext.layoutform import interfaces, subform
+ >>> from z3ext.layoutform import Fields, PageletForm
+
+ >>> class PersonForm(PageletForm):
+ ...
+ ... ignoreContext = True
+ ... fields = Fields(IPerson)
+ ...
+ ... @button.buttonAndHandler(u'Save', name='save',
+ ... provides=interfaces.ISaveAction)
+ ... def handleSave(self, action):
+ ... pass
+
+Let's create a request:
+
+ >>> from z3c.form.testing import TestRequest
+ >>> request = TestRequest()
+
+And support the layout form layer for our request:
+
+ >>> from z3ext.layoutform.interfaces import ILayoutFormLayer
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+Now create the form:
+
+ >>> form = PersonForm(root, request)
+
+Let's now render the page. Note the output doesn't contain the layout template:
+
+ >>> form.update()
+ >>> print form.render()
+ <div class="z-form z-form-standard"><form action="http://127.0.0.1" method="post"
+ enctype="multipart/form-data" name="form" id="form">
+ <div class="z-form-fieldset">
+ <div class="z-form-field">
+ <label for="form-widgets-name" title="">Name</label>
+ <span class="z-form-fieldRequired"> </span>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-name"
+ name="form.widgets.name"
+ class="text-widget required textline-field" value="" />
+ </div>
+ </div>
+ <div class="z-form-field">
+ <label for="form-widgets-age" title="The person's age.">Age</label>
+ <div class="z-form-help">The person's age.</div>
+ <div><input type="text" id="form-widgets-age"
+ name="form.widgets.age" class="text-widget int-field"
+ value="20" />
+ </div>
+ </div>
+ </div>
+ <div class="z-form-controls">
+ <span>
+ <hr />
+ <input type="submit" id="form-buttons-save"
+ name="form.buttons.save"
+ class="z-form-savebutton button-field" value="Save" />
+ </span>
+ </div>
+ </form>
+ </div>
+
+Subforms
+
+ >>> class IPersonEducation(interface.Interface):
+ ...
+ ... education = schema.TextLine(
+ ... title = u'Education',
+ ... default = u'',
+ ... required = False)
+
+Group
+
+
+ >>> class PersonEducation(group.Group):
+ ... interface.implements(interfaces.IPageletSubform)
+ ...
+ ... weight = 10
+ ... fields = Fields(IPersonEducation)
+ ... ignoreContext = True
+ ...
+ ... def __init__(self, context, form, request):
+ ... super(PersonEducation, self).__init__(context, request, form)
+ ...
+ ... def isAvailable(self):
+ ... return True
+ ...
+ ... def postUpdate(self):
+ ... pass
+
+ >>> form.groups
+ []
+
+ >>> component.getSiteManager().registerAdapter(
+ ... PersonEducation, (interface.Interface, PersonForm, interface.Interface),
+ ... interfaces.IPageletSubform, name='edu')
+
+ >>> form.update()
+
+ >>> print form.groups
+ [<PersonEducation ...>]
+
+ >>> print form.render()
+ <div class="z-form z-form-standard"><form action="http://127.0.0.1" method="post"
+ enctype="multipart/form-data" name="form" id="form">
+ <div class="z-form-fieldset">
+ <div class="z-form-field">
+ <label for="form-widgets-name" title="">Name</label>
+ <span class="z-form-fieldRequired"> </span>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-name"
+ name="form.widgets.name"
+ class="text-widget required textline-field" value="" />
+ </div>
+ </div>
+ <div class="z-form-field">
+ <label for="form-widgets-age" title="The person's age.">Age</label>
+ <div class="z-form-help">The person's age.</div>
+ <div><input type="text" id="form-widgets-age"
+ name="form.widgets.age" class="text-widget int-field"
+ value="20" />
+ </div>
+ </div>
+ </div>
+ <div class="z-form-group">
+ <div class="z-form-fieldset">
+ <div class="z-form-field">
+ <label for="form-widgets-education" title="">Education</label>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-education"
+ name="form.widgets.education"
+ class="text-widget textline-field" value="" />
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="z-form-controls">
+ <span>
+ <hr />
+ <input type="submit" id="form-buttons-save"
+ name="form.buttons.save"
+ class="z-form-savebutton button-field" value="Save" />
+ </span>
+ </div>
+ </form>
+ </div>
+
+Subform
+
+ >>> class IPersonInfo(interface.Interface):
+ ...
+ ... info = schema.Text(
+ ... title=u'Information',
+ ... default = u'',
+ ... required=False)
+
+ >>> class PersonInfo(subform.PageletEditSubForm):
+ ... interface.implements(interfaces.IPageletSubform)
+ ...
+ ... weight = 10
+ ... fields = Fields(IPersonInfo)
+ ... ignoreContext = True
+ ...
+ ... def getContent(self):
+ ... return {}
+
+ >>> form.subforms
+ []
+
+ >>> component.getSiteManager().registerAdapter(
+ ... PersonInfo, (interface.Interface, PersonForm, interface.Interface),
+ ... interfaces.IPageletSubform, name='info')
+
+ >>> form.update()
+
+ >>> print form.subforms
+ [<PersonInfo ...>]
+
+ >>> print form.render()
+ <div class="z-form z-form-standard">...
+ ...
+ <label for="form-widgets-info" title="">Information</label>
+ <div class="z-form-help"></div>
+ <div><textarea id="form-widgets-info" name="form.widgets.info"
+ class="textarea-widget text-field" rows="5"></textarea>
+ </div>
+ ...
+ </div>
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': 'University',
+ ... 'form.widgets.info': 'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+ >>> form.extractData()
+ ({'age': 50}, (<ErrorViewSnippet for RequiredMissing>, <ErrorViewSnippet for WrongType>, <ErrorViewSnippet for WrongType>))
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': u'University',
+ ... 'form.widgets.info': u'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+ >>> data = form.extractData()
+ >>> print form.render()
+ <div class="z-form z-form-standard">...
+ ...
+ <div class="z-form-field error">
+ <label for="form-widgets-name" title="">Name</label>
+ <span class="z-form-fieldRequired"> </span>
+ <div class="error">Required input is missing.</div>
+ <div class="z-form-help"></div>
+ <div><input type="text" id="form-widgets-name"
+ name="form.widgets.name"
+ class="text-widget required textline-field" value="" />
+ </div>
+ </div>
+ ...
+ </div>
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'Nikolay',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': u'University',
+ ... 'form.widgets.info': u'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+ >>> form.extractData()
+ ({'age': 50, 'education': u'University', 'name': u'Nikolay'}, ())
+
+
+ >>> class IItem(interface.Interface):
+ ...
+ ... title = schema.TextLine(
+ ... title = u'Title',
+ ... required = True)
+
+
+ >>> class ItemForm(PageletForm):
+ ... prefix = 'title.'
+ ... fields = Fields(IItem)
+ ... ignoreContext = True
+ ... weight = 0
+
+ >>> component.getSiteManager().registerAdapter(
+ ... ItemForm, (interface.Interface, PersonForm, interface.Interface),
+ ... interfaces.IPageletSubform, name='item')
+
+ >>> request = TestRequest(
+ ... form={'form.widgets.name': u'Nikolay',
+ ... 'form.widgets.age': u'50',
+ ... 'form.widgets.education': u'University',
+ ... 'form.widgets.info': u'info',
+ ... 'form.buttons.save': u'Save'})
+ >>> interface.alsoProvides(request, ILayoutFormLayer)
+
+ >>> form = PersonForm(root, request)
+ >>> form.update()
+
+ >>> form.forms
+ [<ItemForm object ...>]
+
Modified: z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml 2008-12-22 16:06:58 UTC (rev 94246)
+++ z3ext.layoutform/trunk/src/z3ext/layoutform/tests/ftesting.zcml 2008-12-22 16:10:00 UTC (rev 94247)
@@ -10,5 +10,6 @@
<include package="z3c.autoinclude" file="meta.zcml" />
<include package="z3ext.layoutform" />
+ <adapter factory="z3ext.statusmessage.tests.tests.getSession" />
</configure>
Modified: z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py
===================================================================
--- z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py 2008-12-22 16:06:58 UTC (rev 94246)
+++ z3ext.layoutform/trunk/src/z3ext/layoutform/tests/tests.py 2008-12-22 16:10:00 UTC (rev 94247)
@@ -25,9 +25,14 @@
def test_suite():
+ form = FunctionalDocFileSuite(
+ "form.txt",
+ optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
+ form.layer = layoutformLayer
+
tests = FunctionalDocFileSuite(
"tests.txt",
optionflags=doctest.ELLIPSIS|doctest.NORMALIZE_WHITESPACE)
tests.layer = layoutformLayer
- return unittest.TestSuite((tests,))
+ return unittest.TestSuite((form, tests,))
More information about the Checkins
mailing list