[Checkins] SVN: z3c.form/branches/adamg-missing-terms/src/z3c/form/util. added tests

Adam Groszer cvs-admin at zope.org
Mon Sep 10 12:19:36 UTC 2012


Log message for revision 127810:
  added tests

Changed:
  U   z3c.form/branches/adamg-missing-terms/src/z3c/form/util.py
  U   z3c.form/branches/adamg-missing-terms/src/z3c/form/util.txt

-=-
Modified: z3c.form/branches/adamg-missing-terms/src/z3c/form/util.py
===================================================================
--- z3c.form/branches/adamg-missing-terms/src/z3c/form/util.py	2012-09-10 11:43:45 UTC (rev 127809)
+++ z3c.form/branches/adamg-missing-terms/src/z3c/form/util.py	2012-09-10 12:19:32 UTC (rev 127810)
@@ -143,6 +143,8 @@
     if context is None:
         # IObjectWidget madness
         return True
+    if zope.schema.interfaces.IObject.providedBy(field):
+        return True
 
     # Get the datamanager and get the original value
     dm = zope.component.getMultiAdapter(
@@ -150,9 +152,7 @@
     # now figure value chaged status
     # Or we can not get the original value, in which case we can not check
     # Or it is an Object, in case we'll never know
-    if (not dm.canAccess() or
-        dm.query() != value or
-        zope.schema.interfaces.IObject.providedBy(field)):
+    if (not dm.canAccess() or dm.query() != value):
         return True
     else:
         return False
@@ -167,6 +167,8 @@
         # if the widget is context aware, figure if it's field changed
         if field is None:
             field = widget.field
+        if context is None:
+            context = widget.context
         return changedField(field, value, context=context)
     # otherwise we cannot, return 'always changed'
     return True

Modified: z3c.form/branches/adamg-missing-terms/src/z3c/form/util.txt
===================================================================
--- z3c.form/branches/adamg-missing-terms/src/z3c/form/util.txt	2012-09-10 11:43:45 UTC (rev 127809)
+++ z3c.form/branches/adamg-missing-terms/src/z3c/form/util.txt	2012-09-10 12:19:32 UTC (rev 127810)
@@ -451,3 +451,102 @@
   True
   >>> bazMarker1 is bazMarker2
   True
+
+`changedField()` function
+-------------------------
+
+Decide whether a field was changed/modified.
+
+  >>> class IPerson(zope.interface.Interface):
+  ...     login = zope.schema.TextLine(
+  ...         title=u'Login')
+  ...     address = zope.schema.Object(
+  ...         schema=zope.interface.Interface)
+
+  >>> class Person(object):
+  ...     zope.interface.implements(IPerson)
+  ...     login = 'johndoe'
+  >>> person = Person()
+
+field.context is None and no context passed:
+
+  >>> util.changedField(IPerson['login'], 'foo')
+  True
+
+IObject field:
+
+  >>> util.changedField(IPerson['address'], object(), context = person)
+  True
+
+field.context or context passed:
+
+  >>> import z3c.form.datamanager
+  >>> zope.component.provideAdapter(z3c.form.datamanager.AttributeField)
+
+  >>> util.changedField(IPerson['login'], 'foo', context = person)
+  True
+  >>> util.changedField(IPerson['login'], 'johndoe', context = person)
+  False
+
+  >>> fld = IPerson['login'].bind(person)
+  >>> util.changedField(fld, 'foo')
+  True
+  >>> util.changedField(fld, 'johndoe')
+  False
+
+No access:
+
+  >>> save = z3c.form.datamanager.AttributeField.canAccess
+  >>> z3c.form.datamanager.AttributeField.canAccess = lambda self: False
+
+  >>> util.changedField(IPerson['login'], 'foo', context = person)
+  True
+  >>> util.changedField(IPerson['login'], 'johndoe', context = person)
+  True
+
+  >>> z3c.form.datamanager.AttributeField.canAccess = save
+
+
+`changedWidget()` function
+---------------------------
+
+Decide whether a widget value was changed/modified.
+
+  >>> import z3c.form.testing
+  >>> request = z3c.form.testing.TestRequest()
+  >>> import z3c.form.widget
+  >>> widget = z3c.form.widget.Widget(request)
+
+If the widget is not IContextAware, there's nothing to check:
+
+  >>> from z3c.form import interfaces
+  >>> interfaces.IContextAware.providedBy(widget)
+  False
+
+  >>> util.changedWidget(widget, 'foo')
+  True
+
+Make it IContextAware:
+
+  >>> widget.context = person
+  >>> zope.interface.alsoProvides(widget, interfaces.IContextAware)
+
+  >>> widget.field = IPerson['login']
+
+  >> util.changedWidget(widget, 'foo')
+  True
+
+  >>> util.changedWidget(widget, 'johndoe')
+  False
+
+Field and context is also overridable:
+
+  >>> widget.field = None
+  >>> util.changedWidget(widget, 'johndoe', field=IPerson['login'])
+  False
+
+  >>> p2 = Person()
+  >>> p2.login = 'foo'
+
+  >>> util.changedWidget(widget, 'foo', field=IPerson['login'], context=p2)
+  False



More information about the checkins mailing list