CheckBoxWidget ============== >>> from plone.app.form.widgets import CheckBoxWidget >>> from zope.publisher.browser import TestRequest >>> request = TestRequest() >>> from zope.schema import Bool >>> from xml.dom.minidom import parseString Let's test a non required boolean field first. >>> field = Bool(__name__='deletePortrait', ... title=u'Delete portrait', ... required=False) Render the widget and make sure the checkbox is in front of the label. >>> widget = CheckBoxWidget(field, request) >>> dom = parseString('
%s
' % widget()) >>> inputs = dom.getElementsByTagName('input') >>> inputs[0].getAttributeNode('name').value u'field.deletePortrait.used' >>> inputs[0].getAttributeNode('class').value u'hiddenType' >>> inputs[0].getAttributeNode('value').value u'' >>> inputs[1].getAttributeNode('name').value u'field.deletePortrait' >>> inputs[1].getAttributeNode('class').value u'checkboxType' >>> inputs[1].getAttributeNode('value').value u'on' >>> inputs[1].getAttributeNode('checked') is None True >>> label = inputs[1].nextSibling.nextSibling >>> label.nodeName u'label' >>> label.getAttributeNode('for').value u'field.deletePortrait' >>> label.firstChild.data u'Delete portrait' >>> dom.unlink() Make sure that there is no error for a non-required boolean field >>> request.form['field.deletePortrait.used'] = u'' >>> widget.getInputValue() False >>> widget.error() '' >>> request.form['field.deletePortrait'] = 'on' >>> widget.getInputValue() True Test the rendering of a required field. Note that we need to explicitly set the missing_value to False for the field fail validation >>> field = Bool(__name__='acceptTerms', ... title=u'Accept Terms', ... required=True, missing_value=False) >>> widget = CheckBoxWidget(field, request) >>> dom = parseString('
%s
' % widget()) >>> inputs = dom.getElementsByTagName('input') >>> inputs[0].getAttributeNode('name').value u'field.acceptTerms.used' >>> inputs[0].getAttributeNode('class').value u'hiddenType' >>> inputs[0].getAttributeNode('value').value u'' >>> inputs[1].getAttributeNode('name').value u'field.acceptTerms' >>> inputs[1].getAttributeNode('class').value u'checkboxType' >>> inputs[1].getAttributeNode('value').value u'on' >>> inputs[1].getAttributeNode('checked') is None True >>> label = inputs[1].nextSibling.nextSibling >>> label.nodeName u'label' >>> label.getAttributeNode('for').value u'field.acceptTerms' >>> label.firstChild.data u'Accept Terms ' >>> spans = dom.getElementsByTagName('span') >>> spans[0].getAttributeNode('class').value u'required' >>> spans[0].getAttributeNode('title').value u'Required' >>> spans[0].firstChild.data u'\xa0' >>> dom.unlink() Test for a error when the checbkox is not ticked for a required field. >>> request.form['field.acceptTerms.used'] = u'' >>> widget.getInputValue() Traceback (most recent call last): WidgetInputError: ('acceptTerms', '', RequiredMissing('acceptTerms')) Tick the box and make sure we don't get an error anymore >>> request.form['field.acceptTerms'] = 'on' >>> widget.getInputValue() True