def test_read_multiple(self):
     field_node1 = ElementTree.Element('field')
     field_node1.set(ns("widget", self.namespace), "z3c.form.browser.password.PasswordFieldWidget")
     field_node1.set(ns("mode", self.namespace), "hidden")
     field_node1.set(ns("omitted", self.namespace), "true")
     field_node1.set(ns("before", self.namespace), "somefield")
     
     field_node2 = ElementTree.Element('field')
     field_node2.set(ns("mode", self.namespace), "display")
     field_node2.set(ns("omitted", self.namespace), "yes")
     
     class IDummy(Interface):
         dummy1 = zope.schema.TextLine(title=u"dummy1")
         dummy2 = zope.schema.TextLine(title=u"dummy2")
     
     handler = FormSchema()
     handler.read(field_node1, IDummy, IDummy['dummy1'])
     handler.read(field_node2, IDummy, IDummy['dummy2'])
 
     self.assertEquals({'dummy1': 'z3c.form.browser.password.PasswordFieldWidget'},
         IDummy.getTaggedValue(WIDGETS_KEY))
     self.assertEquals([(Interface, 'dummy1', 'true'), (Interface, 'dummy2', 'yes')],
                       IDummy.getTaggedValue(OMITTED_KEY))
     self.assertEquals([(Interface, 'dummy1', 'hidden'), (Interface, 'dummy2', 'display')],
                       IDummy.getTaggedValue(MODES_KEY))
     self.assertEquals([('dummy1', 'before', 'somefield',)], IDummy.getTaggedValue(ORDER_KEY))
    def test_read_parameterized_widget_default(self):
        from plone.autoform.widgets import ParameterizedWidget

        param_node = etree.Element('klass')
        param_node.text = 'custom'
        param2_node = etree.Element('placeholder')
        param2_node.text = 'help'
        widget_node = etree.Element(ns('widget', self.namespace))
        widget_node.append(param_node)
        widget_node.append(param2_node)
        field_node = etree.Element('field')
        field_node.append(widget_node)

        class IDummy(Interface):
            foo = zope.schema.TextLine(title=u'foo')

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['foo'])

        widgets = IDummy.queryTaggedValue(WIDGETS_KEY)
        self.assertTrue(isinstance(widgets['foo'], ParameterizedWidget))
        self.assertTrue(widgets['foo'].widget_factory is None)
        self.assertIn('klass', widgets['foo'].params)
        self.assertEqual(widgets['foo'].params['klass'], 'custom')
        self.assertIn('placeholder', widgets['foo'].params)
        self.assertEqual(widgets['foo'].params['placeholder'], 'help')
    def test_read_values_with_interfaces(self):
        field_node1 = etree.Element('field')
        field_node1.set(ns("mode", self.namespace),
                        "z3c.form.interfaces.IForm:hidden")
        field_node1.set(ns("omitted", self.namespace),
                        "z3c.form.interfaces.IForm:true")

        field_node2 = etree.Element('field')
        field_node2.set(
            ns("mode", self.namespace),
            "z3c.form.interfaces.IForm:hidden z3c.form.interfaces.IEditForm:display"
        )
        field_node2.set(
            ns("omitted", self.namespace),
            "z3c.form.interfaces.IForm:true z3c.form.interfaces.IEditForm:false"
        )

        class IDummy(Interface):
            dummy1 = zope.schema.TextLine(title=u"dummy1")
            dummy2 = zope.schema.TextLine(title=u"dummy2")

        handler = FormSchema()
        handler.read(field_node1, IDummy, IDummy['dummy1'])
        handler.read(field_node2, IDummy, IDummy['dummy2'])

        expected_modes = [(IForm, u'dummy1', 'hidden'),
                          (IForm, u'dummy2', 'hidden'),
                          (IEditForm, u'dummy2', 'display')]
        self.assertEquals(expected_modes, IDummy.queryTaggedValue(MODES_KEY))
        expected_omitted = [(IForm, u'dummy1', 'true'),
                            (IForm, u'dummy2', 'true'),
                            (IEditForm, u'dummy2', 'false')]
        self.assertEquals(expected_omitted,
                          IDummy.queryTaggedValue(OMITTED_KEY))
    def test_write_values_with_interfaces(self):
        field_node1 = etree.Element('field')
        field_node2 = etree.Element('field')

        class IDummy(Interface):
            dummy1 = zope.schema.TextLine(title=u"dummy1")
            dummy2 = zope.schema.TextLine(title=u"dummy2")

        modes_values = [(IForm, u'dummy1', 'hidden'),
                        (IForm, u'dummy2', 'hidden'),
                        (IEditForm, u'dummy2', 'display')]
        IDummy.setTaggedValue(MODES_KEY, modes_values)
        omitted_values = [(IForm, u'dummy1', 'true'),
                          (IForm, u'dummy2', 'true'),
                          (IEditForm, u'dummy2', 'false')]
        IDummy.setTaggedValue(OMITTED_KEY, omitted_values)

        handler = FormSchema()
        handler.write(field_node1, IDummy, IDummy['dummy1'])
        handler.write(field_node2, IDummy, IDummy['dummy2'])

        self.assertEquals("z3c.form.interfaces.IForm:hidden",
                          field_node1.get(ns("mode", self.namespace)))
        self.assertEquals("z3c.form.interfaces.IForm:true",
                          field_node1.get(ns("omitted", self.namespace)))

        self.assertEquals(
            "z3c.form.interfaces.IForm:hidden z3c.form.interfaces.IEditForm:display",
            field_node2.get(ns("mode", self.namespace)))
        self.assertEquals(
            "z3c.form.interfaces.IForm:true z3c.form.interfaces.IEditForm:false",
            field_node2.get(ns("omitted", self.namespace)))
    def test_write(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u"dummy1")

        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy': 'SomeWidget'})
        IDummy.setTaggedValue(OMITTED_KEY, [(Interface, 'dummy', 'true')])
        IDummy.setTaggedValue(MODES_KEY, [(Interface, 'dummy', 'hidden')])
        IDummy.setTaggedValue(ORDER_KEY, [(
            'dummy',
            'before',
            'somefield',
        )])

        handler = FormSchema()
        handler.write(field_node, IDummy, IDummy['dummy'])

        widget_node = field_node.find(ns('widget', self.namespace))
        self.assertEquals("SomeWidget", widget_node.get('type'))
        self.assertEquals("true", field_node.get(ns("omitted",
                                                    self.namespace)))
        self.assertEquals("hidden", field_node.get(ns("mode", self.namespace)))
        self.assertEquals("somefield",
                          field_node.get(ns("before", self.namespace)))
