[Zope3-checkins] SVN: Zope3/trunk/src/zope/schema/ Fix accessor field query method; add tests for get, query, and set.

Gary Poster gary at zope.com
Thu Mar 10 23:11:07 EST 2005


Log message for revision 29436:
  Fix accessor field query method; add tests for get, query, and set.
  
  

Changed:
  U   Zope3/trunk/src/zope/schema/accessors.py
  U   Zope3/trunk/src/zope/schema/tests/test_accessors.py

-=-
Modified: Zope3/trunk/src/zope/schema/accessors.py
===================================================================
--- Zope3/trunk/src/zope/schema/accessors.py	2005-03-10 20:47:10 UTC (rev 29435)
+++ Zope3/trunk/src/zope/schema/accessors.py	2005-03-11 04:11:07 UTC (rev 29436)
@@ -71,7 +71,12 @@
         return getattr(object, self.__name__)()
 
     def query(self, object, default=None):
-        return getattr(object, self.__name__)()
+        try:
+            f = getattr(object, self.__name__)
+        except AttributeError:
+            return default
+        else:
+            return f()
 
     def set(self, object, value):
         if self.readonly:

Modified: Zope3/trunk/src/zope/schema/tests/test_accessors.py
===================================================================
--- Zope3/trunk/src/zope/schema/tests/test_accessors.py	2005-03-10 20:47:10 UTC (rev 29435)
+++ Zope3/trunk/src/zope/schema/tests/test_accessors.py	2005-03-11 04:11:07 UTC (rev 29436)
@@ -39,12 +39,15 @@
 
         class Good(object):
             implements(I)
+            
+            def __init__(self):
+                self.set = 0
 
             def getFoo(self):
                 return u"foo"
 
             def setFoo(self, v):
-                pass
+                self.set += 1
 
         names = I.names()
         names.sort()
@@ -71,10 +74,19 @@
 
         self.assertRaises(Exception, verifyClass, I, Bad)
         self.assertRaises(Exception, verifyObject, I, Bad())
+        
+        self.assertEquals(I['getFoo'].query(Bad(), 42), 42)
+        self.assertRaises(AttributeError, I['getFoo'].get, Bad())
 
         verifyClass(I, Good)
         verifyObject(I, Good())
 
+        self.assertEquals(I['getFoo'].query(Good(), 42), u'foo')
+        self.assertEquals(I['getFoo'].get(Good()), u'foo')
+        instance = Good()
+        I['getFoo'].set(instance, u'whatever')
+        self.assertEquals(instance.set, 1)
+
     def test_doc(self):
 
         field = Text(title=u"Foo thing")



More information about the Zope3-Checkins mailing list