[Checkins] SVN: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_ More widget tests moved over to zope.formlib.
Martijn Faassen
faassen at startifact.com
Wed Dec 30 16:41:50 EST 2009
Log message for revision 107395:
More widget tests moved over to zope.formlib.
Changed:
D zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_checkboxwidget.py
D zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_filewidget.py
D zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_floatwidget.py
D zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_selectwidget.py
D zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_sequencewidget.py
D zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textareawidget.py
D zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textwidget.py
-=-
Deleted: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_checkboxwidget.py
===================================================================
--- zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_checkboxwidget.py 2009-12-30 21:41:42 UTC (rev 107394)
+++ zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_checkboxwidget.py 2009-12-30 21:41:49 UTC (rev 107395)
@@ -1,180 +0,0 @@
-##############################################################################
-#
-# 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.1 (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.
-#
-##############################################################################
-"""Checkbox Widget tests
-
-$Id$
-"""
-import unittest
-from zope.testing import doctest
-from zope.formlib.interfaces import IInputWidget
-from zope.app.form.browser import CheckBoxWidget
-from zope.publisher.browser import TestRequest
-from zope.schema import Bool
-from zope.interface.verify import verifyClass
-
-from zope.formlib.interfaces import MissingInputError
-from zope.formlib.tests.test_browserwidget import SimpleInputWidgetTest
-
-
-class CheckBoxWidgetTest(SimpleInputWidgetTest):
- """Documents and tests thec checkbox widget.
-
- >>> verifyClass(IInputWidget, CheckBoxWidget)
- True
-
- The checkbox widget works with Bool fields:
-
- >>> field = Bool(__name__='foo', title=u'on')
- >>> request = TestRequest()
- >>> widget = CheckBoxWidget(field, request)
-
- hasInput returns True when the request contains the field.<name>.used
- value:
-
- >>> 'field.foo.used' in request.form
- False
- >>> widget.hasInput()
- False
- >>> request.form['field.foo.used'] = ''
- >>> widget.hasInput()
- True
-
- getInputValue returns True when field.<name> equals (and only equals) 'on':
-
- >>> 'field.foo' in request.form
- False
- >>> widget.getInputValue()
- False
- >>> request.form['field.foo'] = 'true'
- >>> widget.getInputValue()
- False
- >>> request.form['field.foo'] = 'on'
- >>> widget.getInputValue()
- True
-
- Below is HTML output of rendered checkbox widgets. We will first define
- a helper method condense the HTML output for display in this test:
-
- >>> def normalize(s):
- ... return '\\n '.join(s.split())
-
- Default widget rendering:
-
- >>> print normalize( widget() )
- <input
- class="hiddenType"
- id="field.foo.used"
- name="field.foo.used"
- type="hidden"
- value=""
- />
- <input
- class="checkboxType"
- checked="checked"
- id="field.foo"
- name="field.foo"
- type="checkbox"
- value="on"
- />
-
- Hidden rendering:
-
- >>> print normalize( widget.hidden() )
- <input
- class="hiddenType"
- id="field.foo"
- name="field.foo"
- type="hidden"
- value="on"
- />
-
- Calling setRenderedValue will change what gets output:
-
- >>> widget.setRenderedValue(False)
- >>> print normalize( widget() )
- <input
- class="hiddenType"
- id="field.foo.used"
- name="field.foo.used"
- type="hidden"
- value=""
- />
- <input
- class="checkboxType"
- id="field.foo"
- name="field.foo"
- type="checkbox"
- value="on"
- />
-
- The checkbox widget does not support None values, so a Bool required
- constraint will always be met with checkbox input:
-
- >>> field.required = True
- >>> widget.getInputValue()
- True
- """
-
- _FieldFactory = Bool
- _WidgetFactory = CheckBoxWidget
-
- def testProperties(self):
- self.assertEqual(self._widget.tag, 'input')
- self.assertEqual(self._widget.type, 'checkbox')
- self.assertEqual(self._widget.cssClass, '')
- self.assertEqual(self._widget.extra, '')
- self.assertEqual(self._widget.default, 0)
-
- def testRender(self):
- value = 1
- self._widget.setRenderedValue(value)
- check_list = ('type="checkbox"', 'id="field.foo"',
- 'name="field.foo"', 'checked="checked"')
- self.verifyResult(self._widget(), check_list)
- value = 0
- self._widget.setRenderedValue(value)
- check_list = check_list[:-1]
- self.verifyResult(self._widget(), check_list)
- check_list = ('type="hidden"',) + check_list[1:-1]
- self.verifyResult(self._widget.hidden(), check_list)
- check_list = ('style="color: red"',) + check_list
- self._widget.extra = 'style="color: red"'
- self.verifyResult(self._widget.hidden(), check_list)
-
- def test_getInputValue(self):
- self._widget.request.form['field.foo'] = 'on'
- self.assertEqual(self._widget.getInputValue(), True)
- self._widget.request.form['field.foo'] = 'positive'
- self.assertEqual(self._widget.getInputValue(), False)
- del self._widget.request.form['field.foo']
- self._widget.request.form['field.foo.used'] = ''
- self.assertEquals(self._widget.getInputValue(), False)
- del self._widget.request.form['field.foo.used']
- self.assertRaises(MissingInputError, self._widget.getInputValue)
-
- def test_required(self):
- # checkbox widgets are never required, since there's no way to
- # set it to "no value"
- self.failIf(self._widget.required)
- self.assert_(self._widget.context.required)
-
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(CheckBoxWidgetTest),
- doctest.DocTestSuite(),
- ))
-
-if __name__=='__main__':
- unittest.main(defaultTest='test_suite')
Deleted: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_filewidget.py
===================================================================
--- zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_filewidget.py 2009-12-30 21:41:42 UTC (rev 107394)
+++ zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_filewidget.py 2009-12-30 21:41:49 UTC (rev 107395)
@@ -1,83 +0,0 @@
-##############################################################################
-#
-# 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.1 (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.
-#
-##############################################################################
-"""File Widget tests
-
-$Id$
-"""
-import unittest
-
-from zope.testing import doctest
-from StringIO import StringIO
-from zope.formlib.interfaces import IInputWidget
-from zope.app.form.browser import FileWidget
-
-from zope.formlib.tests.test_browserwidget import (
- SimpleInputWidgetTest)
-
-from zope.interface.verify import verifyClass
-
-
-class FileWidgetTest(SimpleInputWidgetTest):
- """Documents and tests the file widget.
-
- >>> verifyClass(IInputWidget, FileWidget)
- True
- """
-
- _WidgetFactory = FileWidget
-
- def setUp(self):
- super(FileWidgetTest, self).setUp()
- file = StringIO('Foo Value')
- file.filename = 'test.txt'
- self._widget.request.form['field.foo'] = file
-
- def testProperties(self):
- self.assertEqual(self._widget.tag, 'input')
- self.assertEqual(self._widget.type, 'file')
- self.assertEqual(self._widget.cssClass, '')
- self.assertEqual(self._widget.extra, '')
- self.assertEqual(self._widget.default, '')
- self.assertEqual(self._widget.displayWidth, 20)
- self.assertEqual(self._widget.displayMaxWidth, '')
-
- def test_hasInput(self): # override the usual one
- del self._widget.request.form['field.foo']
- self._widget.request.form['field.foo.used'] = ''
- self.failUnless(self._widget.hasInput())
- del self._widget.request.form['field.foo.used']
- self.failIf(self._widget.hasInput())
-
- def testRender(self):
- value = 'Foo Value'
- self._widget.setRenderedValue(value)
- check_list = ('type="file"', 'id="field.foo"', 'name="field.foo"',
- 'size="20"')
-
- self.verifyResult(self._widget(), check_list)
- check_list = ('type="hidden"',) + check_list[1:-1]
- self.verifyResult(self._widget.hidden(), check_list)
- check_list = ('style="color: red"',) + check_list
- self._widget.extra = 'style="color: red"'
- self.verifyResult(self._widget.hidden(), check_list)
-
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(FileWidgetTest),
- doctest.DocTestSuite(),
- ))
-
-if __name__=='__main__':
- unittest.main(defaultTest='test_suite')
Deleted: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_floatwidget.py
===================================================================
--- zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_floatwidget.py 2009-12-30 21:41:42 UTC (rev 107394)
+++ zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_floatwidget.py 2009-12-30 21:41:49 UTC (rev 107395)
@@ -1,64 +0,0 @@
-##############################################################################
-#
-# 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.1 (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.
-#
-##############################################################################
-"""Float Widget tests
-
-$Id$
-"""
-import unittest
-from zope.testing import doctest
-from zope.formlib.tests.test_browserwidget import SimpleInputWidgetTest
-from zope.formlib.interfaces import IInputWidget
-from zope.app.form.browser import FloatWidget
-from zope.formlib.interfaces import ConversionError, WidgetInputError
-from zope.interface.verify import verifyClass
-
-from zope.schema import Float
-
-
-class FloatWidgetTest(SimpleInputWidgetTest):
- """Documents and tests the float widget.
-
- >>> verifyClass(IInputWidget, FloatWidget)
- True
- """
-
- _FieldFactory = Float
- _WidgetFactory = FloatWidget
-
- def test_hasInput(self):
- del self._widget.request.form['field.foo']
- self.failIf(self._widget.hasInput())
- # widget has input, even if input is an empty string
- self._widget.request.form['field.foo'] = u''
- self.failUnless(self._widget.hasInput())
- self._widget.request.form['field.foo'] = u'123'
- self.failUnless(self._widget.hasInput())
-
- def test_getInputValue(self):
- self._widget.request.form['field.foo'] = u''
- self.assertRaises(WidgetInputError, self._widget.getInputValue)
- self._widget.request.form['field.foo'] = u'123.45'
- self.assertEquals(self._widget.getInputValue(), 123.45)
- self._widget.request.form['field.foo'] = u'abc'
- self.assertRaises(ConversionError, self._widget.getInputValue)
-
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(FloatWidgetTest),
- doctest.DocTestSuite(),
- ))
-
-if __name__=='__main__':
- unittest.main(defaultTest='test_suite')
Deleted: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_selectwidget.py
===================================================================
--- zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_selectwidget.py 2009-12-30 21:41:42 UTC (rev 107394)
+++ zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_selectwidget.py 2009-12-30 21:41:49 UTC (rev 107395)
@@ -1,79 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2004 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (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.
-#
-##############################################################################
-"""Select Widget Tests
-
-$Id$
-"""
-import unittest
-
-from zope.schema import Choice, List
-from zope.app.form.browser import SelectWidget
-from zope.publisher.browser import TestRequest
-
-choice = Choice(
- title=u"Number",
- description=u"The Number",
- values=[1, 2, 3])
-
-sequence = List(
- title=u"Numbers",
- description=u"The Numbers",
- value_type=choice)
-
-
-class SelectWidgetTest(unittest.TestCase):
-
- def _makeWidget(self, form):
- request = TestRequest(form=form)
- return SelectWidget(sequence, choice.vocabulary, request)
-
-
-select_html = '''<div>
-<div class="value">
-<select id="field.terms" name="field.terms" size="5" >
-<option value="< foo">< foo</option>
-<option value="bar/>">bar/></option>
-<option value="&blah&">&blah&</option>
-</select>
-</div>
-<input name="field.terms-empty-marker" type="hidden" value="1" />
-</div>'''
-
-class SelectWidgetHTMLEncodingTest(unittest.TestCase):
-
- def testOptionEncoding(self):
- choice = Choice(
- title=u"Number",
- description=u"The Number",
- values=['< foo', 'bar/>', '&blah&'])
-
- sequence = List(
- __name__="terms",
- title=u"Numbers",
- description=u"The Numbers",
- value_type=choice)
-
- request = TestRequest()
- sequence = sequence.bind(object())
- widget = SelectWidget(sequence, choice.vocabulary, request)
- self.assertEqual(widget(), select_html)
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(SelectWidgetTest),
- unittest.makeSuite(SelectWidgetHTMLEncodingTest)
- ))
-
-if __name__ == '__main__':
- unittest.main(defaultTest="test_suite")
Deleted: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_sequencewidget.py
===================================================================
--- zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_sequencewidget.py 2009-12-30 21:41:42 UTC (rev 107394)
+++ zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_sequencewidget.py 2009-12-30 21:41:49 UTC (rev 107395)
@@ -1,434 +0,0 @@
-##############################################################################
-#
-# 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.1 (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.
-#
-##############################################################################
-"""Sequence Field Widget tests.
-
-$Id$
-"""
-import unittest
-from zope.interface import Interface, implements
-from zope.schema import Tuple, List, TextLine
-from zope.schema.interfaces import ITextLine
-from zope.publisher.browser import TestRequest
-from zope.testing import doctest
-
-from zope.app.testing import ztapi, setup
-from zope.app.form.browser import TextWidget, ObjectWidget, DisplayWidget
-from zope.app.form.browser import TupleSequenceWidget, ListSequenceWidget
-from zope.app.form.browser import SequenceDisplayWidget
-from zope.app.form.browser import SequenceWidget
-from zope.formlib.interfaces import IDisplayWidget
-from zope.formlib.interfaces import IInputWidget, MissingInputError
-from zope.formlib.interfaces import IWidgetInputError, WidgetInputError
-from zope.app.form.browser.interfaces import IWidgetInputErrorView
-from zope.formlib.widget import CustomWidgetFactory
-from zope.app.form.browser.exception import WidgetInputErrorView
-
-from zope.app.form.browser.tests.support import VerifyResults
-from zope.formlib.tests.test_browserwidget import BrowserWidgetTest
-
-
-class SequenceWidgetTestHelper(object):
-
- def setUpContent(self, desc=u'', title=u'Foo Title'):
- class ITestContent(Interface):
- foo = self._FieldFactory(
- title=title,
- description=desc,
- )
- class TestObject(object):
- implements(ITestContent)
-
- self.content = TestObject()
- self.field = ITestContent['foo'].bind(self.content)
- self.request = TestRequest(HTTP_ACCEPT_LANGUAGE='pl')
- self.request.form['field.foo'] = u'Foo Value'
- self._widget = self._WidgetFactory(
- self.field, self.field.value_type, self.request)
-
- def setUp(self):
- setup.placefulSetUp()
- self.setUpContent()
-
- def _FieldFactory(self, **kw):
- kw.update({
- '__name__': u'foo',
- 'value_type': TextLine(__name__=u'bar')})
- return Tuple(**kw)
-
-
-class SequenceWidgetTest(SequenceWidgetTestHelper, BrowserWidgetTest):
- """Documents and tests the tuple and list (sequence) widgets.
-
- >>> from zope.interface.verify import verifyClass
- >>> verifyClass(IInputWidget, TupleSequenceWidget)
- True
- >>> verifyClass(IInputWidget, ListSequenceWidget)
- True
- """
-
- _WidgetFactory = TupleSequenceWidget
-
- def testRender(self):
- pass
-
- def setUp(self):
- super(SequenceWidgetTest, self).setUp()
- ztapi.browserViewProviding(ITextLine, TextWidget, IInputWidget)
- ztapi.browserViewProviding(IWidgetInputError, WidgetInputErrorView,
- IWidgetInputErrorView)
-
- def test_haveNoData(self):
- self.failIf(self._widget.hasInput())
-
- def test_hasInput(self):
- self._widget.request.form['field.foo.count'] = u'0'
- self.failUnless(self._widget.hasInput())
-
- def test_customWidgetFactory(self):
- """Verify that the widget can be constructed via the CustomWidgetFactory
- (Issue #293)
- """
-
- value_type = TextLine(__name__=u'bar')
- self.field = List( __name__=u'foo', value_type=value_type )
- request = TestRequest()
-
- # set up the custom widget factory and verify that it works
- sw = CustomWidgetFactory(ListSequenceWidget)
- widget = sw(self.field, request)
- assert widget.subwidget is None
- assert widget.context.value_type is value_type
-
- # set up a variant that specifies the subwidget to use and verify it
- class PollOption(object) : pass
- ow = CustomWidgetFactory(ObjectWidget, PollOption)
- sw = CustomWidgetFactory(ListSequenceWidget, subwidget=ow)
- widget = sw(self.field, request)
- assert widget.subwidget is ow
- assert widget.context.value_type is value_type
-
- def test_subwidget(self):
- """This test verifies that the specified subwidget is not ignored.
- (Issue #293)
- """
- self.field = List(__name__=u'foo',
- value_type=TextLine(__name__=u'bar'))
- request = TestRequest()
-
- class PollOption(object) : pass
- ow = CustomWidgetFactory(ObjectWidget, PollOption)
- widget = SequenceWidget(
- self.field, self.field.value_type, request, subwidget=ow)
- assert widget.subwidget is ow
-
- def test_list(self):
- self.field = List(
- __name__=u'foo',
- value_type=TextLine(__name__=u'bar'))
- request = TestRequest()
- widget = ListSequenceWidget(
- self.field, self.field.value_type, request)
- self.failIf(widget.hasInput())
- self.assertRaises(MissingInputError, widget.getInputValue)
-
- request = TestRequest(form={'field.foo.add': u'Add bar',
- 'field.foo.count': u'0'})
- widget = ListSequenceWidget(
- self.field, self.field.value_type, request)
- self.assert_(widget.hasInput())
- self.assertRaises(WidgetInputError, widget.getInputValue)
-
- request = TestRequest(form={'field.foo.0.bar': u'Hello world!',
- 'field.foo.count': u'1'})
- widget = ListSequenceWidget(
- self.field, self.field.value_type, request)
- self.assert_(widget.hasInput())
- self.assertEquals(widget.getInputValue(), [u'Hello world!'])
-
- def test_new(self):
- request = TestRequest()
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- self.failIf(widget.hasInput())
- self.assertRaises(MissingInputError, widget.getInputValue)
- check_list = ('input', 'name="field.foo.add"')
- self.verifyResult(widget(), check_list)
-
- def test_add(self):
- request = TestRequest(form={'field.foo.add': u'Add bar',
- 'field.foo.count': u'0'})
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- self.assert_(widget.hasInput())
- self.assertRaises(WidgetInputError, widget.getInputValue)
- check_list = (
- 'checkbox', 'field.foo.remove_0', 'input', 'field.foo.0.bar',
- 'submit', 'submit', 'field.foo.add'
- )
- self.verifyResult(widget(), check_list, inorder=True)
-
- def test_request(self):
- request = TestRequest(form={'field.foo.0.bar': u'Hello world!',
- 'field.foo.count': u'1'})
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- self.assert_(widget.hasInput())
- self.assertEquals(widget.getInputValue(), (u'Hello world!',))
-
- def test_existing(self):
- request = TestRequest()
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- widget.setRenderedValue((u'existing',))
- self.failIf(widget.hasInput())
- self.assertRaises(MissingInputError, widget.getInputValue)
- check_list = (
- 'checkbox', 'field.foo.remove_0', 'input', 'field.foo.0.bar',
- 'existing',
- 'submit', 'submit', 'field.foo.add',
- 'field.foo.count" value="1"',
- )
- self.verifyResult(widget(), check_list, inorder=True)
- widget.setRenderedValue((u'existing', u'second'))
- self.failIf(widget.hasInput())
- self.assertRaises(MissingInputError, widget.getInputValue)
- check_list = (
- 'checkbox', 'field.foo.remove_0', 'input', 'field.foo.0.bar',
- 'existing',
- 'checkbox', 'field.foo.remove_1', 'input', 'field.foo.1.bar',
- 'second',
- 'submit', 'submit', 'field.foo.add',
- 'field.foo.count" value="2"',
- )
- self.verifyResult(widget(), check_list, inorder=True)
-
- def test_remove(self):
- request = TestRequest(form={
- 'field.foo.remove_0': u'1',
- 'field.foo.0.bar': u'existing', 'field.foo.1.bar': u'second',
- 'field.foo.remove': u'Remove selected items',
- 'field.foo.count': u'2'})
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- widget.setRenderedValue((u'existing', u'second'))
- self.assertEquals(widget.getInputValue(), (u'second',))
- check_list = (
- 'checkbox', 'field.foo.remove_0', 'input', 'field.foo.0.bar',
- 'existing',
- 'checkbox', 'field.foo.remove_1', 'input', 'field.foo.1.bar',
- 'second',
- 'submit', 'submit', 'field.foo.add',
- 'field.foo.count" value="2"',
- )
- self.verifyResult(widget(), check_list, inorder=True)
-
- def test_min(self):
- request = TestRequest()
- self.field.min_length = 2
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- widget.setRenderedValue((u'existing',))
- self.assertRaises(MissingInputError, widget.getInputValue)
- check_list = (
- 'input', 'field.foo.0.bar', 'existing',
- 'input', 'field.foo.1.bar', 'value=""',
- 'submit', 'field.foo.add'
- )
- s = widget()
- self.verifyResult(s, check_list, inorder=True)
- self.assertEquals(s.find('checkbox'), -1)
-
- def test_max(self):
- request = TestRequest()
- self.field.max_length = 1
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- widget.setRenderedValue((u'existing',))
- self.assertRaises(MissingInputError, widget.getInputValue)
- s = widget()
- self.assertEquals(s.find('field.foo.add'), -1)
-
- def test_anonymousfield(self):
- self.field = Tuple(__name__=u'foo', value_type=TextLine())
- request = TestRequest()
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- widget.setRenderedValue((u'existing',))
- s = widget()
- check_list = (
- 'input', '"field.foo.0."', 'existing',
- 'submit', 'submit', 'field.foo.add'
- )
- s = widget()
- self.verifyResult(s, check_list, inorder=True)
-
- def test_usererror(self):
- self.field = Tuple(__name__=u'foo',
- value_type=TextLine(__name__='bar'))
- request = TestRequest(form={
- 'field.foo.0.bar': u'', 'field.foo.1.bar': u'nonempty',
- 'field.foo.count': u'2'})
- widget = TupleSequenceWidget(
- self.field, self.field.value_type, request)
- s = widget()
- # Rendering a widget should not raise errors!
- result = widget()
-
- data = widget._generateSequence()
- self.assertEquals(data, [None, u'nonempty'])
-
- def doctest_widgeterrors(self):
- """Test that errors on subwidgets appear
-
- >>> field = Tuple(__name__=u'foo',
- ... value_type=TextLine(__name__='bar'))
- >>> request = TestRequest(form={
- ... 'field.foo.0.bar': u'',
- ... 'field.foo.1.bar': u'nonempty',
- ... 'field.foo.count': u'2'})
- >>> widget = TupleSequenceWidget(field, field.value_type, request)
-
- If we render the widget, we see no errors:
-
- >>> print widget()
- <BLANKLINE>
- ...
- <tr>
- <td>
- <input class="editcheck" type="checkbox"
- name="field.foo.remove_0" />
- </td>
- <td>
- <input class="textType" id="field.foo.0.bar"
- name="field.foo.0.bar"
- size="20" type="text" value="" />
- </td>
- </tr>
- ...
-
- However, if we call getInputValue or hasValidInput, the
- errors on the widgets are preserved and displayed:
-
- >>> widget.hasValidInput()
- False
-
- >>> print widget()
- <BLANKLINE>
- ...
- <tr>
- <td>
- <input class="editcheck" type="checkbox"
- name="field.foo.remove_0" />
- </td>
- <td>
- <span class="error">Required input is missing.</span>
- <input class="textType" id="field.foo.0.bar"
- name="field.foo.0.bar"
- size="20" type="text" value="" />
- </td>
- </tr>
- ...
- """
-
-
-class SequenceDisplayWidgetTest(
- VerifyResults, SequenceWidgetTestHelper, unittest.TestCase):
-
- def _WidgetFactory(self, *args, **kw):
- w = SequenceDisplayWidget(*args, **kw)
- w.cssClass = "testwidget"
- return w
-
- def setUp(self):
- self.setUpContent()
- self.request = TestRequest()
- self.widget = self._WidgetFactory(
- self.field, self.field.value_type, self.request)
- ztapi.browserViewProviding(ITextLine, DisplayWidget, IDisplayWidget)
-
- def tearDown(self):
- setup.placefulTearDown()
-
- def test_render_empty(self):
- self.content.foo = ()
- self.assertEquals(self.widget(), '(no values)')
-
- def test_render_missing(self):
- self.content.foo = self.field.missing_value
- self.assertEquals(self.widget(), '(no value available)')
-
- def test_render_single(self):
- self.content.foo = (u'one value',)
- check_list = ['<ol', 'class=', 'testwidget',
- '<li', 'one value', '</li', '</ol']
- self.verifyResult(self.widget(), check_list, inorder=True)
-
- def test_render_multiple(self):
- self.content.foo = (u'one', u'two', u'three', u'four')
- check_list = ['<ol', 'class=', 'testwidget',
- '<li', 'one', '</li',
- '<li', 'two', '</li',
- '<li', 'three', '</li',
- '<li', 'four', '</li',
- '</ol']
- self.verifyResult(self.widget(), check_list, inorder=True)
-
- def test_render_alternate_cssClass(self):
- self.content.foo = (u'one value',)
- check_list = ['<ol', 'class=', 'altclass',
- '<li', 'one value', '</li', '</ol']
- self.widget.cssClass = 'altclass'
- self.verifyResult(self.widget(), check_list, inorder=True)
-
- def test_honors_subwidget(self):
- self.widget = self._WidgetFactory(
- self.field, self.field.value_type, self.request,
- subwidget=UppercaseDisplayWidget)
- self.content.foo = (u'first value', u'second value')
- check_list = ['<ol', 'class=', 'testwidget',
- '<li', 'FIRST VALUE', '</li',
- '<li', 'SECOND VALUE', '</li',
- '</ol']
- self.verifyResult(self.widget(), check_list, inorder=True)
-
-
-class UppercaseDisplayWidget(DisplayWidget):
-
- def __call__(self):
- return super(UppercaseDisplayWidget, self).__call__().upper()
-
-
-def setUp(test):
- setup.placefulSetUp()
- ztapi.browserViewProviding(ITextLine, TextWidget, IInputWidget)
- ztapi.browserViewProviding(IWidgetInputError, WidgetInputErrorView,
- IWidgetInputErrorView)
-
-
-def tearDown(test):
- setup.placefulTearDown()
-
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(SequenceWidgetTest),
- doctest.DocTestSuite(setUp=setUp, tearDown=tearDown,
- optionflags=doctest.ELLIPSIS
- |doctest.NORMALIZE_WHITESPACE
- |doctest.REPORT_NDIFF),
- unittest.makeSuite(SequenceDisplayWidgetTest),
- ))
-
-if __name__=='__main__':
- unittest.main(defaultTest='test_suite')
Deleted: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textareawidget.py
===================================================================
--- zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textareawidget.py 2009-12-30 21:41:42 UTC (rev 107394)
+++ zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textareawidget.py 2009-12-30 21:41:49 UTC (rev 107395)
@@ -1,63 +0,0 @@
-##############################################################################
-#
-# 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.1 (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.
-#
-##############################################################################
-"""Textarea Widget tests
-
-$Id$
-"""
-import unittest
-from zope.testing import doctest
-from zope.formlib.interfaces import IInputWidget
-from zope.app.form.browser import TextAreaWidget
-from zope.formlib.tests.test_browserwidget import SimpleInputWidgetTest
-from zope.interface.verify import verifyClass
-
-class TextAreaWidgetTest(SimpleInputWidgetTest):
- """Documents and tests the text area widget.
-
- >>> verifyClass(IInputWidget, TextAreaWidget)
- True
- """
-
- _WidgetFactory = TextAreaWidget
-
- def testProperties(self):
- self.assertEqual(self._widget.tag, 'input')
- self.assertEqual(self._widget.type, 'text')
- self.assertEqual(self._widget.cssClass, '')
- self.assertEqual(self._widget.extra, '')
- self.assertEqual(self._widget.width, 60)
- self.assertEqual(self._widget.height, 15)
-
- def testRender(self):
- value = "Foo Value"
- self._widget.setRenderedValue(value)
- check_list = ('rows="15"', 'cols="60"', 'id="field.foo"',
- 'name="field.foo"', 'textarea')
- self.verifyResult(self._widget(), check_list)
- check_list = ('style="color: red"',) + check_list
- self._widget.extra = 'style="color: red"'
- self.verifyResult(self._widget(), check_list)
- check_list = ('type="hidden"', 'id="field.foo"', 'name="field.foo"',
- 'value="Foo Value"')
- self.verifyResult(self._widget.hidden(), check_list)
-
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(TextAreaWidgetTest),
- doctest.DocTestSuite(),
- ))
-
-if __name__=='__main__':
- unittest.main(defaultTest='test_suite')
Deleted: zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textwidget.py
===================================================================
--- zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textwidget.py 2009-12-30 21:41:42 UTC (rev 107394)
+++ zope.app.form/branches/faassen-zaf/src/zope/app/form/browser/tests/test_textwidget.py 2009-12-30 21:41:49 UTC (rev 107395)
@@ -1,476 +0,0 @@
-##############################################################################
-#
-# Copyright (c) 2001, 2002, 2004, 2005 Zope Corporation and Contributors.
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (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.
-#
-##############################################################################
-"""Text Widget tests
-
-$Id$
-"""
-import datetime
-import unittest
-from zope.testing import doctest
-from zope.component.testing import setUp, tearDown
-from zope.interface.verify import verifyClass
-from zope.schema import TextLine
-from zope.publisher.browser import TestRequest
-
-from zope.schema import Password
-from zope.formlib.interfaces import IInputWidget
-
-from zope.app.form.browser import TextWidget
-
-from zope.app.form.browser import TextAreaWidget
-from zope.app.form.browser import BytesAreaWidget
-from zope.app.form.browser import PasswordWidget
-from zope.app.form.browser import FileWidget
-from zope.app.form.browser import IntWidget
-from zope.app.form.browser import FloatWidget
-from zope.app.form.browser import BytesWidget
-from zope.app.form.browser import ASCIIWidget
-
-from zope.app.form.browser import DateDisplayWidget
-from zope.app.form.browser import DatetimeDisplayWidget
-from zope.app.form.browser import URIDisplayWidget
-
-from zope.formlib.tests.test_browserwidget import BrowserWidgetTest
-from zope.formlib.tests.test_browserwidget import SimpleInputWidgetTest
-
-class TextWidgetTest(SimpleInputWidgetTest):
- """Documents and tests the text widget.
- >>> setUp()
-
- >>> verifyClass(IInputWidget, TextWidget)
- True
-
- Converting Missing Values
- -------------------------
- String fields (TextLine, Text, etc.) values can be classified as one of the
- following:
-
- - Non-empty string
- - Empty string
- - None
-
- Text browser widgets only support the first two types: non-empty strings
- and empty strings. There's no facility to explicitly set a None value in a
- text browser widget.
-
- However, it is possible to interpret an empty string as None for some
- applications. For example, when inputing a User Name, an empty string means
- 'the user hasn't provided a value'. In another application, an empty string
- may mean 'the user has provided a value, specifically <empty string>'.
-
- To support both modes, the text widget provides a 'convert_missing_value'
- flag. When True, empty strings will be converted by the widget to the
- field's 'missing_value' (None by default). This mode accommodates the
- 'user hasn't provided a value' scenario.
-
- To illustrate this mode, we'll use an optional field, where missing_value
- is None:
-
- >>> field = TextLine(
- ... __name__='foo',
- ... missing_value=None,
- ... required=False)
-
- The HTTP form submission contains an empty string for the field value:
-
- >>> request = TestRequest(form={'field.foo':u''})
-
- A text widget configured for the field, where convert_missing_value is True
- (the default value)...
-
- >>> widget = TextWidget(field, request)
- >>> widget.convert_missing_value
- True
-
- will convert the form's empty string into the field's missing_value, which
- is None:
-
- >>> widget.getInputValue() is None
- True
-
- When 'convert_missing_value' is False, the text widget will not convert
- an empty string to the field's missing_value. This supports the 'user has
- provided a value, specifically <empty string>' mode:
-
- >>> widget.convert_missing_value = False
- >>> widget.getInputValue()
- u''
-
- >>> tearDown()
- """
-
- _WidgetFactory = TextWidget
-
- def testProperties(self):
- self.assertEqual(self._widget.tag, 'input')
- self.assertEqual(self._widget.type, 'text')
- self.assertEqual(self._widget.cssClass, '')
- self.assertEqual(self._widget.extra, '')
- self.assertEqual(self._widget.default, '')
- self.assertEqual(self._widget.displayWidth, 20)
- self.assertEqual(self._widget.displayMaxWidth, '')
-
- def testRender(self):
- value = 'Foo Value'
- self._widget.setRenderedValue(value)
- check_list = ('type="text"', 'id="field.foo"', 'name="field.foo"',
- 'value="Foo Value"', 'size="20"')
- self.verifyResult(self._widget(), check_list)
- check_list = ('type="hidden"',) + check_list[1:-1]
- self.verifyResult(self._widget.hidden(), check_list)
- check_list = ('style="color: red"',) + check_list
- self._widget.extra = 'style="color: red"'
- self.verifyResult(self._widget.hidden(), check_list)
-
-class URIDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = URIDisplayWidget
-
- def testProperties(self):
- # check the default linkTarget
- self.failIf(self._widget.linkTarget)
-
- def testRender(self):
- value = "uri:fake"
- self._widget.setRenderedValue(value)
- self.verifyResult(self._widget(), ["<a", 'href="uri:fake"'])
- self._widget.linkTarget = "there"
- self.verifyResult(self._widget(), ["<a", 'href="uri:fake"',
- 'target="there"'])
-
- def testEmptyRenderReturnsEmptyString(self):
- self._widget.setRenderedValue(None)
- self.assertEquals(self._widget(), "")
- self._widget.setRenderedValue('')
- self.assertEquals(self._widget(), "")
-
-
-class DateDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = DateDisplayWidget
-
- expected_class = "date"
-
- def setUp(self):
- super(DateDisplayWidgetTest, self).setUp()
- self._value = datetime.date(2004, 12, 01)
-
- def testDefaultDisplayStyle(self):
- self.failIf(self._widget.displayStyle)
-
- def testRenderDefault(self):
- self._widget.setRenderedValue(self._value)
- self.verifyResult(self._widget(),
- ["<span",
- 'class="%s"' % self.expected_class,
- "01.12.2004",
- "</span"])
-
- def testRenderShort(self):
- self._widget.setRenderedValue(self._value)
- self._widget.displayStyle = "short"
- self.verifyResult(self._widget(),
- ["<span",
- 'class="%s"' % self.expected_class,
- u"01.12.04",
- "</span"])
-
- def testRenderMedium(self):
- self._widget.setRenderedValue(self._value)
- self._widget.displayStyle = "medium"
- self.verifyResult(self._widget(),
- ["<span",
- 'class="%s"' % self.expected_class,
- u"01.12.2004",
- "</span"])
-
- def testRenderLong(self):
- self._widget.setRenderedValue(self._value)
- self._widget.displayStyle = "long"
- self.verifyResult(self._widget(),
- ["<span",
- 'class="%s"' % self.expected_class,
- u"1 \u0434\u0435\u043a\u0430\u0431\u0440\u044f"
- u" 2004 \u0433.",
- "</span"])
-
- def testRenderFull(self):
- self._widget.setRenderedValue(self._value)
- self._widget.displayStyle = "full"
- self.verifyResult(self._widget(),
- ["<span",
- 'class="%s"' % self.expected_class,
- u"1 \u0434\u0435\u043a\u0430\u0431\u0440\u044f"
- u" 2004 \u0433.",
- "</span"])
-
-
-class DatetimeDisplayWidgetTest(DateDisplayWidgetTest):
-
- _WidgetFactory = DatetimeDisplayWidget
-
- expected_class = "dateTime"
-
- def setUp(self):
- super(DatetimeDisplayWidgetTest, self).setUp()
- self._value = datetime.datetime(2004, 12, 01, 14, 39, 01)
-
- def testRenderDefault(self):
- super(DatetimeDisplayWidgetTest, self).testRenderDefault()
- self.verifyResult(self._widget(), ["14:39:01"])
-
- def testRenderShort(self):
- super(DatetimeDisplayWidgetTest, self).testRenderShort()
- self.verifyResult(self._widget(), ["14:39"])
-
- def testRenderMedium(self):
- super(DatetimeDisplayWidgetTest, self).testRenderMedium()
- self.verifyResult(self._widget(), ["14:39:01"])
-
- def testRenderLong(self):
- super(DatetimeDisplayWidgetTest, self).testRenderLong()
- self.verifyResult(self._widget(), ["14:39:01 +000"])
-
- def testRenderFull(self):
- super(DatetimeDisplayWidgetTest, self).testRenderFull()
- self.verifyResult(self._widget(), ["14:39:01 +000"])
-
-class TextAreaDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = TextAreaWidget
-
- # It uses the default DisplayWidget
- def testRender(self):
- value = u"""
- texttexttexttexttexttextexttexttext\xE9\xE9\xE9\xE9\xE9\xE9\xE9\xE9\xE9
- texttexttexttexttextte\xE9\xE9\xE9\xE9\xE9xttexttexttexttexttexttexttex
- texttexttexttexttexttexttexttexttexttexttexttexttexttexttext
- """
- self._widget.setRenderedValue(value)
- self.assert_(value, self._widget._toFieldValue(value))
- self.verifyResult(self._widget(), ["<textarea",
- self._widget._toFormValue(value)])
- check_list = (
- ('id', 'field.foo'),
- ('name', 'field.foo'),
- #('value', ), tested above
- ('cols', '60'),
- ('rows', '15'),
- )
- for a, v in check_list:
- self.verifyResult(self._widget(), [a, v])
-
-class BytesAreaDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = BytesAreaWidget
-
- # It uses the default DisplayWidget
- def testRender(self):
- value = """
- texttexttexttexttexttexttexttexttexttexttexttexttexttexttext
- texttexttexttexttexttexttexttexttexttexttexttexttexttexttext
- texttexttexttexttexttexttexttexttexttexttexttexttexttexttext
- """
- self._widget.setRenderedValue(value)
- self.assert_(value, self._widget._toFieldValue(value))
- self.verifyResult(self._widget(), ["<textarea",
- self._widget._toFormValue(value)])
- check_list = (
- ('id', 'field.foo'),
- ('name', 'field.foo'),
- #('value', ), tested above
- ('cols', '60'),
- ('rows', '15'),
- )
- for a, v in check_list:
- self.verifyResult(self._widget(), [a, v])
-
-class BytesDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = BytesWidget
-
- # It uses the BytesDisplayWidget
- def testRender(self):
- value = "Food Value"
- self._widget.setRenderedValue(value)
- check_list = ('type="text"', 'id="field.foo"', 'name="field.foo"',
- 'value="%s"'%value, 'size="20"')
- self.verifyResult(self._widget(), check_list)
-
-class ASCIIDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = ASCIIWidget
-
- # It uses the default BytesDisplayWidget
- def testRender(self):
- value = "Food Value"
- self._widget.setRenderedValue(value)
- check_list = ('type="text"', 'id="field.foo"', 'name="field.foo"',
- 'value="%s"'%value, 'size="20"')
- self.verifyResult(self._widget(), check_list)
-
-class PasswordDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = PasswordWidget
- _FieldFactory = Password
-
- # It uses the default DisplayWidget
- def testRender(self):
- value = 'Foo Value'
- self._widget.setRenderedValue(value)
- check_list = ('type="password"', 'id="field.foo"', 'name="field.foo"',
- 'value=""', 'size="20"')
- self.verifyResult(self._widget(), check_list)
-
- def testUnchangedPassword(self):
- # The password hasn't been set yet, so an empty string
- # is regarded as an empty field.
- self.assertEquals(None, self._widget._toFieldValue(''))
- # Now the password has been filled in, so the empty string
- # is regarded as the special value for UNCHANGED_PASSWORD.
- self._widget.context.context.foo = u'existing password'
- self.assertEquals(self._widget.context.UNCHANGED_PASSWORD,
- self._widget._toFieldValue(''))
-
-class FileDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = FileWidget
-
- # It uses the default DisplayWidget
- def testRender(self):
- value = 'Foo Value'
- self._widget.setRenderedValue(value)
- check_list = ('type="file"', 'id="field.foo"', 'name="field.foo"',
- 'size="20"')
- self.verifyResult(self._widget(), check_list)
- check_list = ('type="hidden"',) + check_list[1:-1]
- self.verifyResult(self._widget.hidden(), check_list)
- check_list = ('style="color: red"',) + check_list
- self._widget.extra = 'style="color: red"'
- self.verifyResult(self._widget.hidden(), check_list)
-
-class IntDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = IntWidget
-
- # It uses the default DisplayWidget
- def testRender(self):
- value = 1
- self._widget.setRenderedValue(value)
- check_list = ('type="text"', 'id="field.foo"', 'name="field.foo"',
- 'size="10"', 'value="%s"'%str(value))
- self.verifyResult(self._widget(), check_list)
-
-class FloatDisplayWidgetTest(BrowserWidgetTest):
-
- _WidgetFactory = FloatWidget
-
- # It uses the default DisplayWidget
- def testRender(self):
- value = 1.2
- self._widget.setRenderedValue(value)
- check_list = ('type="text"', 'id="field.foo"', 'name="field.foo"',
- 'size="10"', 'value="%s"'%str(value))
- self.verifyResult(self._widget(), check_list)
-
-def test_w_nonrequired_and_missing_value_and_no_inout():
- """
- There was a bug that caused the value attribute to be set to
- 'value' under these circumstances.
-
- >>> from zope.schema import TextLine
- >>> field = TextLine(__name__='foo', title=u'on',
- ... required=False, missing_value=u'')
- >>> request = TestRequest()
- >>> widget = TextWidget(field, request)
-
- >>> def normalize(s):
- ... return '\\n '.join(filter(None, s.split(' ')))
-
- >>> print normalize( widget() )
- <input
- class="textType"
- id="field.foo"
- name="field.foo"
- size="20"
- type="text"
- value=""
- />
-
- """
-
-def test_no_error_on_render_only():
- """This is really a test of a bug fix to SimpleInputWidget.
-
- _error shouldn't be set due to an *internal* call to getInputValue
- when rendering.
-
- >>> from zope.schema import TextLine
- >>> field = TextLine(__name__='foo')
- >>> request = TestRequest(form={'field.foo': ''})
- >>> widget = TextWidget(field, request)
- >>> ignored = widget()
- >>> unicode(widget.error())
- u''
-
-
- """
-
-def test_text_area_works_with_missing_value():
- """
- >>> from zope.schema import Text
- >>> field = Text(__name__='foo', title=u'on',
- ... required=False, missing_value=u'')
- >>> request = TestRequest()
- >>> widget = TextAreaWidget(field, request)
- >>> def normalize(s):
- ... return '\\n '.join(filter(None, s.split(' ')))
-
- >>> print normalize( widget() )
- <textarea
- cols="60"
- id="field.foo"
- name="field.foo"
- rows="15"
- ></textarea>
-
- >>> print normalize( widget.hidden() )
- <input
- class="hiddenType"
- id="field.foo"
- name="field.foo"
- type="hidden"
- value=""
- />
- """
-
-def test_suite():
- return unittest.TestSuite((
- unittest.makeSuite(TextWidgetTest),
- unittest.makeSuite(URIDisplayWidgetTest),
- unittest.makeSuite(DateDisplayWidgetTest),
- unittest.makeSuite(DatetimeDisplayWidgetTest),
- unittest.makeSuite(TextAreaDisplayWidgetTest),
- unittest.makeSuite(BytesAreaDisplayWidgetTest),
- unittest.makeSuite(PasswordDisplayWidgetTest),
- unittest.makeSuite(FileDisplayWidgetTest),
- unittest.makeSuite(IntDisplayWidgetTest),
- unittest.makeSuite(FloatDisplayWidgetTest),
- unittest.makeSuite(BytesDisplayWidgetTest),
- unittest.makeSuite(ASCIIDisplayWidgetTest),
- doctest.DocTestSuite(),
- ))
-
-if __name__=='__main__':
- unittest.main(defaultTest='test_suite')
More information about the checkins
mailing list