Exemple #6
0
    def test_read_parameterized_widget_default(self):
        from plone.autoform.widgets import ParameterizedWidget

        param_node = etree.Element('klass')
        param_node.text = 'custom'
        param2_node = etree.Element('placeholder')
        param2_node.text = 'help'
        widget_node = etree.Element(ns('widget', self.namespace))
        widget_node.append(param_node)
        widget_node.append(param2_node)
        field_node = etree.Element('field')
        field_node.append(widget_node)

        class IDummy(Interface):
            foo = zope.schema.TextLine(title=u'foo')

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['foo'])

        widgets = IDummy.queryTaggedValue(WIDGETS_KEY)
        self.assertTrue(isinstance(widgets['foo'], ParameterizedWidget))
        self.assertTrue(widgets['foo'].widget_factory is None)
        self.assertIn('klass', widgets['foo'].params)
        self.assertEqual(widgets['foo'].params['klass'], 'custom')
        self.assertIn('placeholder', widgets['foo'].params)
        self.assertEqual(widgets['foo'].params['placeholder'], 'help')
    def test_read(self):
        field_node = etree.Element('field')
        field_node.set(ns("widget", self.namespace),
                       "z3c.form.browser.password.PasswordFieldWidget")
        field_node.set(ns("mode", self.namespace), "hidden")
        field_node.set(ns("omitted", self.namespace), "true")
        field_node.set(ns("before", self.namespace), "somefield")
        field_node.set(ns("validator", self.namespace),
                       "plone.autoform.tests.test_utils.TestValidator")

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u"dummy")

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['dummy'])

        self.assertEquals(
            {'dummy': 'z3c.form.browser.password.PasswordFieldWidget'},
            IDummy.getTaggedValue(WIDGETS_KEY))
        self.assertEquals([(Interface, 'dummy', 'true')],
                          IDummy.getTaggedValue(OMITTED_KEY))
        self.assertEquals([(Interface, 'dummy', 'hidden')],
                          IDummy.getTaggedValue(MODES_KEY))
        self.assertEquals([(
            'dummy',
            'before',
            'somefield',
        )], IDummy.getTaggedValue(ORDER_KEY))
        validator = getMultiAdapter((None, None, None, IDummy['dummy'], None),
                                    IValidator)
        from plone.autoform.tests.test_utils import TestValidator
        assert isinstance(validator, TestValidator)
    def test_read_multiple(self):
        field_node1 = etree.Element('field')
        field_node1.set(ns("widget", self.namespace),
                        "z3c.form.browser.password.PasswordFieldWidget")
        field_node1.set(ns("mode", self.namespace), "hidden")
        field_node1.set(ns("omitted", self.namespace), "true")
        field_node1.set(ns("before", self.namespace), "somefield")

        field_node2 = etree.Element('field')
        field_node2.set(ns("mode", self.namespace), "display")
        field_node2.set(ns("omitted", self.namespace), "yes")

        class IDummy(Interface):
            dummy1 = zope.schema.TextLine(title=u"dummy1")
            dummy2 = zope.schema.TextLine(title=u"dummy2")

        handler = FormSchema()
        handler.read(field_node1, IDummy, IDummy['dummy1'])
        handler.read(field_node2, IDummy, IDummy['dummy2'])

        self.assertEquals(
            {'dummy1': 'z3c.form.browser.password.PasswordFieldWidget'},
            IDummy.getTaggedValue(WIDGETS_KEY))
        self.assertEquals([(Interface, 'dummy1', 'true'),
                           (Interface, 'dummy2', 'yes')],
                          IDummy.getTaggedValue(OMITTED_KEY))
        self.assertEquals([(Interface, 'dummy1', 'hidden'),
                           (Interface, 'dummy2', 'display')],
                          IDummy.getTaggedValue(MODES_KEY))
        self.assertEquals([(
            'dummy1',
            'before',
            'somefield',
        )], IDummy.getTaggedValue(ORDER_KEY))
 def test_write_no_data(self):
     field_node = ElementTree.Element('field')
     
     class IDummy(Interface):
         dummy = zope.schema.TextLine(title=u"dummy1")
         
     handler = FormSchema()
     handler.write(field_node, IDummy, IDummy['dummy'])
     
     self.assertEquals(None, field_node.get(ns("widget", self.namespace)))
     self.assertEquals(None, field_node.get(ns("omitted", self.namespace)))
     self.assertEquals(None, field_node.get(ns("mode", self.namespace)))
     self.assertEquals(None, field_node.get(ns("before", self.namespace)))
    def test_read_no_data(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u'dummy1')

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['dummy'])

        self.assertEqual(None, IDummy.queryTaggedValue(WIDGETS_KEY))
        self.assertEqual(None, IDummy.queryTaggedValue(OMITTED_KEY))
        self.assertEqual(None, IDummy.queryTaggedValue(MODES_KEY))
        self.assertEqual(None, IDummy.queryTaggedValue(ORDER_KEY))
    def test_write_no_data(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u'dummy1')

        handler = FormSchema()
        handler.write(field_node, IDummy, IDummy['dummy'])

        self.assertEqual(None, field_node.find(ns('widget', self.namespace)))
        self.assertEqual(None, field_node.get(ns('omitted', self.namespace)))
        self.assertEqual(None, field_node.get(ns('mode', self.namespace)))
        self.assertEqual(None, field_node.get(ns('before', self.namespace)))
    def test_read_no_data(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u"dummy1")

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['dummy'])

        self.assertEquals(None, IDummy.queryTaggedValue(WIDGETS_KEY))
        self.assertEquals(None, IDummy.queryTaggedValue(OMITTED_KEY))
        self.assertEquals(None, IDummy.queryTaggedValue(MODES_KEY))
        self.assertEquals(None, IDummy.queryTaggedValue(ORDER_KEY))
    def test_write_no_data(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u"dummy1")

        handler = FormSchema()
        handler.write(field_node, IDummy, IDummy['dummy'])

        self.assertEquals(None, field_node.find(ns("widget", self.namespace)))
        self.assertEquals(None, field_node.get(ns("omitted", self.namespace)))
        self.assertEquals(None, field_node.get(ns("mode", self.namespace)))
        self.assertEquals(None, field_node.get(ns("before", self.namespace)))
    def test_write_parameterized_widget_default(self):
        from plone.autoform.widgets import ParameterizedWidget
        pw = ParameterizedWidget(None)

        class IDummy(Interface):
            dummy1 = zope.schema.Text(title=u'dummy1')

        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy1': pw})

        fieldNode = etree.Element('field')
        handler = FormSchema()
        handler.write(fieldNode, IDummy, IDummy['dummy1'])

        self.assertEquals(etree.tostring(fieldNode), '<field/>')
    def test_write_parameterized_widget_default(self):
        from plone.autoform.widgets import ParameterizedWidget
        pw = ParameterizedWidget(None)

        class IDummy(Interface):
            dummy1 = zope.schema.Text(title=u'dummy1')
        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy1': pw})

        fieldNode = etree.Element('field')
        handler = FormSchema()
        handler.write(fieldNode, IDummy, IDummy['dummy1'])

        self.assertEquals(etree.tostring(fieldNode),
            '<field/>')
    def test_read_values_with_interfaces(self):
        field_node1 = etree.Element('field')
        field_node1.set(
            ns('mode', self.namespace),
            'z3c.form.interfaces.IForm:hidden'
        )
        field_node1.set(
            ns('omitted', self.namespace),
            'z3c.form.interfaces.IForm:true'
        )

        field_node2 = etree.Element('field')
        field_node2.set(
            ns('mode', self.namespace),
            'z3c.form.interfaces.IForm:hidden '
            'z3c.form.interfaces.IEditForm:display'
        )
        field_node2.set(
            ns('omitted', self.namespace),
            'z3c.form.interfaces.IForm:true '
            'z3c.form.interfaces.IEditForm:false'
        )

        class IDummy(Interface):
            dummy1 = zope.schema.TextLine(title=u'dummy1')
            dummy2 = zope.schema.TextLine(title=u'dummy2')

        handler = FormSchema()
        handler.read(field_node1, IDummy, IDummy['dummy1'])
        handler.read(field_node2, IDummy, IDummy['dummy2'])

        expected_modes = [
            (IForm, u'dummy1', 'hidden'),
            (IForm, u'dummy2', 'hidden'),
            (IEditForm, u'dummy2', 'display')
        ]
        self.assertEqual(
            expected_modes,
            IDummy.queryTaggedValue(MODES_KEY)
        )
        expected_omitted = [
            (IForm, u'dummy1', 'true'),
            (IForm, u'dummy2', 'true'),
            (IEditForm, u'dummy2', 'false')
        ]
        self.assertEqual(
            expected_omitted,
            IDummy.queryTaggedValue(OMITTED_KEY)
        )
    def test_write_parameterized_widget_default_with_handler(self):
        from plone.autoform.widgets import ParameterizedWidget
        pw = ParameterizedWidget(None, klass='custom')

        class IDummy(Interface):
            dummy1 = zope.schema.Text(title=u'dummy1')
        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy1': pw})

        fieldNode = etree.Element('field')
        handler = FormSchema()
        handler.write(fieldNode, IDummy, IDummy['dummy1'])

        self.assertEquals(etree.tostring(fieldNode),
            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form">'
            '<klass>custom</klass></ns0:widget></field>')
    def test_write_parameterized_widget_default_with_handler(self):
        from plone.autoform.widgets import ParameterizedWidget
        pw = ParameterizedWidget(None, klass='custom')

        class IDummy(Interface):
            dummy1 = zope.schema.Text(title=u'dummy1')

        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy1': pw})

        fieldNode = etree.Element('field')
        handler = FormSchema()
        handler.write(fieldNode, IDummy, IDummy['dummy1'])

        self.assertEquals(
            etree.tostring(fieldNode),
            '<field><ns0:widget xmlns:ns0="http://namespaces.plone.org/supermodel/form">'
            '<klass>custom</klass></ns0:widget></field>')
