[Zope-Checkins] CVS: Zope3/lib/python/Zope/App/Formulator/Validators/tests - __init__.py:1.2 testValidators.py:1.2
Jim Fulton
jim@zope.com
Mon, 10 Jun 2002 19:28:49 -0400
Update of /cvs-repository/Zope3/lib/python/Zope/App/Formulator/Validators/tests
In directory cvs.zope.org:/tmp/cvs-serv17445/lib/python/Zope/App/Formulator/Validators/tests
Added Files:
__init__.py testValidators.py
Log Message:
Merged Zope-3x-branch into newly forked Zope3 CVS Tree.
=== Zope3/lib/python/Zope/App/Formulator/Validators/tests/__init__.py 1.1 => 1.2 ===
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (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.
+#
+##############################################################################
=== Zope3/lib/python/Zope/App/Formulator/Validators/tests/testValidators.py 1.1 => 1.2 ===
+#
+# Copyright (c) 2001, 2002 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (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$
+"""
+
+import unittest
+from Zope.App.Formulator import Errors
+
+
+class TestField:
+ """Class to provide a stub for a field"""
+
+ id = 'test'
+ isRequired = 0
+
+ def getValue(self, id):
+ return getattr(self, id)
+
+ def getErrorMessage(self, errorKey):
+ return "Nothing"
+
+field = TestField()
+
+
+class ValidatorTestCase(unittest.TestCase):
+ def assertValidatorRaises(self, exception, error_key, f, args=[], kw={}):
+ try:
+ apply(f, args, kw)
+ except Errors.ValidationError, e:
+ if e.errorKey != error_key:
+ self.fail('Got wrong error. Expected %s received %s' %
+ (error_key, e))
+ else:
+ return
+ self.fail('Expected error %s but no error received.' % error_key)
+
+
+
+class StringValidatorTestCase(ValidatorTestCase):
+ """Test String Validator Cases"""
+
+ def setUp(self):
+ from Zope.App.Formulator.Validators import StringValidator
+ self.v = StringValidator.StringValidator()
+
+
+ def testBasic(self):
+ self.assertEqual(self.v.validate(field, 'Foo'), 'Foo')
+
+
+ def testStripWhitespace(self):
+ self.assertEqual(self.v.validate(field, ' Foo '), 'Foo')
+
+
+ def testErrorTooLong(self):
+ self.v.maxLength = 10
+ self.assertValidatorRaises(Errors.ValidationError, 'tooLong',
+ self.v.validate,
+ (field, 'This is a much longer text.'))
+
+
+ def testErrorTruncate(self):
+ self.v.maxLength = 10
+ self.v.truncate = 1
+ self.assertEqual(self.v.validate(field, 'this is way too long'),
+ 'this is way too long'[:10])
+
+
+ def testErrorRequiredNotFound(self):
+ # empty string
+ field.isRequired = 1
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'requiredNotFound',
+ self.v.validate, (field, ''), {})
+
+ # whitespace only
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'requiredNotFound',
+ self.v.validate, (field, ' '))
+
+
+ def testIllegalValue(self):
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'illegalValue',
+ self.v.validate, (field, {}))
+
+
+class EmailValidatorTestCase(ValidatorTestCase):
+
+ def setUp(self):
+ from Zope.App.Formulator.Validators import EmailValidator
+ self.v = EmailValidator.EmailValidator()
+
+
+ def testBasic(self):
+ self.assertEqual(self.v.validate(field, 'foo@bar.com'),
+ 'foo@bar.com')
+
+ self.assertEqual(self.v.validate(field, 'm.faassen@vet.uu.nl'),
+ 'm.faassen@vet.uu.nl')
+
+
+ def testErrorNotEmail(self):
+ # a few wrong email addresses should raise error
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'notEmail',
+ self.v.validate, (field, 'foo@bar.com.'))
+
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'notEmail',
+ self.v.validate, (field, '@bar.com'))
+
+
+ def testErrorRequiredNotFound(self):
+ field.isRequired = 1
+
+ # empty string
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'requiredNotFound',
+ self.v.validate, (field, ''))
+
+
+# skip PatternValidator for now
+
+class BooleanValidatorTestCase(ValidatorTestCase):
+
+ def setUp(self):
+ from Zope.App.Formulator.Validators import BooleanValidator
+ self.v = BooleanValidator.BooleanValidator()
+
+
+ def testBasic(self):
+ self.assertEqual(self.v.validate(field, 't'), 1)
+ self.assertEqual(self.v.validate(field, 1), 1)
+ self.assertEqual(self.v.validate(field, 'f'), 0)
+ self.assertEqual(self.v.validate(field, ''), 0)
+ self.assertEqual(self.v.validate(field, 0), 0)
+ self.assertEqual(self.v.validate(field, None), 0)
+
+
+
+class IntegerValidatorTestCase(ValidatorTestCase):
+
+ def setUp(self):
+ from Zope.App.Formulator.Validators import IntegerValidator
+ self.v = IntegerValidator.IntegerValidator()
+
+
+ def testBasic(self):
+ self.assertEqual(self.v.validate(field, '15'), 15)
+ self.assertEqual(self.v.validate(field, '0'), 0)
+ self.assertEqual(self.v.validate(field, '-1'), -1)
+
+
+ def testNoEntry(self):
+ # result should be empty string if nothing entered
+ field.isRequired = 0
+ self.assertEqual(self.v.validate(field, ''), '')
+
+
+ def testRanges(self):
+ # first check whether everything that should be in range is
+ # in range
+ self.v.start = 0
+ for i in range(0, 100):
+ self.v.end = i+1
+ self.assertEqual(self.v.validate(field, str(i)), i)
+
+ # now check out of range errors
+ self.v.start = 0
+ self.v.end = 100
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'integerOutOfRange',
+ self.v.validate, (field, '100'))
+
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'integerOutOfRange',
+ self.v.validate, (field, '200'))
+
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'integerOutOfRange',
+ self.v.validate, (field, '-10'))
+
+ # check some weird ranges
+ self.v.start = 10
+ self.v.end = 10
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'integerOutOfRange',
+ self.v.validate, (field, '10'))
+
+ self.v.start = 0
+ self.v.end = 0
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'integerOutOfRange',
+ self.v.validate, (field, '0'))
+
+ self.v.start = 0
+ self.v.end = -10
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'integerOutOfRange',
+ self.v.validate, (field, '-1'))
+
+
+ def testErrorNotInteger(self):
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'notInteger',
+ self.v.validate, (field, 'foo'))
+
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'notInteger',
+ self.v.validate, (field, '1.0'))
+
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'notInteger',
+ self.v.validate, (field, '1e'))
+
+
+ def testErrorRequiredNotFound(self):
+ # empty string
+ field.isRequired = 1
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'requiredNotFound',
+ self.v.validate, (field, ''), {})
+
+ # whitespace only
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'requiredNotFound',
+ self.v.validate, (field, ' '))
+
+
+class FloatValidatorTestCase(ValidatorTestCase):
+
+ def setUp(self):
+ from Zope.App.Formulator.Validators import FloatValidator
+ self.v = FloatValidator.FloatValidator()
+
+
+ def testBasic(self):
+ self.assertEqual(self.v.validate(field, '15.5'), 15.5)
+ self.assertEqual(self.v.validate(field, '15.0'), 15.0)
+ self.assertEqual(self.v.validate(field, '15'), 15.0)
+
+
+ def testErrorNotFloat(self):
+ self.assertValidatorRaises(
+ Errors.ValidationError, 'notFloat',
+ self.v.validate, (field, '1f'))
+
+
+
+def test_suite():
+ suite = unittest.TestSuite()
+
+ suite.addTest(unittest.makeSuite(StringValidatorTestCase, 'test'))
+ suite.addTest(unittest.makeSuite(EmailValidatorTestCase, 'test'))
+ suite.addTest(unittest.makeSuite(BooleanValidatorTestCase, 'test'))
+ suite.addTest(unittest.makeSuite(IntegerValidatorTestCase, 'test'))
+ suite.addTest(unittest.makeSuite(FloatValidatorTestCase, 'test'))
+
+ return suite
+
+
+if __name__ == '__main__':
+ unittest.TextTestRunner().run(test_suite())
+