Ejemplo n.º 1
0
 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(),
     )
Ejemplo n.º 2
0
    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'],
        )
Ejemplo n.º 3
0
    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'],
        )
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
 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(),
     )
Ejemplo n.º 6
0
    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']
        )
Ejemplo n.º 7
0
    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']
        )
Ejemplo n.º 8
0
 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')
Ejemplo n.º 9
0
 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')
Ejemplo n.º 10
0
    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(),
        )
Ejemplo n.º 11
0
    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(),
        )