Exemple #19
0
    def test_write_parameterized_widget_string(self):
        from plone.autoform.widgets import ParameterizedWidget
        pw = ParameterizedWidget('foo')

        class IDummy(Interface):
            dummy1 = zope.schema.Text(title=u'dummy1')

        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy1': pw})

        fieldNode = etree.Element('field')
        handler = FormSchema()
        handler.write(fieldNode, IDummy, IDummy['dummy1'])

        self.assertEqual(
            etree.tostring(fieldNode), '<field><ns0:widget'
            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
            ' type="foo"/></field>')
 def test_write_partial(self):
     field_node = ElementTree.Element('field')
     
     class IDummy(Interface):
         dummy = zope.schema.TextLine(title=u"dummy1")
     
     IDummy.setTaggedValue(WIDGETS_KEY, {'dummy': 'SomeWidget'})
     IDummy.setTaggedValue(OMITTED_KEY, [(Interface, 'dummy2', 'true')])
     IDummy.setTaggedValue(MODES_KEY, [(Interface, 'dummy', 'display'), (Interface, 'dummy2', 'hidden')])
     IDummy.setTaggedValue(ORDER_KEY, [])
     
     handler = FormSchema()
     handler.write(field_node, IDummy, IDummy['dummy'])
     
     self.assertEquals("SomeWidget", field_node.get(ns("widget", self.namespace)))
     self.assertEquals(None, field_node.get(ns("omitted", self.namespace)))
     self.assertEquals("display", field_node.get(ns("mode", self.namespace)))
     self.assertEquals(None, field_node.get(ns("before", self.namespace)))
    def test_write_parameterized_widget_string(self):
        from plone.autoform.widgets import ParameterizedWidget
        pw = ParameterizedWidget('foo')

        class IDummy(Interface):
            dummy1 = zope.schema.Text(title=u'dummy1')
        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy1': pw})

        fieldNode = etree.Element('field')
        handler = FormSchema()
        handler.write(fieldNode, IDummy, IDummy['dummy1'])

        self.assertEqual(
            etree.tostring(fieldNode),
            '<field><ns0:widget'
            ' xmlns:ns0="http://namespaces.plone.org/supermodel/form"'
            ' type="foo"/></field>'
        )
    def test_write_values_with_interfaces(self):
        field_node1 = etree.Element('field')
        field_node2 = etree.Element('field')

        class IDummy(Interface):
            dummy1 = zope.schema.TextLine(title=u'dummy1')
            dummy2 = zope.schema.TextLine(title=u'dummy2')

        modes_values = [
            (IForm, u'dummy1', 'hidden'),
            (IForm, u'dummy2', 'hidden'),
            (IEditForm, u'dummy2', 'display')
        ]
        IDummy.setTaggedValue(MODES_KEY, modes_values)
        omitted_values = [
            (IForm, u'dummy1', 'true'),
            (IForm, u'dummy2', 'true'),
            (IEditForm, u'dummy2', 'false')
        ]
        IDummy.setTaggedValue(OMITTED_KEY, omitted_values)

        handler = FormSchema()
        handler.write(field_node1, IDummy, IDummy['dummy1'])
        handler.write(field_node2, IDummy, IDummy['dummy2'])

        self.assertEqual(
            'z3c.form.interfaces.IForm:hidden',
            field_node1.get(ns('mode', self.namespace))
        )
        self.assertEqual(
            'z3c.form.interfaces.IForm:true',
            field_node1.get(ns('omitted', self.namespace))
        )

        self.assertEqual(
            'z3c.form.interfaces.IForm:hidden '
            'z3c.form.interfaces.IEditForm:display',
            field_node2.get(ns('mode', self.namespace))
        )
        self.assertEqual(
            'z3c.form.interfaces.IForm:true '
            'z3c.form.interfaces.IEditForm:false',
            field_node2.get(ns('omitted', self.namespace))
        )
    def test_write(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u"dummy1")

        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy': 'SomeWidget'})
        IDummy.setTaggedValue(OMITTED_KEY, [(Interface, 'dummy', 'true')])
        IDummy.setTaggedValue(MODES_KEY, [(Interface, 'dummy', 'hidden')])
        IDummy.setTaggedValue(ORDER_KEY, [('dummy', 'before', 'somefield',)])

        handler = FormSchema()
        handler.write(field_node, IDummy, IDummy['dummy'])

        widget_node = field_node.find(ns('widget', self.namespace))
        self.assertEquals("SomeWidget", widget_node.get('type'))
        self.assertEquals("true", field_node.get(ns("omitted", self.namespace)))
        self.assertEquals("hidden", field_node.get(ns("mode", self.namespace)))
        self.assertEquals("somefield", field_node.get(ns("before", self.namespace)))
    def test_read(self):
        field_node = etree.Element('field')
        field_node.set(
            ns('widget', self.namespace),
            'z3c.form.browser.password.PasswordFieldWidget'
        )
        field_node.set(ns('mode', self.namespace), 'hidden')
        field_node.set(ns('omitted', self.namespace), 'true')
        field_node.set(ns('before', self.namespace), 'somefield')
        field_node.set(
            ns('validator', self.namespace),
            'plone.autoform.tests.test_utils.TestValidator'
        )

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u'dummy')

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['dummy'])

        self.assertEqual(
            {'dummy': 'z3c.form.browser.password.PasswordFieldWidget'},
            IDummy.getTaggedValue(WIDGETS_KEY)
        )
        self.assertEqual(
            [(Interface, 'dummy', 'true')],
            IDummy.getTaggedValue(OMITTED_KEY)
        )
        self.assertEqual(
            [(Interface, 'dummy', 'hidden')],
            IDummy.getTaggedValue(MODES_KEY)
        )
        self.assertEqual(
            [('dummy', 'before', 'somefield',)],
            IDummy.getTaggedValue(ORDER_KEY)
        )
        validator = getMultiAdapter(
            (None, None, None, IDummy['dummy'], None),
            IValidator
        )
        from plone.autoform.tests.test_utils import TestValidator
        assert isinstance(validator, TestValidator)
