[Checkins] SVN: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/ Added and tested the CustomWidget Grokker

Christian Klinger cklinger at novareto.de
Wed Jun 24 11:16:02 EDT 2009


Log message for revision 101266:
  Added and tested the CustomWidget Grokker

Changed:
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_int.pt
  A   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_text.pt
  U   megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py

-=-
Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_int.pt
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_int.pt	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_int.pt	2009-06-24 15:15:56 UTC (rev 101266)
@@ -0,0 +1 @@
+<span> This is custom integer widget for zope.schema.Int Fields </span>

Added: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_text.pt
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_text.pt	                        (rev 0)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/custom_text.pt	2009-06-24 15:15:56 UTC (rev 101266)
@@ -0,0 +1 @@
+<span> Custom Text Widget </span>

Modified: megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py
===================================================================
--- megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py	2009-06-24 13:25:36 UTC (rev 101265)
+++ megrok.z3cform/branches/megrok.z3cfrom-layout/src/megrok/z3cform/tests/test_widgettemplate.py	2009-06-24 15:15:56 UTC (rev 101266)
@@ -16,22 +16,53 @@
   >>> [field.__name__ for field in view.fields.values()]
   ['name', 'age']
 
+The widget for *name* should show it´s normal widget.
+Because no CustomWidget is provided for this field.
+
   >>> view.updateWidgets() 
   >>> print view.widgets['name'].render() 
   <input id="form-widgets-name" name="form.widgets.name"
          class="text-widget required textline-field"
          value="" type="text" /> 
 
+The second field in the edit form *age* should get a custom widget
+from the NewTemplateForIntField.
+
+  >>> print view.widgets['age'].render()
+  <span> This is custom integer widget for zope.schema.Int Fields </span>
+
+Now let´s look on a other view. Here we get a CustomWidget as a result
+of the CustomStringTemplate
+
   >>> view = component.getMultiAdapter((manfred, request), name='view')
   >>> view.updateWidgets() 
   >>> print view.widgets['name'].render()
   <span> Extra Widget </span>
 
+Our CustomTemplate class is configured for the IAdded interface.
+Let´s check if we get the right template for it.
 
   >>> view = component.getMultiAdapter((manfred, request), name='add')
   >>> view.updateWidgets() 
   >>> print view.widgets['name'].render()
-  <span> Extra Widget </span>
+  <span> Custom Widget </span>
+  <input id="form-widgets-name" name="form.widgets.name"
+         class="text-widget required textline-field"
+         value="" type="text" />
+
+  >>> print view.widgets['age'].render()
+  <span> Custom Widget </span>
+  <input id="form-widgets-age" name="form.widgets.age"
+         class="text-widget required int-field" value=""
+         type="text" />
+
+This is an example for a more complex CustomWidget.
+It uses view, widget and mode...
+
+  >>> view = component.getMultiAdapter((manfred, request), name='view2')
+  >>> view.updateWidgets() 
+  >>> print view.widgets['name'].render()
+  <span> Custom Text Widget </span>
 """
 
 import grok
@@ -64,31 +95,53 @@
 class MyLayout(megrok.layout.Layout):
     grok.context(Person)
 
+### Views
 
-class CustomStringTemplate(z3cform.WidgetTemplate):
-    grok.context(Person)
-    grok.template('new_string.pt')
-    megrok.z3cform.directives.mode(interfaces.DISPLAY_MODE)
-
 class Edit(z3cform.PageEditForm):
     grok.context(Person)
     fields = field.Fields(IPerson)
 
+
 class View(z3cform.PageDisplayForm):
     grok.context(Person)
     fields = field.Fields(IPerson)
 
+
+class View2(z3cform.PageDisplayForm):
+    grok.context(Person)
+    fields = field.Fields(IPerson)
+
+
 class Add(z3cform.PageAddForm):
     grok.context(Person)
     fields = field.Fields(IPerson)
 
+
+### Custom Templates
+
+class CustomStringTemplate(z3cform.WidgetTemplate):
+    grok.context(Person)
+    grok.template('new_string.pt')
+    megrok.z3cform.directives.mode(interfaces.DISPLAY_MODE)
+
 class CustomTemplate(z3cform.WidgetTemplate):
-    grok.name('custom_template')
     grok.context(Person)
     grok.template('custom_string.pt')
     megrok.z3cform.directives.view(interfaces.IAddForm)
 
+class NewTemplateForIntField(z3cform.WidgetTemplate):
+    grok.context(Person)
+    grok.template('custom_int.pt')
+    megrok.z3cform.directives.field(schema.interfaces.IInt)
 
+class NewTemplateForTextWidget(z3cform.WidgetTemplate):
+    grok.context(Person)
+    grok.template('custom_text.pt')
+    megrok.z3cform.directives.view(View2)
+    megrok.z3cform.directives.widget(interfaces.ITextWidget)
+    megrok.z3cform.directives.mode(interfaces.DISPLAY_MODE)
+
+
 def test_suite():
     from zope.testing import doctest
     from megrok.z3cform.tests import FunctionalLayer



More information about the Checkins mailing list