[Checkins] SVN: zope.schema/branches/tseaver-test_cleanup/src/zope/schema/tests/test_fieldproperty.py Coverage.
Tres Seaver
cvs-admin at zope.org
Fri May 4 23:14:38 UTC 2012
Log message for revision 125648:
Coverage.
Changed:
U zope.schema/branches/tseaver-test_cleanup/src/zope/schema/tests/test_fieldproperty.py
-=-
Modified: zope.schema/branches/tseaver-test_cleanup/src/zope/schema/tests/test_fieldproperty.py
===================================================================
--- zope.schema/branches/tseaver-test_cleanup/src/zope/schema/tests/test_fieldproperty.py 2012-05-04 23:14:27 UTC (rev 125647)
+++ zope.schema/branches/tseaver-test_cleanup/src/zope/schema/tests/test_fieldproperty.py 2012-05-04 23:14:34 UTC (rev 125648)
@@ -17,45 +17,33 @@
import unittest
-class Test(unittest.TestCase):
+class _Base(unittest.TestCase):
- def _getSchema(self):
- from zope.schema._compat import b
- from zope.schema._compat import u
- from zope.interface import Interface
- from zope.schema import Bytes
- from zope.schema import Float
+ def _makeOne(self, field=None, name=None):
from zope.schema import Text
+ if field is None:
+ field = Text(__name__='testing')
+ if name is None:
+ return self._getTargetClass()(field)
+ return self._getTargetClass()(field, name)
- class Schema(Interface):
- title = Text(description=u("Short summary"),
- default=u('say something'))
- weight = Float(min=0.0)
- code = Bytes(min_length=6, max_length=6, default=b('xxxxxx'))
- date = Float(title=u('Date'), readonly=True)
- return Schema
+class _Integration(object):
- def _getTargetClass(self):
- from zope.schema.fieldproperty import FieldProperty
- schema = self._getSchema()
+ def _makeImplementer(self):
+ schema = _getSchema()
+ class _Implementer(object):
+ title = self._makeOne(schema['title'])
+ weight = self._makeOne(schema['weight'])
+ code = self._makeOne(schema['code'])
+ date = self._makeOne(schema['date'])
+ return _Implementer()
- class Klass(object):
- title = FieldProperty(schema['title'])
- weight = FieldProperty(schema['weight'])
- code = FieldProperty(schema['code'])
- date = FieldProperty(schema['date'])
-
- return Klass
-
- def _makeOne(self):
- return self._getTargetClass()()
-
def test_basic(self):
from zope.schema._compat import b
from zope.schema._compat import u
from zope.schema.interfaces import ValidationError
- c = self._makeOne()
+ c = self._makeImplementer()
self.assertEqual(c.title, u('say something'))
self.assertEqual(c.weight, None)
self.assertEqual(c.code, b('xxxxxx'))
@@ -76,31 +64,361 @@
self.assertEqual(c.code, b('abcdef'))
def test_readonly(self):
- c = self._makeOne()
+ c = self._makeImplementer()
# The date should be only settable once
c.date = 0.0
# Setting the value a second time should fail.
self.assertRaises(ValueError, setattr, c, 'date', 1.0)
-class TestStoredThroughField(Test):
+class FieldPropertyTests(_Base, _Integration):
def _getTargetClass(self):
- schema = self._getSchema()
+ from zope.schema.fieldproperty import FieldProperty
+ return FieldProperty
- class Klass(object):
- from zope.schema.fieldproperty import \
- FieldPropertyStoredThroughField
- title = FieldPropertyStoredThroughField(schema['title'])
- weight = FieldPropertyStoredThroughField(schema['weight'])
- code = FieldPropertyStoredThroughField(schema['code'])
- date = FieldPropertyStoredThroughField(schema['date'])
+ def test_ctor_defaults(self):
+ from zope.schema import Text
+ field = Text(__name__='testing')
+ cname = self._getTargetClass().__name__
+ prop = self._makeOne(field)
+ self.assertTrue(getattr(prop, '_%s__field' % cname) is field)
+ self.assertEqual(getattr(prop, '_%s__name' % cname), 'testing')
+ self.assertEqual(prop.__name__, 'testing')
+ self.assertEqual(prop.description, field.description)
+ self.assertEqual(prop.default, field.default)
+ self.assertEqual(prop.readonly, field.readonly)
+ self.assertEqual(prop.required, field.required)
- return Klass
+ def test_ctor_explicit(self):
+ from zope.schema import Text
+ from zope.schema._compat import u
+ field = Text(__name__='testing',
+ description=u('DESCRIPTION'),
+ default=u('DEFAULT'),
+ readonly=True,
+ required=True,
+ )
+ cname = self._getTargetClass().__name__
+ prop = self._makeOne(field, name='override')
+ self.assertTrue(getattr(prop, '_%s__field' % cname) is field)
+ self.assertEqual(getattr(prop, '_%s__name' % cname), 'override')
+ self.assertEqual(prop.description, field.description)
+ self.assertEqual(prop.default, field.default)
+ self.assertEqual(prop.readonly, field.readonly)
+ self.assertEqual(prop.required, field.required)
+ def test___get___from_class(self):
+ prop = self._makeOne()
+ class Foo(object):
+ testing = prop
+ self.assertTrue(Foo.testing is prop)
+ def test___get___from_instance_pseudo_field_wo_default(self):
+ class _Faux(object):
+ def bind(self, other):
+ return self
+ prop = self._makeOne(_Faux(), 'nonesuch')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ self.assertRaises(AttributeError, getattr, foo, 'testing')
+
+ def test___get___from_instance_miss_uses_field_default(self):
+ prop = self._makeOne()
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ self.assertEqual(foo.testing, None)
+
+ def test___get___from_instance_hit(self):
+ prop = self._makeOne(name='other')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.other = '123'
+ self.assertEqual(foo.testing, '123')
+
+ def test___get___from_instance_hit_after_bind(self):
+ class _Faux(object):
+ default = '456'
+ def bind(self, other):
+ return self
+ prop = self._makeOne(_Faux(), 'testing')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ self.assertEqual(foo.testing, '456')
+
+ def test___set___not_readonly(self):
+ class _Faux(object):
+ readonly = False
+ default = '456'
+ def bind(self, other):
+ return self
+ faux = _Faux()
+ _validated = []
+ faux.validate = _validated.append
+ prop = self._makeOne(faux, 'testing')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.testing = '123'
+ self.assertEqual(foo.__dict__['testing'], '123')
+
+ def test___set___w_readonly_not_already_set(self):
+ class _Faux(object):
+ readonly = True
+ default = '456'
+ def bind(self, other):
+ return self
+ faux = _Faux()
+ _validated = []
+ faux.validate = _validated.append
+ prop = self._makeOne(faux, 'testing')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.testing = '123'
+ self.assertEqual(foo.__dict__['testing'], '123')
+ self.assertEqual(_validated, ['123'])
+
+ def test___set___w_readonly_and_already_set(self):
+ class _Faux(object):
+ readonly = True
+ default = '456'
+ def bind(self, other):
+ return self
+ faux = _Faux()
+ _validated = []
+ faux.validate = _validated.append
+ prop = self._makeOne(faux, 'testing')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.__dict__['testing'] = '789'
+ self.assertRaises(ValueError, setattr, foo, 'testing', '123')
+ self.assertEqual(_validated, ['123'])
+
+
+class FieldPropertyStoredThroughFieldTests(_Base, _Integration):
+
+ def _getTargetClass(self):
+ from zope.schema.fieldproperty import FieldPropertyStoredThroughField
+ return FieldPropertyStoredThroughField
+
+ def test_ctor_defaults(self):
+ from zope.schema import Text
+ field = Text(__name__='testing')
+ cname = self._getTargetClass().__name__
+ prop = self._makeOne(field)
+ self.assertTrue(isinstance(prop.field, field.__class__))
+ self.assertFalse(prop.field is field)
+ self.assertEqual(prop.field.__name__, '__st_testing_st')
+ self.assertEqual(prop.__name__, '__st_testing_st')
+ self.assertEqual(getattr(prop, '_%s__name' % cname), 'testing')
+ self.assertEqual(prop.description, field.description)
+ self.assertEqual(prop.default, field.default)
+ self.assertEqual(prop.readonly, field.readonly)
+ self.assertEqual(prop.required, field.required)
+
+ def test_ctor_explicit(self):
+ from zope.schema import Text
+ from zope.schema._compat import u
+ field = Text(__name__='testing',
+ description=u('DESCRIPTION'),
+ default=u('DEFAULT'),
+ readonly=True,
+ required=True,
+ )
+ cname = self._getTargetClass().__name__
+ prop = self._makeOne(field, name='override')
+ self.assertTrue(isinstance(prop.field, field.__class__))
+ self.assertFalse(prop.field is field)
+ self.assertEqual(prop.field.__name__, '__st_testing_st')
+ self.assertEqual(prop.__name__, '__st_testing_st')
+ self.assertEqual(getattr(prop, '_%s__name' % cname), 'override')
+ self.assertEqual(prop.description, field.description)
+ self.assertEqual(prop.default, field.default)
+ self.assertEqual(prop.readonly, field.readonly)
+ self.assertEqual(prop.required, field.required)
+
+ def test_setValue(self):
+ from zope.schema import Text
+ class Foo(object):
+ pass
+ foo = Foo()
+ prop = self._makeOne()
+ field = Text(__name__='testing')
+ prop.setValue(foo, field, '123')
+ self.assertEqual(foo.testing, '123')
+
+ def test_getValue_miss(self):
+ from zope.schema import Text
+ from zope.schema.fieldproperty import _marker
+ class Foo(object):
+ pass
+ foo = Foo()
+ prop = self._makeOne()
+ field = Text(__name__='testing')
+ value = prop.getValue(foo, field)
+ self.assertTrue(value is _marker)
+
+ def test_getValue_hit(self):
+ from zope.schema import Text
+ class Foo(object):
+ pass
+ foo = Foo()
+ foo.testing = '123'
+ prop = self._makeOne()
+ field = Text(__name__='testing')
+ value = prop.getValue(foo, field)
+ self.assertEqual(value, '123')
+
+ def test_queryValue_miss(self):
+ from zope.schema import Text
+ class Foo(object):
+ pass
+ foo = Foo()
+ prop = self._makeOne()
+ field = Text(__name__='testing')
+ default = object()
+ value = prop.queryValue(foo, field, default)
+ self.assertTrue(value is default)
+
+ def test_queryValue_hit(self):
+ from zope.schema import Text
+ class Foo(object):
+ pass
+ foo = Foo()
+ foo.testing = '123'
+ prop = self._makeOne()
+ field = Text(__name__='testing')
+ default = object()
+ value = prop.queryValue(foo, field, default)
+ self.assertEqual(value, '123')
+
+ def test___get___from_class(self):
+ prop = self._makeOne()
+ class Foo(object):
+ testing = prop
+ self.assertTrue(Foo.testing is prop)
+
+ def test___get___from_instance_pseudo_field_wo_default(self):
+ class _Faux(object):
+ __name__ = 'Faux'
+ def bind(self, other):
+ return self
+ def query(self, inst, default):
+ return default
+ prop = self._makeOne(_Faux(), 'nonesuch')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ self.assertRaises(AttributeError, getattr, foo, 'testing')
+
+ def test___get___from_instance_miss_uses_field_default(self):
+ prop = self._makeOne()
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ self.assertEqual(foo.testing, None)
+
+ def test___get___from_instance_hit(self):
+ from zope.schema import Text
+ field = Text(__name__='testing')
+ prop = self._makeOne(field, name='other')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.__dict__['__st_testing_st'] = '456'
+ foo.other = '123'
+ self.assertEqual(foo.testing, '456')
+
+ def test___set___not_readonly(self):
+ class _Faux(object):
+ __name__ = 'Faux'
+ readonly = False
+ default = '456'
+ def bind(self, other):
+ return self
+ def set(self, inst, value):
+ setattr(inst, 'faux', value)
+ faux = _Faux()
+ _validated = []
+ faux.validate = _validated.append
+ prop = self._makeOne(faux, 'testing')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.testing = '123'
+ self.assertEqual(foo.__dict__['faux'], '123')
+ self.assertEqual(_validated, ['123'])
+
+ def test___set___w_readonly_not_already_set(self):
+ class _Faux(object):
+ __name__ = 'Faux'
+ readonly = True
+ default = '456'
+ def bind(self, other):
+ return self
+ def query(self, inst, default):
+ return default
+ def set(self, inst, value):
+ if self.readonly:
+ raise ValueError
+ setattr(inst, 'faux', value)
+ faux = _Faux()
+ _validated = []
+ faux.validate = _validated.append
+ prop = self._makeOne(faux, 'testing')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.testing = '123'
+ self.assertEqual(foo.__dict__['faux'], '123')
+ self.assertEqual(_validated, ['123'])
+
+ def test___set___w_readonly_and_already_set(self):
+ class _Faux(object):
+ __name__ = 'Faux'
+ readonly = True
+ default = '456'
+ def bind(self, other):
+ return self
+ def query(self, inst, default):
+ return '789'
+ faux = _Faux()
+ _validated = []
+ faux.validate = _validated.append
+ prop = self._makeOne(faux, 'testing')
+ class Foo(object):
+ testing = prop
+ foo = Foo()
+ foo.__dict__['testing'] = '789'
+ self.assertRaises(ValueError, setattr, foo, 'testing', '123')
+
+
+def _getSchema():
+ from zope.interface import Interface
+ from zope.schema import Bytes
+ from zope.schema import Float
+ from zope.schema import Text
+ from zope.schema._compat import b
+ from zope.schema._compat import u
+
+ class Schema(Interface):
+ title = Text(description=u("Short summary"),
+ default=u('say something'))
+ weight = Float(min=0.0)
+ code = Bytes(min_length=6, max_length=6, default=b('xxxxxx'))
+ date = Float(title=u('Date'), readonly=True)
+
+ return Schema
+
+
def test_suite():
return unittest.TestSuite((
- unittest.makeSuite(Test),
- unittest.makeSuite(TestStoredThroughField),
- ))
+ unittest.makeSuite(FieldPropertyTests),
+ unittest.makeSuite(FieldPropertyStoredThroughFieldTests),
+ ))
More information about the checkins
mailing list