[Checkins] SVN: z3c.formdemo/trunk/ - Feature: Created functional
tests for the demos.
Stephan Richter
srichter at cosmos.phy.tufts.edu
Mon Jul 2 09:19:03 EDT 2007
Log message for revision 77305:
- Feature: Created functional tests for the demos.
- Feature: Moved all application ZCML declarations into a ZCML file
called ``application.zcml``.
Changed:
U z3c.formdemo/trunk/CHANGES.txt
U z3c.formdemo/trunk/buildout.cfg
U z3c.formdemo/trunk/setup.py
A z3c.formdemo/trunk/src/z3c/formdemo/application.zcml
U z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt
A z3c.formdemo/trunk/src/z3c/formdemo/ftesting.zcml
U z3c.formdemo/trunk/src/z3c/formdemo/layer.py
A z3c.formdemo/trunk/src/z3c/formdemo/message/README.txt
A z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/README.txt
A z3c.formdemo/trunk/src/z3c/formdemo/testing.py
A z3c.formdemo/trunk/src/z3c/formdemo/tests.py
A z3c.formdemo/trunk/src/z3c/formdemo/widgets/README.txt
-=-
Modified: z3c.formdemo/trunk/CHANGES.txt
===================================================================
--- z3c.formdemo/trunk/CHANGES.txt 2007-07-02 13:16:15 UTC (rev 77304)
+++ z3c.formdemo/trunk/CHANGES.txt 2007-07-02 13:19:02 UTC (rev 77305)
@@ -2,6 +2,14 @@
CHANGES
=======
+Version 1.3.0 (6/29/2007)
+-------------------------
+
+- Feature: Created functional tests for the demos.
+
+- Feature: Moved all application ZCML declarations into a ZCML file called
+ ``application.zcml``.
+
Version 1.2.0 (6/29/2007)
-------------------------
Modified: z3c.formdemo/trunk/buildout.cfg
===================================================================
--- z3c.formdemo/trunk/buildout.cfg 2007-07-02 13:16:15 UTC (rev 77304)
+++ z3c.formdemo/trunk/buildout.cfg 2007-07-02 13:19:02 UTC (rev 77305)
@@ -1,76 +1,17 @@
[buildout]
-develop = .
-parts = demo
+develop = . z3c.form z3c.formui
+parts = demo test
+[test]
+recipe = zc.recipe.testrunner
+eggs = z3c.formdemo [app, test]
+
[zope3]
location = .
[form-demo-app]
recipe = zc.zope3recipes:app
-site.zcml = <configure
- xmlns="http://namespaces.zope.org/zope"
- xmlns:browser="http://namespaces.zope.org/browser"
- i18n_domain="demo">
- <include package="zope.app.component" file="meta.zcml" />
- <include package="zope.app.component.browser" file="meta.zcml" />
- <include package="zope.app.form.browser" file="meta.zcml" />
- <include package="zope.app.pagetemplate" file="meta.zcml" />
- <include package="zope.app.publication" file="meta.zcml" />
- <include package="zope.app.publisher" file="meta.zcml" />
- <include package="zope.app.security" file="meta.zcml" />
- <include package="zope.app.securitypolicy" file="meta.zcml" />
- <include package="zope.rdb" file="meta.zcml" />
- <include package="zope.viewlet" file="meta.zcml" />
- <include package="z3c.form" file="meta.zcml" />
- <include package="z3c.macro" file="meta.zcml" />
- <include package="z3c.pagelet" file="meta.zcml" />
- <include package="z3c.template" file="meta.zcml" />
- <include package="z3c.zrtresource" file="meta.zcml" />
- <include package="zc.resourcelibrary" file="meta.zcml" />
-
- <browser:menu id="zmi_views" title="Views" />
- <browser:menu id="zmi_actions" title="Actions" />
-
- <include package="zope.app.appsetup" />
- <include package="zope.app.component" />
- <include package="zope.app.container" />
- <include package="zope.app.error" />
- <include package="zope.app.i18n" />
- <include package="zope.app.publication" />
- <include package="zope.app.security" />
- <include package="zope.app.securitypolicy" />
- <include package="zope.app.session" />
- <include package="zope.app.twisted" />
- <include package="zope.app.wsgi" />
- <include package="zope.annotation" />
- <include package="zope.component" />
- <include package="zope.contentprovider" />
- <include package="zope.location" />
- <include package="zope.publisher" />
- <include package="zope.rdb" />
- <include package="zope.traversing" />
- <include package="zope.traversing.browser" />
- <include package="zope.viewlet" />
-
- <include package="z3c.form" />
- <include package="z3c.formui" />
- <include package="z3c.formdemo" />
- <include package="z3c.layer.pagelet" />
- <include package="z3c.macro" />
- <include package="z3c.pagelet" />
-
- <include package="zc.resourcelibrary" />
- <include package="zc.table" />
-
- <browser:defaultView name="index.html" />
- <browser:defaultSkin name="Z3CFormDemo" />
-
- <securityPolicy
- component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
-
- <role id="zope.Anonymous" title="Everybody" />
- <grantAll role="zope.Anonymous" />
- </configure>
+site.zcml = <include package="z3c.formdemo" file="application.zcml" />
eggs = z3c.formdemo [app]
[demo]
Modified: z3c.formdemo/trunk/setup.py
===================================================================
--- z3c.formdemo/trunk/setup.py 2007-07-02 13:16:15 UTC (rev 77304)
+++ z3c.formdemo/trunk/setup.py 2007-07-02 13:19:02 UTC (rev 77305)
@@ -64,6 +64,8 @@
'zope.app.wsgi',
'zope.contentprovider',
],
+ test = ['z3c.etestbrowser',
+ 'zope.app.testing'],
),
install_requires = [
'setuptools',
Added: z3c.formdemo/trunk/src/z3c/formdemo/application.zcml
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/application.zcml (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/application.zcml 2007-07-02 13:19:02 UTC (rev 77305)
@@ -0,0 +1,65 @@
+<configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:browser="http://namespaces.zope.org/browser"
+ i18n_domain="demo">
+
+ <include package="zope.app.component" file="meta.zcml" />
+ <include package="zope.app.component.browser" file="meta.zcml" />
+ <include package="zope.app.form.browser" file="meta.zcml" />
+ <include package="zope.app.pagetemplate" file="meta.zcml" />
+ <include package="zope.app.publication" file="meta.zcml" />
+ <include package="zope.app.publisher" file="meta.zcml" />
+ <include package="zope.app.security" file="meta.zcml" />
+ <include package="zope.app.securitypolicy" file="meta.zcml" />
+ <include package="zope.rdb" file="meta.zcml" />
+ <include package="zope.viewlet" file="meta.zcml" />
+ <include package="z3c.form" file="meta.zcml" />
+ <include package="z3c.macro" file="meta.zcml" />
+ <include package="z3c.pagelet" file="meta.zcml" />
+ <include package="z3c.template" file="meta.zcml" />
+ <include package="z3c.zrtresource" file="meta.zcml" />
+ <include package="zc.resourcelibrary" file="meta.zcml" />
+
+ <browser:menu id="zmi_views" title="Views" />
+ <browser:menu id="zmi_actions" title="Actions" />
+
+ <include package="zope.app.appsetup" />
+ <include package="zope.app.component" />
+ <include package="zope.app.container" />
+ <include package="zope.app.error" />
+ <include package="zope.app.i18n" />
+ <include package="zope.app.publication" />
+ <include package="zope.app.security" />
+ <include package="zope.app.securitypolicy" />
+ <include package="zope.app.session" />
+ <include package="zope.app.twisted" />
+ <include package="zope.app.wsgi" />
+ <include package="zope.annotation" />
+ <include package="zope.component" />
+ <include package="zope.contentprovider" />
+ <include package="zope.location" />
+ <include package="zope.publisher" />
+ <include package="zope.rdb" />
+ <include package="zope.traversing" />
+ <include package="zope.traversing.browser" />
+ <include package="zope.viewlet" />
+
+ <include package="z3c.form" />
+ <include package="z3c.formui" />
+ <include package="z3c.formdemo" />
+ <include package="z3c.layer.pagelet" />
+ <include package="z3c.macro" />
+ <include package="z3c.pagelet" />
+
+ <include package="zc.resourcelibrary" />
+ <include package="zc.table" />
+
+ <browser:defaultView name="index.html" />
+ <browser:defaultSkin name="Z3CFormDemo" />
+
+ <securityPolicy
+ component="zope.app.securitypolicy.zopepolicy.ZopeSecurityPolicy" />
+
+ <role id="zope.Anonymous" title="Everybody" />
+ <grantAll role="zope.Anonymous" />
+</configure>
Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/application.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt 2007-07-02 13:16:15 UTC (rev 77304)
+++ z3c.formdemo/trunk/src/z3c/formdemo/browser/index.pt 2007-07-02 13:19:02 UTC (rev 77305)
@@ -3,45 +3,43 @@
<div class="demo">
<h4>Div based layout</h4>
<div>
- <a href="../++skin++Z3CFormDemo/addHelloWorld.html">Hello World</a>
+ <a href="/addHelloWorld.html">Hello World</a>
</div>
<div>
- <a href="../++skin++Z3CFormDemo/widgets.html">All widgets</a>
+ <a href="/widgets.html">All widgets</a>
</div>
<div>
- <a href="../++skin++Z3CFormDemo/questionnaireResults.html">
- Questionnaire
- </a>
+ <a href="/questionnaireResults.html">Questionnaire</a>
</div>
<h4>Table based layout</h4>
<div>
- <a href="../++skin++Z3CTableFormDemo/addHelloWorld.html">Hello World</a>
+ <a href="/++skin++Z3CTableFormDemo/addHelloWorld.html">Hello World</a>
</div>
<div>
- <a href="../++skin++Z3CTableFormDemo/widgets.html">All widgets</a>
+ <a href="/++skin++Z3CTableFormDemo/widgets.html">All widgets</a>
</div>
<div>
- <a href="../++skin++Z3CTableFormDemo/questionnaireResults.html">
+ <a href="/++skin++Z3CTableFormDemo/questionnaireResults.html">
Questionnaire
</a>
</div>
<h4>Advanced Demos</h4>
<div>
- <a href="../++skin++Z3CFormDemo/calculator.html">Calculator</a>
+ <a href="/calculator.html">Calculator</a>
</div>
<div>
- <a href="../++skin++Z3CFormDemo/wizard.html">Wizard</a>
+ <a href="/wizard.html">Wizard</a>
</div>
<div>
- <a href="../++skin++Z3CFormDemo/spreadsheet.html">Spreadsheet</a>
+ <a href="/spreadsheet.html">Spreadsheet</a>
</div>
<div>
- <a href="../++skin++Z3CFormDemo/addressbook.html">Address Book</a>
+ <a href="/addressbook.html">Address Book</a>
</div>
<div>
- <a href="../++skin++Z3CFormDemo/showAllSQLHelloWorld.html">
+ <a href="/showAllSQLHelloWorld.html">
SQL Hello World
</a>
</div>
Added: z3c.formdemo/trunk/src/z3c/formdemo/ftesting.zcml
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/ftesting.zcml (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/ftesting.zcml 2007-07-02 13:19:02 UTC (rev 77305)
@@ -0,0 +1 @@
+<include file="application.zcml" />
Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/ftesting.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: z3c.formdemo/trunk/src/z3c/formdemo/layer.py
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/layer.py 2007-07-02 13:16:15 UTC (rev 77304)
+++ z3c.formdemo/trunk/src/z3c/formdemo/layer.py 2007-07-02 13:19:02 UTC (rev 77305)
@@ -14,6 +14,7 @@
"""
$Id$
"""
+__docformat__ = "reStructuredText"
from z3c.form.interfaces import IFormLayer
from z3c.layer.pagelet import IPageletBrowserLayer
Added: z3c.formdemo/trunk/src/z3c/formdemo/message/README.txt
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/message/README.txt (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/message/README.txt 2007-07-02 13:19:02 UTC (rev 77305)
@@ -0,0 +1,90 @@
+========================
+Hello World Message Demo
+========================
+
+The "Hello World Message" demo is intended to demonstrate the most minimal
+setup required to get add, edit and display to work.
+
+To start, we need to open a browser and go to the demo applications overview
+screen:
+
+ >>> from z3c.formdemo import testing
+ >>> from z3c.etestbrowser.testing import ExtendedTestBrowser
+ >>> user = ExtendedTestBrowser()
+ >>> user.addHeader('Accept-Language', 'en')
+ >>> user.open('http://localhost:8080')
+
+Since all demos are purely public, there is no need to log in. Let's now click
+on the "Hello World" link:
+
+ >>> user.getLink('Hello World').click()
+
+You are now represented with the message add form.
+
+ >>> user.url
+ 'http://localhost:8080/addHelloWorld.html'
+
+If we submit the form by clicking on add, ...
+
+ >>> user.getControl('Add').click()
+
+... the same page returns telling us we have some errors:
+
+ >>> testing.printElement(user, "//div[@class='summary']")
+ <div class="summary">There were some errors.</div>
+
+This is because we forgot to enter the "Who" field, which is required:
+
+ >>> testing.printElement(user, "//ul[@class='errors']/li")
+ <li>
+ Who: <div class="error">Required input is missing.</div>
+ </li>
+
+Let's now fill out all the required fields and try to add the message again:
+
+ >>> user.getControl('Who').value = u'Stephan'
+ >>> user.getControl('When').value = u'7/1/07'
+ >>> user.getControl('Add').click()
+
+Once submitted, the message is now added to the database and the display view
+is shown:
+
+ >>> testing.printElement(user, "//h1")
+ <h1>
+ A cool Hello World from Stephan on 7/1/07 !
+ </h1>
+
+The message's edit form can be accessed by clicking on the "Edit Message"
+link:
+
+ >>> user.getLink('Edit Message').click()
+
+When immediately pressing "Apply", a message appears telling us that no data
+has been changed:
+
+ >>> user.getControl('Apply', index=0).click()
+ >>> testing.printElement(user, "//div[@class='summary']")
+ <div class="summary">No changes were applied.</div>
+
+Let's now change the name and submit the form:
+
+ >>> user.getControl('Who').value = u'Roger'
+ >>> user.getControl('Apply', index=0).click()
+
+The now informs us that the data has been updated:
+
+ >>> testing.printElement(user, "//div[@class='summary']")
+ <div class="summary">Data successfully updated.</div>
+
+When pressing the "Apply and View" button, the changed data is stored and the
+user is also forwarded to the view page again:
+
+ >>> user.getControl('What').getControl('best').click()
+ >>> user.getControl('Apply and View').click()
+
+Of course, the view shows the latest data:
+
+ >>> testing.printElement(user, "//h1")
+ <h1>
+ A best Hello World from Roger on 7/1/07 !
+ </h1>
Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/message/README.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/README.txt
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/README.txt (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/README.txt 2007-07-02 13:19:02 UTC (rev 77305)
@@ -0,0 +1,153 @@
+==================
+Questionnaire Demo
+==================
+
+The purpose of the questionnaire demo is demonstrate the concept of field
+groups and attribute value adapters for fields.
+
+To start, we need to open a browser and go to the demo applications overview
+screen:
+
+ >>> from z3c.formdemo import testing
+ >>> from z3c.etestbrowser.testing import ExtendedTestBrowser
+ >>> user = ExtendedTestBrowser()
+ >>> user.addHeader('Accept-Language', 'en')
+ >>> user.open('http://localhost:8080')
+
+Since all demos are purely public, there is no need to log in. Let's now click
+on the "All widgets" link:
+
+ >>> user.getLink('Questionnaire').click()
+
+The first screen you see is the questionnaire results screen.
+
+ >>> testing.printElement(user, "//h1")
+ <h1>Zope Developer Questionnaire Results</h1>
+
+Initially there are no questionnaires, so the screen contains little
+information. Let's first fill out a questionnaire by click on the link below
+the table.
+
+ >>> user.getLink('Fill out Questionnaire').click()
+
+The user is now presented with the questionnaire screen, which is organized
+into three groups. Let's fill out the questionnaire:
+
+ >>> user.getControl('Name').value = u'Stephan Richter'
+ >>> user.getControl('Age').value = u'27'
+
+ >>> user.getControl('yes', index=0).click()
+ >>> user.getControl('no', index=1).click()
+ >>> user.getControl('yes', index=2).click()
+ >>> user.getControl('no', index=3).click()
+
+ >>> user.getControl('yes', index=4).click()
+ >>> user.getControl('have you contributed').value = u'5'
+ >>> user.getControl('What is your Zope Id?').value = u'srichter'
+
+ >>> user.getControl('Submit Questionnaire').click()
+
+Once the questionnaire has been submitted, the user is returned to the results
+screen. Now the table has an entry:
+
+ >>> testing.printElement(user, "//table/tbody/tr[1]")
+ <tr class="odd"><td
+ class="sorted-on">
+ Stephan Richter
+ </td>
+ <td class="right">
+ 27
+ </td>
+ <td class="right">
+ yes
+ </td>
+ <td class="right">
+ no
+ </td>
+ <td class="right">
+ yes
+ </td>
+ <td class="right">
+ no
+ </td>
+ <td class="right">
+ yes
+ </td>
+ <td class="right">
+ 5
+ </td>
+ <td class="right">
+ srichter
+ </td>
+ </tr>
+
+Let's now fill out another questionnaire:
+
+ >>> user.getLink('Fill out Questionnaire').click()
+
+ >>> user.getControl('Name').value = u'Roger Ineichen'
+ >>> user.getControl('Age').value = u'39'
+
+ >>> user.getControl('yes', index=0).click()
+ >>> user.getControl('yes', index=1).click()
+ >>> user.getControl('yes', index=2).click()
+ >>> user.getControl('no', index=3).click()
+
+ >>> user.getControl('yes', index=4).click()
+ >>> user.getControl('have you contributed').value = u'4'
+ >>> user.getControl('What is your Zope Id?').value = u'projekt01'
+
+ >>> user.getControl('Submit Questionnaire').click()
+
+Now that we have two entries, we can use the table headers cells to sort
+them. By default they are sorted by name:
+
+ >>> testing.printElement(user, "//table/tbody/tr/td[1]/text()",
+ ... multiple=True, serialize=False)
+ Roger Ineichen
+ Stephan Richter
+
+Clicking on the "Name" table header cell, will leave the order, since the
+ordering must be initialized. The second time the order is reversed:
+
+ >>> user.getLink('Name').click()
+ >>> user.getLink('Name').click()
+
+ >>> testing.printElement(user, "//table/tbody/tr/td[1]/text()",
+ ... multiple=True, serialize=False)
+ Stephan Richter
+ Roger Ineichen
+
+Selecting another header will sort on it. Let's choose the age; clicking on it
+once sorts it in ascending order:
+
+ >>> user.getLink('Age').click()
+ >>> testing.printElement(user, "//table/tbody/tr/td[2]/text()",
+ ... multiple=True, serialize=False)
+ 27
+ 39
+
+Clicking it again, reverses the order:
+
+ >>> user.getLink('Age').click()
+ >>> testing.printElement(user, "//table/tbody/tr/td[2]/text()",
+ ... multiple=True, serialize=False)
+ 39
+ 27
+
+Finally, let's make sure that all headers are linked:
+
+ >>> user.getLink('Zope 2')
+ <Link text='Zope 2' url='...?sort-on=formdemo.questionnaire.zope2'>
+ >>> user.getLink('Plone')
+ <Link text='Plone' url='...?sort-on=formdemo.questionnaire.plone'>
+ >>> user.getLink('Zope 3')
+ <Link text='Zope 3' url='...?sort-on=formdemo.questionnaire.zope3'>
+ >>> user.getLink('Five')
+ <Link text='Five' url='...?sort-on=formdemo.questionnaire.five'>
+ >>> user.getLink('Contrib.')
+ <Link text='Contrib.' url='...?sort-on=formdemo.questionnaire.contributor'>
+ >>> user.getLink('Years')
+ <Link text='Years' url='...?sort-on=formdemo.questionnaire.years'>
+ >>> user.getLink('Zope Id')
+ <Link text='Zope Id' url='...?sort-on=formdemo.questionnaire.zopeId'>
Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/questionnaire/README.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: z3c.formdemo/trunk/src/z3c/formdemo/testing.py
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/testing.py (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/testing.py 2007-07-02 13:19:02 UTC (rev 77305)
@@ -0,0 +1,33 @@
+##############################################################################
+#
+# Copyright (c) 2007 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$
+"""
+__docformat__ = "reStructuredText"
+import lxml.etree
+import os
+from zope.app.testing.functional import ZCMLLayer
+
+def printElement(browser, xpath, multiple=False, serialize=True):
+ result = [serialize and lxml.etree.tounicode(elem) or elem
+ for elem in browser.etree.xpath(xpath)]
+ if not multiple:
+ print result[0]
+ return
+ for elem in result:
+ print elem
+
+FormDemoLayer = ZCMLLayer(
+ os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'),
+ __name__, 'FormDemoLayer', allow_teardown=True)
Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/testing.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: z3c.formdemo/trunk/src/z3c/formdemo/tests.py
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/tests.py (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/tests.py 2007-07-02 13:19:02 UTC (rev 77305)
@@ -0,0 +1,40 @@
+##############################################################################
+#
+# Copyright (c) 2007 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$
+"""
+__docformat__ = "reStructuredText"
+import os
+import unittest
+from zope.app.testing import functional
+from z3c.formdemo import testing
+
+def getRootFolder():
+ return functional.FunctionalTestSetup().getRootFolder()
+
+def test_suite():
+ suites = []
+ for docpath in (('message', 'README.txt'),
+ ('widgets', 'README.txt'),
+ ('questionnaire', 'README.txt'),
+ ):
+ suite = functional.FunctionalDocFileSuite(
+ os.path.join(*docpath), globs={'getRootFolder': getRootFolder})
+ suite.layer = testing.FormDemoLayer
+ suites.append(suite)
+ return unittest.TestSuite(suites)
+
+
+if __name__ == '__main__':
+ unittest.main(defaultTest='test_suite')
Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/tests.py
___________________________________________________________________
Name: svn:keywords
+ Id
Added: z3c.formdemo/trunk/src/z3c/formdemo/widgets/README.txt
===================================================================
--- z3c.formdemo/trunk/src/z3c/formdemo/widgets/README.txt (rev 0)
+++ z3c.formdemo/trunk/src/z3c/formdemo/widgets/README.txt 2007-07-02 13:19:02 UTC (rev 77305)
@@ -0,0 +1,131 @@
+============
+Widgets Demo
+============
+
+The purpose of the widgets demo is demonstrate that there exists a widget for
+each standard field type and how it works.
+
+To start, we need to open a browser and go to the demo applications overview
+screen:
+
+ >>> from z3c.formdemo import testing
+ >>> from z3c.etestbrowser.testing import ExtendedTestBrowser
+ >>> user = ExtendedTestBrowser()
+ >>> user.addHeader('Accept-Language', 'en')
+ >>> user.open('http://localhost:8080')
+
+Since all demos are purely public, there is no need to log in. Let's now click
+on the "All widgets" link:
+
+ >>> user.getLink('All widgets').click()
+
+You are now in the widgets form. Let's now fill out all forms an submit the
+form:
+
+ >>> import cStringIO
+
+ >>> def addSelection(browser, name, value, selected=True):
+ ... form = browser.mech_browser.forms().next()
+ ... form.new_control(
+ ... 'select', name, attrs={'__select': {'name': name, 'size': '5'}})
+ ... form.new_control(
+ ... 'select', name,
+ ... attrs={'__select': {'name': name, 'size': '5'},
+ ... 'selected': 'selected', 'value': value})
+
+ >>> user.getControl('ASCII', index=0).value += u' Add on.'
+ >>> user.getControl('ASCII Line').value += u' Add on.'
+ >>> user.getControl('no', index=0).click() # Boolean
+ >>> user.getControl('Bytes', index=0).add_file(
+ ... cStringIO.StringIO('File contents'), 'text/plain', 'test.txt')
+ >>> user.getControl('Bytes Line').value += u' Add on.'
+ >>> user.getControl('Choice', index=0).getControl('Two').click()
+ >>> user.getControl('Choice (Not Required)').getControl('Two').click()
+ >>> user.getControl('Choice (Explicit Prompt)').getControl('Two').click()
+ >>> user.getControl('Date', index=0).value = u'7/1/07'
+ >>> user.getControl('Date/Time').value = u'7/1/07 12:15 AM'
+ >>> user.getControl('Decimal').value = u'12439.986'
+ >>> user.getControl('Dotted Name').value += u'demo'
+ >>> user.getControl('Float').value += u'12439.986'
+ >>> user.getControl('Frozen Set').getControl('One').click()
+ >>> user.getControl('Id').value += u'demo'
+ >>> user.getControl('Integer').value = u'12439'
+ >>> addSelection(user, 'form.widgets.listField', u'1')
+ >>> user.getControl('Password').value = u'pwd'
+ >>> user.getControl('Set', index=1).getControl('One').click()
+ >>> user.getControl('Source Text').value += u' Add on.'
+ >>> user.getControl('Text', index=1).value += u' Add on.'
+ >>> user.getControl('Text Line').value += u' Add on.'
+ >>> user.getControl('Time', index=1).value = u'12:15 AM'
+ >>> user.getControl('Time Delta').value = u'4 days, 1:00:00'
+ >>> addSelection(user, 'form.widgets.tupleField', u'1')
+ >>> user.getControl('URI').value += u'/Documentation'
+ >>> user.getControl(name='form.widgets.hiddenField').value += u' Add on.'
+
+ >>> user.getControl('Apply').click()
+
+Once submitted, the same form returns with a data changed method:
+
+ >>> from z3c.formdemo import testing
+ >>> testing.printElement(user, "//div[@class='summary']")
+ <div class="summary">Data successfully updated.</div>
+
+Let's now ensure that the data has been truly uploaded:
+
+ >>> from z3c.formdemo.widgets import interfaces
+ >>> fields = interfaces.IAllFields(getRootFolder())
+
+ >>> fields.asciiField
+ 'This is\n ASCII. Add on.'
+ >>> fields.asciiLineField
+ 'An ASCII line. Add on.'
+ >>> fields.boolField
+ False
+ >>> fields.bytesField
+ 'File contents'
+ >>> fields.bytesLineField
+ 'A Bytes line. Add on.'
+ >>> fields.choiceField
+ 2
+ >>> fields.optionalChoiceField
+ 2
+ >>> fields.promptChoiceField
+ 2
+ >>> fields.dateField
+ datetime.date(2007, 7, 1)
+ >>> fields.datetimeField
+ datetime.datetime(2007, 7, 1, 0, 15)
+ >>> fields.decimalField
+ Decimal("12439.986")
+ >>> fields.dottedNameField
+ 'z3c.formdemo'
+ >>> fields.floatField
+ 12.811999999999999
+ >>> fields.frozenSetField
+ frozenset([3])
+ >>> fields.idField
+ 'z3c.formdemo'
+ >>> fields.intField
+ 12439
+ >>> fields.listField
+ [1]
+ >>> fields.passwordField
+ u'pwd'
+ >>> fields.setField
+ set([3])
+ >>> fields.sourceTextField
+ u'<source /> Add on.'
+ >>> fields.textField
+ u'Some\n Text. Add on.'
+ >>> fields.textLineField
+ u'Some Text line. Add on.'
+ >>> fields.timeField
+ datetime.time(0, 15)
+ >>> fields.timedeltaField
+ datetime.timedelta(4, 3600)
+ >>> fields.tupleField
+ (1,)
+ >>> fields.uriField
+ 'http://zope.org/Documentation'
+ >>> fields.hiddenField
+ u'Some Hidden Text. Add on.'
Property changes on: z3c.formdemo/trunk/src/z3c/formdemo/widgets/README.txt
___________________________________________________________________
Name: svn:eol-style
+ native
More information about the Checkins
mailing list