[Erp5-report] r26941 - /erp5/trunk/products/Formulator/tests/
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue May 12 17:15:00 CEST 2009
Author: nicolas
Date: Tue May 12 17:14:59 2009
New Revision: 26941
URL: http://svn.erp5.org?rev=26941&view=rev
Log:
rename Tests
Added:
erp5/trunk/products/Formulator/tests/testForm.py
- copied unchanged from r26936, erp5/trunk/products/Formulator/tests/test_Form.py
erp5/trunk/products/Formulator/tests/testFormValidator.py
- copied unchanged from r26936, erp5/trunk/products/Formulator/tests/test_validators.py
erp5/trunk/products/Formulator/tests/testSerializeForm.py
- copied unchanged from r26936, erp5/trunk/products/Formulator/tests/test_serialize.py
Removed:
erp5/trunk/products/Formulator/tests/test_Form.py
erp5/trunk/products/Formulator/tests/test_serialize.py
erp5/trunk/products/Formulator/tests/test_validators.py
Removed: erp5/trunk/products/Formulator/tests/test_Form.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/tests/test_Form.py?rev=26940&view=auto
==============================================================================
--- erp5/trunk/products/Formulator/tests/test_Form.py [utf8] (original)
+++ erp5/trunk/products/Formulator/tests/test_Form.py (removed)
@@ -1,179 +1,0 @@
-# -*- coding: utf-8 -*-
-import unittest, re
-import Zope2
-
-# XXX this does not work for zope2.x if x < 3
-# can we fake this? should we do this?
-from Testing import makerequest
-
-from Products.Formulator.Form import ZMIForm
-from Products.Formulator.Errors import ValidationError, FormValidationError
-from Products.Formulator.MethodField import Method
-from Products.Formulator.TALESField import TALESMethod
-
-from Products.PythonScripts.PythonScript import PythonScript
-
-import transaction
-from Testing import ZopeTestCase
-ZopeTestCase.installProduct('Formulator')
-
-""" random assembly testing some reported bugs.
- This is _not_ a structured or even complete test suite
-"""
-
-class FormTestCase(unittest.TestCase):
-
- def setUp(self):
- transaction.begin()
- self.connection = Zope2.DB.open()
- self.root = makerequest.makerequest(
- self.connection.root()['Application'])
-
- self.root.manage_addProduct['Formulator'] \
- .manage_add('form', 'Test Form')
- self.form = self.root.form
-
-
- def tearDown(self):
- transaction.abort()
- self.connection.close()
-
-
- def test_has_field(self):
- """ test if has_field works, if one asks for a non-field attribute.
- this has raised AttributeError "aq_explicit" in previous versions
- """
- self.failIf(self.form.has_field('title'))
-
- def _test_list_values(self):
- """ test if a list of values returned by TALES (override) expressions
- is interpreted properly.
- If a TALES tab returns a sequence of items and some item is
- actually a string of length 2 (e.g. "ok"), this previously
- has lead to a item text of 'o' and a display value of 'k'
- (as the this is actually a sequence of length 2 ...)
- See http://sourceforge.net/mailarchive/forum.php?thread_id=1359918&forum_id=1702
-
- Actually the original problem still does not work,
- as passing a list of int's is not yet supported.
- If it should, please uncomment the second part of the test.
- """
-
- # XXX deactivated: this maybe should not be fixed at all
-
- self.form.manage_addField('list_field', 'Test List Field', 'ListField')
-
- # adding a python script to be called by the override tab
- # FIXME: the following does not work, as the fake-request
- # does not have a "form" atribute (?)
- #self.root.manage_addProduct['PythonScripts'] \
- # .manage_addPythonScript('override_test', 'Test for override')
- #
- #self.root._getOb('override_test').write("return ['ok', 'no']\n")
-
- self.form.override_test = PythonScript('override_test')
- self.form.override_test.write("return ['ok', 'no']\n")
- # ps._makeFunction()
-
-
- list_field = getattr(self.form, 'list_field')
- list_field.values['items'] = [ ('ok', 'ok'), ('no', 'no') ]
-
- items1 = list_field.render()
-
- # test TALES
- list_field.tales['items'] = TALESMethod("python:['ok', 'no']")
- items2 = list_field.render()
-
- self.assertEquals(items1, items2)
-
- # test override
- del list_field.tales['items']
- list_field.overrides['items'] = Method('override_test')
- items2 = list_field.render()
-
- self.assertEquals(items1, items2)
-
- # test if TALES returns a list of e.g. int
- #list_field.values['items'] = [ ('42', '42'), ('88', '88') ]
- #
- #items1 = list_field.render()
- #
- #list_field.tales['items'] = TALESMethod("python:[42, 88]")
- #items2 = list_field.render()
- #
- #self.assertEquals(items1, items2)
-
- def test_labels(self):
- self.form.manage_addField(
- 'label_field', 'Test Label Field', 'LabelField')
-
- self.form.label_field.overrides['default'] = "Some label"
-
- self.form.manage_addField(
- 'int_field', 'Test integer field', 'IntegerField')
-
- result = self.form.validate_all(
- {'field_int_field': '3'})
- self.assertEquals({'int_field': 3}, result)
-
-
- def test_datetime_css_class_rendering(self):
- # test that a bug is fixed, which causing the css_class value
- # not to be rendered
-
- self.form.manage_addProduct['Formulator']\
- .manage_addField('date_time','Test Field','DateTimeField')
- field = self.form.date_time
-
- css_matcher = re.compile('class="([^"]*)"')
-
- # initially no css class is set
- self.assertEquals(0, len(css_matcher.findall(field.render())))
-
- # edit the field, bypassing validation ...
- field._edit({'css_class':'some_class'})
-
- # now we should have five matches for the five subfields ...
- css_matches = css_matcher.findall(field.render())
- self.assertEquals(5, len(css_matches))
- # ... and all have the given value:
- for m in css_matches:
- self.assertEquals('some_class',m)
-
- # change the input style: the css needs to be
- # propagated to the newly created subfields
- current_style = field['input_style']
- other_style = {'list':'text', 'text':'list'} [current_style]
- field._edit({'input_style':other_style})
-
- # still the css classes should remain the same
- css_matches = css_matcher.findall(field.render())
- self.assertEquals(5, len(css_matches))
- for m in css_matches:
- self.assertEquals('some_class',m)
-
- # now just change to another value:
- field._edit({'css_class':'other_class'})
- css_matches = css_matcher.findall(field.render())
- self.assertEquals(5, len(css_matches))
- for m in css_matches:
- self.assertEquals('other_class',m)
-
- # and clear the css_class field:
- field._edit({'css_class':''})
- css_matches = css_matcher.findall(field.render())
- self.assertEquals(0, len(css_matches))
-
-
-def test_suite():
- suite = unittest.TestSuite()
-
- suite.addTest(unittest.makeSuite(FormTestCase, 'test'))
- return suite
-
-def main():
- unittest.TextTestRunner().run(test_suite())
-
-if __name__ == '__main__':
- main()
Removed: erp5/trunk/products/Formulator/tests/test_serialize.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/tests/test_serialize.py?rev=26940&view=auto
==============================================================================
--- erp5/trunk/products/Formulator/tests/test_serialize.py [utf8] (original)
+++ erp5/trunk/products/Formulator/tests/test_serialize.py (removed)
@@ -1,431 +1,0 @@
-# -*- coding: utf-8 -*-
-import unittest
-
-from Products.Formulator.Form import ZMIForm
-from Products.Formulator.XMLToForm import XMLToForm
-from Products.Formulator.FormToXML import formToXML
-
-from Products.Formulator.Errors import ValidationError, FormValidationError
-from Testing import ZopeTestCase
-ZopeTestCase.installProduct('Formulator')
-
-class FakeRequest:
- """ a fake request for testing.
- Actually we need this only for item acces,
- and for evaluating to false always, for
- the manage_XXX methods to not try to render
- a response.
- """
-
- def __init__(self):
- self.dict = {}
-
- def __getitem__(self, key):
- return self.dict[key]
-
- def __setitem__(self, key, value):
- self.dict[key] = value
-
- def get(self, key, default_value=None):
- return self.dict.get(key, default_value)
-
- def update(self, other_dict):
- self.dict.update(other_dict)
-
- def clear(self):
- self.dict.clear()
-
- def __nonzero__(self):
- return 0
-
-class SerializeTestCase(unittest.TestCase):
- def test_simpleSerialize(self):
- form = ZMIForm('test', 'My test')
- xml = '''\
-<?xml version="1.0" encoding="iso-8859-1" ?>
-
-<form>
- <title></title>
- <name>tab_status_form</name>
- <action></action>
- <enctype></enctype>
- <method></method>
-
- <groups>
- <group>
- <title>Default</title>
- <fields>
-
- <field><id>message</id> <type>RawTextAreaField</type>
- <values>
- <alternate_name></alternate_name>
- <hidden type="int">0</hidden>
- <max_length></max_length>
- <width type="int">65</width>
- <external_validator></external_validator>
- <height type="int">7</height>
- <required type="int">0</required>
- <css_class></css_class>
- <default></default>
- <title>Message</title>
- <truncate type="int">0</truncate>
- <description></description>
- <extra>wrap="soft"</extra>
- </values>
- <tales>
- </tales>
- </field>
- <field><id>publish_datetime</id> <type>DateTimeField</type>
- <values>
- <date_only type="int">0</date_only>
- <alternate_name></alternate_name>
- <input_style>list</input_style>
- <hidden type="int">0</hidden>
- <input_order>dmy</input_order>
- <time_separator>:</time_separator>
- <date_separator>/</date_separator>
- <external_validator></external_validator>
- <required type="int">0</required>
- <default_now type="int">0</default_now>
- <css_class></css_class>
- <title>Publish time</title>
- <description></description>
- </values>
- <tales>
- <time_separator>python:form.time_punctuation</time_separator>
- <date_separator>python:form.date_punctuation</date_separator>
- </tales>
- </field>
- <field><id>expiration_datetime</id> <type>DateTimeField</type>
- <values>
- <date_only type="int">0</date_only>
- <alternate_name></alternate_name>
- <input_style>list</input_style>
- <css_class></css_class>
- <hidden type="int">0</hidden>
- <input_order>dmy</input_order>
- <time_separator>:</time_separator>
- <date_separator>/</date_separator>
- <external_validator></external_validator>
- <required type="int">0</required>
- <default_now type="int">0</default_now>
- <title>Expiration time</title>
- <description>If this document should expire, set the time.</description>
- </values>
- <tales>
- <time_separator>python:form.time_punctuation</time_separator>
- <date_separator>python:form.date_punctuation</date_separator>
- </tales>
- </field>
- <field><id>expires_flag</id> <type>CheckBoxField</type>
- <values>
- <alternate_name></alternate_name>
- <hidden type="int">0</hidden>
- <css_class></css_class>
- <default type="int">0</default>
- <title>Expire flag</title>
- <description>Turn on expiration time?</description>
- <external_validator></external_validator>
- <extra></extra>
- </values>
- <tales>
- </tales>
- </field>
- </fields>
- </group>
- </groups>
-</form>'''
- XMLToForm(xml, form)
- s = formToXML(form)
- f = open('output1.txt', 'w')
- f.write(s)
- f.close()
- form2 = ZMIForm('another', 'Something')
- XMLToForm(xml, form2)
- f = open('output2.txt', 'w')
- f.write(formToXML(form2))
- f.close()
-
-
- def test_escaping(self):
- """ test if the necessary elements are escaped in the XML.
- (Actually this test is very incomplete)
- """
- form = ZMIForm('test', '<EncodingTest>')
- # XXX don't test escaping of name, as needs to be javascript
- # valid anyway?
- form.name = 'name'
- form.add_group('a & b')
-
- form.manage_addField('string_field', '<string> Field', 'StringField')
- form.manage_addField('int_field', '<int> Field', 'IntegerField')
- form.manage_addField('float_field', '<Float> Field', 'FloatField')
- form.manage_addField('date_field', '<Date> Field', 'DateTimeField')
- form.manage_addField('list_field', '<List> Field', 'ListField')
- form.manage_addField('multi_field', '<Checkbox> Field', 'MultiCheckBoxField')
-
- form2 = ZMIForm('test2', 'ValueTest')
-
- xml = formToXML(form)
- XMLToForm(xml, form2)
-
- for field in form.get_fields():
- self.assert_(form2.has_field(field.getId()))
- field2 = getattr(form2, field.getId())
- # XXX test if values are the same
- self.assertEquals(field.values, field2.values)
- # test if default renderings are the same
- self.assertEquals(field.render(), field2.render())
-
- self.assertEquals(form.title, form2.title)
- self.assertEquals(form.name, form2.name)
- self.assertEquals(form.action, form2.action)
- self.assertEquals(form.enctype, form2.enctype)
- self.assertEquals(form.method, form2.method)
-
- # if we have forgotten something, this will usually remind us ;-)
- self.assertEquals(form.render(), form2.render())
-
-
- def test_messages(self):
- """ test if the error messages are exported
- """
- form = ZMIForm('test', '<EncodingTest>')
- form.manage_addField('int_field', 'int Field', 'IntegerField')
-
- form2 = ZMIForm('test2', 'ValueTest')
- request = FakeRequest()
- for message_key in form.int_field.get_error_names():
- request[message_key] = 'test message for error key <%s>' % message_key
- form.int_field.manage_messages(REQUEST=request)
-
-
- xml = formToXML(form)
- XMLToForm(xml, form2)
- # print xml
-
- request.clear()
- request['field_int_field'] = 'not a number'
-
- try:
- form.validate_all(request)
- self.fail('form should fail in validation')
- except FormValidationError, e:
- self.assertEquals(1, len(e.errors))
- text1 = e.errors[0].error_text
-
- try:
- form2.validate_all(request)
- self.fail('form2 should fail in validation')
- except FormValidationError, e:
- self.assertEquals(1, len(e.errors))
- text2 = e.errors[0].error_text
-
- self.assertEquals(text1, text2)
-
-
- def test_fieldValueTypes(self):
- """ test checking if the field values are of the proper type.
- after reading from XML some field values may not have the right type,
- if they have a special type (currently int and "list").
- Also tests if rendering and validation are the same
- between the original form and the one after one form -> xml -> form
- roundtrip.
- """
-
- form = ZMIForm('test', 'ValueTest')
- form.manage_addField('int_field', 'Test Integer Field', 'IntegerField')
- form.manage_addField('float_field', 'Test Float Field', 'FloatField')
- form.manage_addField('date_field', 'Test Date Field', 'DateTimeField')
- form.manage_addField('list_field', 'Test List Field', 'ListField')
- form.manage_addField('multi_field', 'Test Checkbox Field', 'MultiCheckBoxField')
- form.manage_addField('link_field', 'Test Link Field', 'LinkField')
- form.manage_addField('empty_field', 'Test Empty Field', 'StringField')
- int_field = getattr(form, 'int_field')
- float_field = getattr(form, 'float_field')
- date_field = getattr(form, 'date_field')
- list_field = getattr(form, 'list_field')
- multi_field = getattr(form, 'multi_field')
- link_field = getattr(form, 'link_field')
- empty_field = getattr(form, 'empty_field')
-
- # XXX editing fields by messing with a fake request
- # -- any better way to do this?
- default_values = {'field_title': 'Test Title',
- 'field_display_width': '92',
- 'field_required':'checked',
- 'field_enabled':'checked',
- }
- try:
- request = FakeRequest()
- for key, sub_field in int_field.form.fields.iteritems():
- request['field_%s' % key] = sub_field.render_pdf()
- request.update(default_values)
- request.update( {'field_default':'42',
- 'field_enabled':'checked'})
- int_field.manage_edit(REQUEST=request)
-
- request.clear()
- for key, sub_field in float_field.form.fields.iteritems():
- request['field_%s' % key] = sub_field.render_pdf()
- request.update(default_values)
- request.update( {'field_default':'1.7',
- 'field_input_style':'-1234.5'})
- float_field.manage_edit(REQUEST=request)
-
- # XXX cannot test "defaults to now", as this may fail randomly
- request.clear()
- for key, sub_field in date_field.form.fields.iteritems():
- request['field_%s' % key] = sub_field.render_pdf()
- request.update(default_values)
- request.update( {'field_input_style': 'list',
- 'field_input_order': 'mdy',
- 'field_date_only': '',
- 'field_css_class': 'test_css',
- 'field_time_separator': '$',
- 'subfield_field_default_year': '',
- 'subfield_field_default_month': '',
- 'subfield_field_default_day': '',
- 'subfield_field_default_hour': '',
- 'subfield_field_default_minute': '',
- 'subfield_field_start_datetime_year': '',
- 'subfield_field_start_datetime_month': '',
- 'subfield_field_start_datetime_day': '',
- 'subfield_field_start_datetime_hour': '',
- 'subfield_field_start_datetime_minute': '',
- 'subfield_field_end_datetime_year': '',
- 'subfield_field_end_datetime_month': '',
- 'subfield_field_end_datetime_day': '',
- 'subfield_field_end_datetime_hour': '',
- 'subfield_field_end_datetime_minute': '',
- })
- date_field.manage_edit(REQUEST=request)
-
- request.clear()
- for key, sub_field in list_field.form.fields.iteritems():
- request['field_%s' % key] = sub_field.render_pdf()
- request.update(default_values)
- request.update( {'field_default':'foo',
- 'field_size':'1',
- 'field_items':'Foo | foo\n Bar | bar'})
- list_field.manage_edit(REQUEST=request)
-
- request.clear()
- for key, sub_field in multi_field.form.fields.iteritems():
- request['field_%s' % key] = sub_field.render_pdf()
- request.update(default_values)
- request.update( {'field_default':'foo',
- 'field_size':'3',
- 'field_items':'Foo | foo\n Bar | bar\nBaz | baz',
- 'field_orientation':'horizontal',
- 'field_view_separator':'<br />\n',
- })
- multi_field.manage_edit(REQUEST=request)
-
- request.clear()
- for key, sub_field in link_field.form.fields.iteritems():
- request['field_%s' % key] = sub_field.render_pdf()
- request.update(default_values)
- request.update( {'field_default':'http://www.absurd.org',
- 'field_required':'1',
- 'field_check_timeout':'5.0',
- 'field_link_type':'external',
- })
- link_field.manage_edit(REQUEST=request)
-
- request.clear()
- for key, sub_field in empty_field.form.fields.iteritems():
- request['field_%s' % key] = sub_field.render_pdf()
- request.update(default_values)
- request.update( {'field_default':'None',
- 'field_required':'',
- })
- empty_field.manage_edit(REQUEST=request)
-
- except ValidationError, e:
- self.fail('error when editing field %s; error message: %s' %
- (e.field_id, e.error_text) )
-
- form2 = ZMIForm('test2', 'ValueTest')
-
- xml = formToXML(form)
- XMLToForm(xml, form2)
-
- for field in form.get_fields():
- self.assert_(form2.has_field(field.getId()))
- field2 = getattr(form2, field.getId())
- # XXX test if values are the same
- self.assertEquals(field.values, field2.values)
- # test if default renderings are the same
- self.assertEquals(field.render(), field2.render())
-
- # brute force compare ...
- self.assertEquals(form.render(), form2.render())
- request.clear()
- request['field_int_field'] = '42'
- request['field_float_field'] = '2.71828'
- request['subfield_field_date_field_month'] = '11'
- request['subfield_field_date_field_day'] = '11'
- request['subfield_field_date_field_year'] = '2011'
- request['subfield_field_date_field_hour'] = '09'
- request['subfield_field_date_field_minute'] = '59'
- request['field_list_field'] = 'bar'
- request['field_multi_field'] = ['bar', 'baz']
- request['field_link_field'] = 'http://www.zope.org'
- request['default_field_multi_field'] = ''
- request['field_empty_field'] = ''
- try:
- result1 = form.validate_all(request)
- except FormValidationError, e:
- # XXX only render first error ...
- self.fail('error when editing form1, field %s; error message: %s' %
- (e.errors[0].field_id, e.errors[0].error_text) )
-
- try:
- result2 = form2.validate_all(request)
- except FormValidationError, e:
- # XXX only render first error ...
- self.fail('error when editing form1, field %s; error message: %s' %
- (e.errors[0].field_id, e.errors[0].error_text) )
- self.assertEquals(result1, result2)
- self.assertEquals(42, result2['int_field'])
- self.assertEquals(2.71828, result2['float_field'])
-
- # check link field timeout value
- self.assertEquals(link_field.get_value('check_timeout'),
- form2.link_field.get_value('check_timeout'))
-
- # XXX not tested: equal form validation failure on invalid input
-
-
-
- def test_emptyGroup(self):
- """ test bugfix: empty groups are allowed in the XMLForm """
- form = ZMIForm('test', 'GroupTest')
- form.add_group('empty')
-
- form2 = ZMIForm('test2', 'GroupTestCopy')
-
- xml = formToXML(form)
- XMLToForm(xml, form2)
- # print xml
-
- # XXX actually the empty group is not rendered anyway, but
- # if we get here, we are behind the bug anyway ...
- self.assertEquals(form.render(), form2.render())
-
- self.assertEquals(form.get_groups(), form2.get_groups())
-
-
-def test_suite():
- suite = unittest.TestSuite()
-
- suite.addTest(unittest.makeSuite(SerializeTestCase, 'test'))
- return suite
-
-def main():
- unittest.TextTestRunner().run(test_suite())
-
-if __name__ == '__main__':
- main()
-
Removed: erp5/trunk/products/Formulator/tests/test_validators.py
URL: http://svn.erp5.org/erp5/trunk/products/Formulator/tests/test_validators.py?rev=26940&view=auto
==============================================================================
--- erp5/trunk/products/Formulator/tests/test_validators.py [utf8] (original)
+++ erp5/trunk/products/Formulator/tests/test_validators.py (removed)
@@ -1,464 +1,0 @@
-# -*- coding: utf-8 -*-
-import unittest
-import ZODB
-import OFS.Application
-from Products.Formulator import Validator
-from Products.Formulator.StandardFields import DateTimeField
-from Testing import ZopeTestCase
-ZopeTestCase.installProduct('Formulator')
-
-class TestField:
- def __init__(self, id, **kw):
- self.id = id
- self.kw = kw
-
- def get_value(self, name):
- # XXX hack
- return self.kw.get(name, 0)
-
- def get_error_message(self, key):
- return "nothing"
-
- def get_form_encoding(self):
- # XXX fake ... what if installed python does not support utf-8?
- return "utf-8"
-
- def has_value(self, id):
- return self.kw.has_key(id)
-
-class ValidatorTestCase(unittest.TestCase):
- def assertValidatorRaises(self, exception, error_key, f, *args, **kw):
- try:
- apply(f, args, kw)
- except exception, e:
- if hasattr(e, 'error_key') and e.error_key != 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):
- def setUp(self):
- self.v = Validator.StringValidatorInstance
-
- def tearDown(self):
- pass
-
- def test_basic(self):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=0, unicode=0),
- 'f', {'f' : 'foo'})
- self.assertEqual('foo', result)
-
- def test_htmlquotes(self):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=0, unicode=0),
- 'f', {'f' : '<html>'})
- self.assertEqual('<html>', result)
-
- def test_encoding(self):
- utf8_string = 'M\303\274ller' # this is a Müller
- unicode_string = unicode(utf8_string, 'utf-8')
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=0, unicode=1),
- 'f', {'f' : utf8_string})
- self.assertEqual(unicode_string, result)
-
- def test_strip_whitespace(self):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=0, unicode=0),
- 'f', {'f' : ' foo '})
- self.assertEqual('foo', result)
-
- def test_error_too_long(self):
- self.assertValidatorRaises(
- Validator.ValidationError, 'too_long',
- self.v.validate,
- TestField('f', max_length=10, truncate=0, required=0, unicode=0),
- 'f', {'f' : 'this is way too long'})
-
- def test_error_truncate(self):
- result = self.v.validate(
- TestField('f', max_length=10, truncate=1, required=0, unicode=0),
- 'f', {'f' : 'this is way too long'})
- self.assertEqual('this is way too long'[:10], result)
-
- def test_error_required_not_found(self):
- # empty string
- self.assertValidatorRaises(
- Validator.ValidationError, 'required_not_found',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {'f': ''})
- # whitespace only
- self.assertValidatorRaises(
- Validator.ValidationError, 'required_not_found',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {'f': ' '})
- # not in dict
- self.assertValidatorRaises(
- Exception, 'required_not_found',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {})
-
- def test_whitespace_preserve(self):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=0, unicode=0,
- whitespace_preserve=1),
- 'f', {'f' : ' '})
- self.assertEqual(' ', result)
-
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=0, unicode=0,
- whitespace_preserve=0),
- 'f', {'f' : ' '})
- self.assertEqual('', result)
-
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=0, unicode=0,
- whitespace_preserve=1),
- 'f', {'f' : ' foo '})
- self.assertEqual(' foo ', result)
-
-class EmailValidatorTestCase(ValidatorTestCase):
-
- def setUp(self):
- self.v = Validator.EmailValidatorInstance
-
- def test_basic(self):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {'f': 'foo at bar.com'})
- self.assertEquals('foo at bar.com', result)
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {'f': 'm.faassen at vet.uu.nl'})
- self.assertEquals('m.faassen at vet.uu.nl', result)
-
- def test_error_not_email(self):
- # a few wrong email addresses should raise error
- self.assertValidatorRaises(
- Validator.ValidationError, 'not_email',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {'f': 'foo at bar.com.'})
- self.assertValidatorRaises(
- Validator.ValidationError, 'not_email',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {'f': '@bar.com'})
-
- def test_error_required_not_found(self):
- # empty string
- self.assertValidatorRaises(
- Validator.ValidationError, 'required_not_found',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1, unicode=0),
- 'f', {'f': ''})
-
-# skip PatternValidator for now
-
-class BooleanValidatorTestCase(ValidatorTestCase):
- def setUp(self):
- self.v = Validator.BooleanValidatorInstance
-
- def tearDown(self):
- pass
-
- def test_basic(self):
- result = self.v.validate(
- TestField('f'),
- 'f', {'f': ''})
- self.assertEquals(0, result)
- result = self.v.validate(
- TestField('f'),
- 'f', {'f': 1})
- self.assertEquals(1, result)
- result = self.v.validate(
- TestField('f'),
- 'f', {'f': 0})
- self.assertEquals(0, result)
-
-class IntegerValidatorTestCase(ValidatorTestCase):
- def setUp(self):
- self.v = Validator.IntegerValidatorInstance
-
- def test_basic(self):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0,
- required=0, start="", end=""),
- 'f', {'f': '15'})
- self.assertEquals(15, result)
-
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0,
- required=0, start="", end=""),
- 'f', {'f': '0'})
- self.assertEquals(0, result)
-
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0,
- required=0, start="", end=""),
- 'f', {'f': '-1'})
- self.assertEquals(-1, result)
-
- def test_no_entry(self):
- # result should be empty string if nothing entered
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0,
- required=0, start="", end=""),
- 'f', {'f': ''})
- self.assertEquals("", result)
-
- def test_ranges(self):
- # first check whether everything that should be in range is
- # in range
- for i in range(0, 100):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0, required=1,
- start=0, end=100),
- 'f', {'f': str(i)})
- self.assertEquals(i, result)
- # now check out of range errors
- self.assertValidatorRaises(
- Validator.ValidationError, 'integer_out_of_range',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start=0, end=100),
- 'f', {'f': '100'})
- self.assertValidatorRaises(
- Validator.ValidationError, 'integer_out_of_range',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start=0, end=100),
- 'f', {'f': '200'})
- self.assertValidatorRaises(
- Validator.ValidationError, 'integer_out_of_range',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start=0, end=100),
- 'f', {'f': '-10'})
- # check some weird ranges
- self.assertValidatorRaises(
- Validator.ValidationError, 'integer_out_of_range',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start=10, end=10),
- 'f', {'f': '10'})
- self.assertValidatorRaises(
- Validator.ValidationError, 'integer_out_of_range',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start=0, end=0),
- 'f', {'f': '0'})
- self.assertValidatorRaises(
- Validator.ValidationError, 'integer_out_of_range',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start=0, end=-10),
- 'f', {'f': '-1'})
-
- def test_error_not_integer(self):
- self.assertValidatorRaises(
- Validator.ValidationError, 'not_integer',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start="", end=""),
- 'f', {'f': 'foo'})
-
- self.assertValidatorRaises(
- Validator.ValidationError, 'not_integer',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start="", end=""),
- 'f', {'f': '1.0'})
-
- self.assertValidatorRaises(
- Validator.ValidationError, 'not_integer',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start="", end=""),
- 'f', {'f': '1e'})
-
- def test_error_required_not_found(self):
- # empty string
- self.assertValidatorRaises(
- Validator.ValidationError, 'required_not_found',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start="", end=""),
- 'f', {'f': ''})
- # whitespace only
- self.assertValidatorRaises(
- Validator.ValidationError, 'required_not_found',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start="", end=""),
- 'f', {'f': ' '})
- # not in dict
- self.assertValidatorRaises(
- Exception, 'required_not_found',
- self.v.validate,
- TestField('f', max_length=0, truncate=0, required=1,
- start="", end=""),
- 'f', {})
-
-class FloatValidatorTestCase(ValidatorTestCase):
- def setUp(self):
- self.v = Validator.FloatValidatorInstance
-
- def test_basic(self):
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0,
- required=0, input_style="-1234.5"),
- 'f', {'f': '15.5'})
- self.assertEqual(15.5, result)
-
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0,
- required=0, input_style="-1234.5"),
- 'f', {'f': '15.0'})
- self.assertEqual(15.0, result)
-
- result = self.v.validate(
- TestField('f', max_length=0, truncate=0,
- required=0, input_style="-1234.5"),
- 'f', {'f': '15'})
- self.assertEqual(15.0, result)
-
- def test_error_not_float(self):
- self.assertValidatorRaises(
- Validator.ValidationError, 'not_float',
- self.v.validate,
- TestField('f', max_length=0, truncate=0,
- required=1, input_style="-1234.5"),
- 'f', {'f': '1f'})
-
-class DateTimeValidatorTestCase(ValidatorTestCase):
- def setUp(self):
- self.v = Validator.DateTimeValidatorInstance
-
- def test_normal(self):
- result = self.v.validate(
- DateTimeField('f'),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1',
- 'subfield_f_hour': '10',
- 'subfield_f_minute': '30'})
- self.assertEquals(2002, result.year())
- self.assertEquals(12, result.month())
- self.assertEquals(1, result.day())
- self.assertEquals(10, result.hour())
- self.assertEquals(30, result.minute())
-
- def test_ampm(self):
- result = self.v.validate(
- DateTimeField('f', ampm_time_style=1),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1',
- 'subfield_f_hour': '10',
- 'subfield_f_minute': '30',
- 'subfield_f_ampm': 'am'})
- self.assertEquals(2002, result.year())
- self.assertEquals(12, result.month())
- self.assertEquals(1, result.day())
- self.assertEquals(10, result.hour())
- self.assertEquals(30, result.minute())
-
- result = self.v.validate(
- DateTimeField('f', ampm_time_style=1),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1',
- 'subfield_f_hour': '10',
- 'subfield_f_minute': '30',
- 'subfield_f_ampm': 'pm'})
- self.assertEquals(2002, result.year())
- self.assertEquals(12, result.month())
- self.assertEquals(1, result.day())
- self.assertEquals(22, result.hour())
- self.assertEquals(30, result.minute())
-
- self.assertValidatorRaises(
- KeyError, 'not_datetime',
- self.v.validate,
- DateTimeField('f', ampm_time_style=1),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1',
- 'subfield_f_hour': '10',
- 'subfield_f_minute': '30'})
-
- def test_date_only(self):
- result = self.v.validate(
- DateTimeField('f', date_only=1),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1'})
- self.assertEquals(2002, result.year())
- self.assertEquals(12, result.month())
- self.assertEquals(1, result.day())
- self.assertEquals(0, result.hour())
- self.assertEquals(0, result.minute())
-
- result = self.v.validate(
- DateTimeField('f', date_only=1),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1',
- 'subfield_f_hour': '10',
- 'subfield_f_minute': '30'})
- self.assertEquals(2002, result.year())
- self.assertEquals(12, result.month())
- self.assertEquals(1, result.day())
- self.assertEquals(0, result.hour())
- self.assertEquals(0, result.minute())
-
- def test_allow_empty_time(self):
- result = self.v.validate(
- DateTimeField('f', allow_empty_time=1, date_only=1),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1'})
- self.assertEquals(2002, result.year())
- self.assertEquals(12, result.month())
- self.assertEquals(1, result.day())
- self.assertEquals(0, result.hour())
- self.assertEquals(0, result.minute())
-
- result = self.v.validate(
- DateTimeField('f', allow_empty_time=1),
- 'f', {'subfield_f_year': '2002',
- 'subfield_f_month': '12',
- 'subfield_f_day': '1',
- 'subfield_f_hour': '10',
- 'subfield_f_minute': '30'})
- self.assertEquals(2002, result.year())
- self.assertEquals(12, result.month())
- self.assertEquals(1, result.day())
- self.assertEquals(10, result.hour())
- self.assertEquals(30, result.minute())
-
-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'))
- suite.addTest(unittest.makeSuite(DateTimeValidatorTestCase, 'test'))
-
- return suite
-
-def main():
- unittest.TextTestRunner().run(test_suite())
-
-if __name__ == '__main__':
- main()
-
More information about the Erp5-report
mailing list