def test_widget_set_not_orderable(self): from plone.app.z3cform.widget import SelectWidget widget = SelectWidget(self.request) widget.id = 'test-widget' # A set is not orderable widget.field = Set( __name__='selectfield', value_type=Choice(values=['one', 'two', 'three']) ) widget.terms = widget.field.value_type.vocabulary self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': { 'multiple': True, 'separator': ';'}, 'pattern': 'select2', 'value': (), 'items': [ ('one', 'one'), ('two', 'two'), ('three', 'three') ] }, widget._base_args(), )
def test_data_converter_tuple(self): from plone.app.z3cform.widget import SelectWidget from plone.app.z3cform.converters import SelectWidgetConverter field = Tuple(__name__='tuplefield', value_type=Choice(__name__='selectfield', values=['one', 'two', 'three'])) widget = SelectWidget(self.request) widget.field = field widget.multiple = True converter = SelectWidgetConverter(field, widget) self.assertEqual( converter.toFieldValue(''), field.missing_value, ) self.assertEqual( converter.toFieldValue('one;two;three'), ('one', 'two', 'three'), ) self.assertEqual( converter.toWidgetValue(tuple()), [], ) self.assertEqual( converter.toWidgetValue(('one', 'two', 'three')), ['one', 'two', 'three'], )
def fixAjaxSelectWidgetDisplayMode(event): if (isinstance(event.widget, AjaxSelectWidget) and event.widget.mode == DISPLAY_MODE and event.widget.vocabulary): # Sanity check field = getattr(event.widget, 'field', None) if ICollection.providedBy(field): field = field.value_type if field is None or not getattr(field, 'vocabularyName', None): # Field doesn't know its vocabulary and SelectWidget cannot be used return # This is crazy! AjaxSelectWidget is based on select widget and # therefore has completely wrong display mode; Here we replace # the widget with SelectWidget, but is it really this hard? tmp = FieldWidget( event.widget.field, SelectWidget(event.widget.request), ) # Do what they do in z3c.form.field update tmp.name = event.widget.name tmp.id = event.widget.id tmp.context = event.widget.context tmp.form = event.widget.form alsoProvides(tmp, IContextAware, IFormAware) tmp.ignoreContext = event.widget.ignoreContext tmp.ignoreRequest = event.widget.ignoreRequest tmp.showDefault = event.widget.showDefault tmp.mode = event.widget.mode event.widget.__class__ = SelectWidget event.widget.__dict__ = tmp.__dict__ event.widget.update()
def test_widget_list_orderable(self): from plone.app.z3cform.widget import SelectWidget widget = SelectWidget(self.request) widget.id = 'test-widget' widget.separator = '.' widget.field = List( __name__='selectfield', value_type=Choice(values=['one', 'two', 'three']) ) widget.terms = widget.field.value_type.vocabulary self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': { 'orderable': True, 'multiple': True, 'separator': '.'}, 'pattern': 'select2', 'value': (), 'items': [ ('one', 'one'), ('two', 'two'), ('three', 'three') ] }, widget._base_args(), )
def test_data_converter_list(self): from plone.app.z3cform.widget import SelectWidget from plone.app.z3cform.converters import SelectWidgetConverter field = List(__name__='listfield', value_type=Choice(__name__='selectfield', values=['one', 'two', 'three'])) widget = SelectWidget(self.request) widget.field = field widget.multiple = True converter = SelectWidgetConverter(field, widget) self.assertEqual( converter.toFieldValue(''), field.missing_value, ) self.assertEqual( converter.toFieldValue('one;two;three'), ['one', 'two', 'three'], ) self.assertEqual( converter.toWidgetValue([]), [], ) widget.separator = ',' self.assertEqual( converter.toFieldValue('one,two,three'), ['one', 'two', 'three'], ) self.assertRaises( LookupError, converter.toFieldValue, 'one;two;three' ) self.assertEqual( converter.toWidgetValue(['one', 'two', 'three']), ['one', 'two', 'three'] )
def test_widget_extract(self): from plone.app.z3cform.widget import SelectWidget widget = SelectWidget(self.request) widget.field = Choice(__name__='selectfield', values=['one', 'two', 'three']) widget.name = 'selectfield' self.request.form['selectfield'] = 'one' self.assertEquals(widget.extract(), 'one') widget.multiple = True self.request.form['selectfield'] = 'one;two' self.assertEquals(widget.extract(), 'one;two')
def test_widget_extract(self): from plone.app.z3cform.widget import SelectWidget widget = SelectWidget(self.request) widget.field = Choice( __name__='selectfield', values=['one', 'two', 'three'] ) widget.name = 'selectfield' self.request.form['selectfield'] = 'one' self.assertEqual(widget.extract(), 'one') widget.multiple = True self.request.form['selectfield'] = 'one;two' self.assertEqual(widget.extract(), 'one;two')
def test_widget(self): from plone.app.z3cform.widget import SelectWidget widget = SelectWidget(self.request) widget.id = 'test-widget' widget.field = Choice( __name__='selectfield', values=['one', 'two', 'three'] ) widget.terms = widget.field.vocabulary widget.field.required = True self.assertEqual( { 'multiple': None, 'name': None, 'pattern_options': {}, 'pattern': 'select2', 'value': (), 'items': [ ('one', 'one'), ('two', 'two'), ('three', 'three') ] }, widget._base_args(), ) widget.field.required = False self.assertEqual( { 'multiple': None, 'name': None, 'pattern_options': {'allowClear': True}, 'pattern': 'select2', 'value': (), 'items': [ (u'', u''), ('one', 'one'), ('two', 'two'), ('three', 'three') ] }, widget._base_args(), ) widget.field.required = True widget.multiple = True self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': {'separator': ';', 'multiple': True}, 'pattern': 'select2', 'value': (), 'items': [ ('one', 'one'), ('two', 'two'), ('three', 'three') ] }, widget._base_args(), ) widget.field.required = False widget.multiple = True self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': {'allowClear': True, 'separator': ';', 'multiple': True}, 'pattern': 'select2', 'value': (), 'items': [ ('one', 'one'), ('two', 'two'), ('three', 'three') ] }, widget._base_args(), ) widget.value = 'one' self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': {'allowClear': True, 'separator': ';', 'multiple': True}, 'pattern': 'select2', 'value': ('one'), 'items': [ ('one', 'one'), ('two', 'two'), ('three', 'three') ] }, widget._base_args(), )
def test_widget(self): from plone.app.z3cform.widget import SelectWidget widget = SelectWidget(self.request) widget.id = 'test-widget' widget.field = Choice(__name__='selectfield', values=['one', 'two', 'three']) widget.terms = widget.field.vocabulary widget.field.required = True self.assertEqual( { 'multiple': None, 'name': None, 'pattern_options': {}, 'pattern': 'select2', 'value': (), 'items': [('one', 'one'), ('two', 'two'), ('three', 'three')] }, widget._base_args(), ) widget.field.required = False self.assertEqual( { 'multiple': None, 'name': None, 'pattern_options': { 'allowClear': True }, 'pattern': 'select2', 'value': (), 'items': [(u'', u''), ('one', 'one'), ('two', 'two'), ('three', 'three')] }, widget._base_args(), ) widget.field.required = True widget.multiple = True self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': { 'separator': ';', 'multiple': True }, 'pattern': 'select2', 'value': (), 'items': [('one', 'one'), ('two', 'two'), ('three', 'three')] }, widget._base_args(), ) widget.field.required = False widget.multiple = True self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': { 'allowClear': True, 'separator': ';', 'multiple': True }, 'pattern': 'select2', 'value': (), 'items': [('one', 'one'), ('two', 'two'), ('three', 'three')] }, widget._base_args(), ) widget.value = 'one' self.assertEqual( { 'multiple': True, 'name': None, 'pattern_options': { 'allowClear': True, 'separator': ';', 'multiple': True }, 'pattern': 'select2', 'value': ('one'), 'items': [('one', 'one'), ('two', 'two'), ('three', 'three')] }, widget._base_args(), )