Exemple #25
0
    def test_write_partial(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u'dummy1')

        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy': 'SomeWidget'})
        IDummy.setTaggedValue(OMITTED_KEY, [(Interface, 'dummy2', 'true')])
        IDummy.setTaggedValue(MODES_KEY, [(Interface, 'dummy', 'display'),
                                          (Interface, 'dummy2', 'hidden')])
        IDummy.setTaggedValue(ORDER_KEY, [])

        handler = FormSchema()
        handler.write(field_node, IDummy, IDummy['dummy'])

        widget_node = field_node.find(ns('widget', self.namespace))
        self.assertEqual('SomeWidget', widget_node.get('type'))
        self.assertEqual(None, field_node.get(ns('omitted', self.namespace)))
        self.assertEqual('display', field_node.get(ns('mode', self.namespace)))
        self.assertEqual(None, field_node.get(ns('before', self.namespace)))
    def test_write_partial(self):
        field_node = etree.Element('field')

        class IDummy(Interface):
            dummy = zope.schema.TextLine(title=u'dummy1')

        IDummy.setTaggedValue(WIDGETS_KEY, {'dummy': 'SomeWidget'})
        IDummy.setTaggedValue(OMITTED_KEY, [(Interface, 'dummy2', 'true')])
        IDummy.setTaggedValue(
            MODES_KEY,
            [(Interface, 'dummy', 'display'), (Interface, 'dummy2', 'hidden')]
        )
        IDummy.setTaggedValue(ORDER_KEY, [])

        handler = FormSchema()
        handler.write(field_node, IDummy, IDummy['dummy'])

        widget_node = field_node.find(ns('widget', self.namespace))
        self.assertEqual('SomeWidget', widget_node.get('type'))
        self.assertEqual(None, field_node.get(ns('omitted', self.namespace)))
        self.assertEqual('display', field_node.get(ns('mode', self.namespace)))
        self.assertEqual(None, field_node.get(ns('before', self.namespace)))
    def test_read_multiple(self):
        field_node1 = etree.Element('field')
        field_node1.set(
            ns('widget', self.namespace),
            'z3c.form.browser.password.PasswordFieldWidget'
        )
        field_node1.set(ns('mode', self.namespace), 'hidden')
        field_node1.set(ns('omitted', self.namespace), 'true')
        field_node1.set(ns('before', self.namespace), 'somefield')

        field_node2 = etree.Element('field')
        field_node2.set(ns('mode', self.namespace), 'display')
        field_node2.set(ns('omitted', self.namespace), 'yes')

        class IDummy(Interface):
            dummy1 = zope.schema.TextLine(title=u'dummy1')
            dummy2 = zope.schema.TextLine(title=u'dummy2')

        handler = FormSchema()
        handler.read(field_node1, IDummy, IDummy['dummy1'])
        handler.read(field_node2, IDummy, IDummy['dummy2'])

        self.assertEqual(
            {'dummy1': 'z3c.form.browser.password.PasswordFieldWidget'},
            IDummy.getTaggedValue(WIDGETS_KEY)
        )
        self.assertEqual(
            [(Interface, 'dummy1', 'true'), (Interface, 'dummy2', 'yes')],
            IDummy.getTaggedValue(OMITTED_KEY)
        )
        self.assertEqual(
            [(Interface, 'dummy1', 'hidden'),
             (Interface, 'dummy2', 'display')],
            IDummy.getTaggedValue(MODES_KEY)
        )
        self.assertEqual(
            [('dummy1', 'before', 'somefield',)],
            IDummy.getTaggedValue(ORDER_KEY)
        )
    def test_read_parameterized_widget(self):
        from plone.autoform.widgets import ParameterizedWidget

        param_node = etree.Element('klass')
        param_node.text = 'custom'
        widget_node = etree.Element(ns('widget', self.namespace))
        widget_node.set('type',
            'plone.autoform.tests.test_supermodel_handler.DummyWidget')
        widget_node.append(param_node)
        field_node = etree.Element('field')
        field_node.append(widget_node)

        class IDummy(Interface):
            foo = zope.schema.TextLine(title=u'foo')

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['foo'])

        widgets = IDummy.queryTaggedValue(WIDGETS_KEY)
        self.assertTrue(isinstance(widgets['foo'], ParameterizedWidget))
        self.assertTrue(widgets['foo'].widget_factory is DummyWidget)
        self.assertEqual(widgets['foo'].params, {'klass': 'custom'})
    def test_read_parameterized_widget(self):
        from plone.autoform.widgets import ParameterizedWidget

        param_node = etree.Element('klass')
        param_node.text = 'custom'
        widget_node = etree.Element(ns('widget', self.namespace))
        widget_node.set(
            'type', 'plone.autoform.tests.test_supermodel_handler.DummyWidget')
        widget_node.append(param_node)
        field_node = etree.Element('field')
        field_node.append(widget_node)

        class IDummy(Interface):
            foo = zope.schema.TextLine(title=u'foo')

        handler = FormSchema()
        handler.read(field_node, IDummy, IDummy['foo'])

        widgets = IDummy.queryTaggedValue(WIDGETS_KEY)
        self.assertTrue(isinstance(widgets['foo'], ParameterizedWidget))
        self.assertTrue(widgets['foo'].widget_factory is DummyWidget)
        self.assertEqual(widgets['foo'].params, {'klass': 'custom'})