示例#1
0
 def __init__(self):
     Form.__init__(self, 'noteprefixform')
     self.add_header('header', 'Header')
     el = self.add_text('text', 'Text', required=True)
     el.add_note('hi there!')
     el = self.add_text('text2', 'Text', settings={'note_prefix': ''})
     el.add_note('hi there!')
示例#2
0
 def testForm1(self):
     """
     most basic usage of a form
     """
     form = Form('login')
     form.add_text('username', 'User Name')
     self.assertEqual(self.render_html,
                      str(form.elements.username.render()))
def test_el_textarea():
    html = '<span class="foo textarea" id="f-f">&nbsp;</span>'
    el = Form('f', static=True).add_textarea('f')
    assert el(class_='foo') == html, el()

    html = '<span class="textarea" id="f-f">foo</span>'
    el = Form('f', static=True).add_textarea('f', defaultval='foo')
    assert el() == html, el()
示例#4
0
 def __init__(self):
     Form.__init__(self, 'reqnoteform')
     self.add_header('header', 'Header')
     self.add_text('text', 'Text')
     self.add_text('text3', 'Text3')
     self.add_header('header2', 'Header2')
     self.add_text('text2', 'Text2')
     self.add_text('text4', 'Text4')
示例#5
0
    def __init__(self):
        Form.__init__(self, 'testform')

        self.add_button('button', 'Button', defaultval='PushMe')
        self.add_checkbox('checkbox', 'Checkbox')
        self.add_file('file', 'File')
        self.add_hidden('hidden', defaultval='my hidden val')
        self.add_image('image',
                       'Image',
                       defaultval='my image val',
                       src='images/icons/b_edit.png')
        self.add_reset('reset')
        self.add_submit('submit')
        self.add_cancel('cancel')
        self.add_text('text', 'Text')
        # a little out of order
        self.add_password('password', 'Password')
        self.add_confirm('confirm', 'Confirm Password', match='password')
        self.add_date('date', 'Date', defaultval=datetime.date(2009, 12, 3))
        self.add_email('email', 'Email')
        self.add_time('time', 'Time')
        self.add_url('url', 'URL')
        options = [('1', 'one'), ('2', 'two')]
        self.add_select('select', options, 'Select')
        self.add_mselect('mselect', options, 'Multi Select')
        self.add_textarea('textarea', 'Text Area')
        self.add_passthru('passthru', 123)
        self.add_fixed('fixed', 'Fixed', 'fixed val')
        self.add_static('static', 'Static', 'static val')
        self.add_header('header', 'header')

        # test element group with class attribute
        sg = self.add_elgroup('group')
        sg.add_text('ingroup1', 'ingroup1')
        sg.add_text('ingroup2', 'ingroup2')

        self.add_mcheckbox('mcb1', 'mcb1', defaultval='red', group='mcbgroup')
        self.add_mcheckbox('mcb2',
                           'mcb2',
                           defaultval='green',
                           group='mcbgroup')

        self.add_radio('r1', 'r1', defaultval='truck', group='rgroup')
        self.add_radio('r2', 'r2', defaultval='car', group='rgroup')

        self.add_radio('animal_dog',
                       'dog',
                       defaultval='dog',
                       group='animalgroup',
                       label_after=True)
        self.add_radio('animal_cat',
                       'cat',
                       defaultval='cat',
                       group='animalgroup',
                       label_after=True)
示例#6
0
    def test_add_field_errors_string(self):
        form = Form('f')
        form.add_text('text1', 'Value')
        form.add_text('text2', 'Value')

        result = form.add_field_errors({
            'text1': 'Generic Error',
            'text2': 'Error'
        })
        assert result
        self.assertEqual(form.elements.text1.errors, ['Generic Error'])
        self.assertEqual(form.elements.text2.errors, ['Error'])
def test_el_url():
    html = '<span class="text static" id="f-f">&nbsp;</span>'
    el = Form('f', static=True).add_url('f')
    assert el() == html, el()

    html = '<span class="text static" id="f-f">example.org</span>'
    el = Form('f', static=True).add_url('f', defaultval="example.org")
    assert el() == html, el()

    html = '<span class="text static" id="f-f"><a href="http://example.org">' \
        'http://example.org</a></span>'
    el = Form('f', static=True).add_url('f', defaultval="http://example.org")
    assert el() == html, el()
示例#8
0
    def test_add_field_errors_extras(self):
        # the result of calling add_field_errors() when all errors are not
        # processed should be False
        form = Form('f')
        form.add_text('text1', 'Value')
        form.add_text('text2', 'Value')

        result = form.add_field_errors({
            'text1': 'Generic Error',
            'text2': 'Error',
            'not there': 'Error'
        })
        assert result is False
def test_el_select_list_tuples():
    o = [(1, 'a'), (2, 'b')]
    html = '<span class="select" id="f-f">&nbsp;</span>'
    el = Form('f', static=True).add_select('f', o)
    assert el() == html, el()

    html = '<span class="select" id="f-f">a</span>'
    el = Form('f', static=True).add_select('f', o, defaultval=1)
    assert el() == html, el()
    el = Form('f', static=True).add_select('f', o, defaultval='1')
    assert el() == html, el()
    el = Form('f', static=True).add_select('f', o, defaultval=u'1')
    assert el() == html, el()
示例#10
0
    def __init__(self):
        Form.__init__(self, 'testform')

        self.add_header('input-els', 'Optional Elements')
        self.add_button('button', 'Button', defaultval='PushMe')
        self.add_checkbox('checkbox', 'Checkbox')
        self.add_file('file', 'File')
        self.add_hidden('hidden', defaultval='my hidden val')
        self.add_image('image', 'Image', defaultval='my image val', src='images/icons/b_edit.png')
        el = self.add_text('text', 'Text')
        el.add_note('a note')
        el.add_note('an <strong>HTML</strong> note', False)
        el = self.add_text('nolabel', defaultval='No Label')
        el.add_note('a note')
        self.add_password('password', 'Password')
        el = self.add_confirm('confirm', 'Confirm Password', match='password')
        el.add_note('confirm characters for password field are automatically masked')
        el = self.add_date('date', 'Date', defaultval=datetime.date(2009, 12, 3))
        el.add_note('note the automatic conversion from datetime object')
        emel = self.add_email('email', 'Email')
        el = self.add_confirm('confirmeml', 'Confirm Email', match=emel)
        el.add_note('note you can confirm with the name of the field or the element object')
        el.add_note('when not confirming password field, characters are not masked')
        self.add_time('time', 'Time')
        self.add_url('url', 'URL')
        options = [('1', 'one'), ('2', 'two')]
        self.add_select('select', options, 'Select')
        self.add_mselect('mselect', options, 'Multi Select')
        self.add_textarea('textarea', 'Text Area')
        self.add_fixed('fixed', 'Fixed', 'fixed val')
        self.add_fixed('fixed-no-label', defaultval='fixed no label')
        self.add_static('static', 'Static', 'static val')
        self.add_static('static-no-label', defaultval='static val no label')

        # want a header for div wrapping only, header element should not actually render
        self.add_header('header-for-div-wrap-only')
        self.add_text('hfdwo-t1', 'Text1')
        self.add_text('hfdwo-t2', 'Text2')

        # test header with blank text
        self.add_header('header-blank-text', '')
        self.add_text('hbt-t1', 'Text1')
        self.add_text('hbt-t2', 'Text2')

        # test element group with class attribute
        self.add_header('eg-class-attr', 'Element Group with Class Attribute')
        sg = self.add_elgroup('submit-group', class_='submit-only')
        sg.add_submit('preview', defaultval="Preview")
        el = sg.add_submit('submit')
        el.add_attr('class', 'customclass')
示例#11
0
    def test_add_field_errors_list(self):
        form = Form('f')
        form.add_text('text1', 'Value')
        form.add_text('text2', 'Value')

        result = form.add_field_errors({
            'text1': ['Generic Error 1', 'Generic Error 2'],
            'text2': ['Error 1', 'Error 2']
        })
        assert result
        assert len(form.elements.text1.errors) == 2
        self.assertEqual(form.elements.text1.errors,
                         ['Generic Error 1', 'Generic Error 2'])
        self.assertEqual(form.elements.text2.errors, ['Error 1', 'Error 2'])
示例#12
0
def test_el_select_list():
    o = ['foo', 'bar']
    html = '<span class="select" id="f-f">&nbsp;</span>'
    el = Form('f', static=True).add_select('f', o)
    assert el() == html, el()

    html = '<span class="select" id="f-f">foo</span>'
    el = Form('f', static=True).add_select('f', o, defaultval='foo')
    assert el() == html, el()
    el = Form('f', static=True).add_select('f', o, defaultval=u'foo')
    assert el() == html, el()

    html = '<span class="select" id="f-f">bar</span>'
    el = Form('f', static=True).add_select('f', o, defaultval='bar')
    assert el() == html, el()
示例#13
0
def test_el_button():
    el = Form('f', static=True).add_button('field', 'Field')
    assert el.render() == '', el.render()

    el = Form('f', static=True).add_button('field',
                                           'Field',
                                           defaultval='the button')
    assert el.render() == '', el.render()
示例#14
0
 def test_submit(self):
     f = Form('login')
     f.add_text('username', 'User Name')
     f.set_defaults({'username': '******'})
     post = {'login-submit-flag': 'submitted', 'username': '******'}
     f.set_submitted(post)
     self.assertEqual(
         '<input class="text" id="login-username" name="username" type="text" value="test2" />',
         str(f.elements.username.render()))
     assert f.get_values() == {
         'username': '******',
         'login-submit-flag': 'submitted'
     }
示例#15
0
 def test_first_class_elements(self):
     """
     first element in form and under header should have a 'first' class
     """
     form_first_html = '<div id="user-username-row" class="text row odd first">'
     header_first_html = '<div id="user-groupname-row" class="text row even first">'
     form = Form('user')
     form.add_text('username', 'User Name')
     form.add_header('group_membership_header', 'Group Membership')
     form.add_text('groupname', 'Group')
     form_html = form.render()
     assert form_html.find(form_first_html) > -1
     assert form_html.find(header_first_html) > -1
示例#16
0
def test_el_text():
    html = '<span class="text static" id="f-field">&nbsp;</span>'
    form = Form('f', static=True)
    el = form.add_text('field', 'Field')
    assert el() == html, el()

    form = Form('f', static=True)
    el = form.add_text('field', 'Field', maxlength=1)
    assert el() == html, el()

    html = '<span class="text static" id="f-field">one</span>'
    form = Form('f', static=True)
    el = form.add_text('field', 'Field', defaultval='one')
    assert el() == html, el()
示例#17
0
 def test_default(self):
     f = Form('login')
     f.add_text('username', 'User Name')
     f.add_file('file')
     filesub = DumbObject(filename='text.txt',
                          content_type='text/plain',
                          content_length=10)
     f.set_defaults({'username': '******', 'file': filesub})
     self.assertEqual(
         '<input class="text" id="login-username" name="username" type="text" value="test1" />',
         str(f.elements.username.render()))
示例#18
0
def test_el_date():
    html = '<span class="text static" id="f-field">&nbsp;</span>'
    el = Form('f', static=True).add_date('field', 'Field')
    assert el() == html, el()

    # our date-time object should get converted to the appropriate format
    html = '<span class="text static" id="f-field">12/03/2009</span>'
    el = Form('f', static=True).add_date('field',
                                         'Field',
                                         defaultval=datetime.date(2009, 12, 3))
    assert el() == html, el()

    # european style dates
    html = '<span class="text static" id="f-field">03/12/2009</span>'
    el = Form('f', static=True).add_date('field',
                                         'Field',
                                         defaultval=datetime.date(2009, 12, 3),
                                         month_style='dd/mm/yyyy')
    assert el() == html, el()
示例#19
0
def test_el_select_multiple():
    o = [(1, 'foo'), (2, 'bar')]
    html = '<span class="select" id="f-f">&nbsp;</span>'
    el = Form('f', static=True).add_select('f', o, multiple=True)
    assert el() == html, el()

    html = '<span class="select" id="f-f">foo</span>'
    el = Form('f', static=True).add_select('f', o, multiple=True, defaultval=1)
    assert el() == html, el()
    el = Form('f', static=True).add_select('f',
                                           o,
                                           multiple=True,
                                           defaultval='1')
    assert el() == html, el()
    el = Form('f', static=True).add_select('f',
                                           o,
                                           multiple=True,
                                           defaultval=u'1')
    assert el() == html, el()
    el = Form('f', static=True).add_select('f',
                                           o,
                                           multiple=True,
                                           defaultval=[1, 3])
    assert el() == html, el()

    html = '<span class="select" id="f-f">foo, bar</span>'
    el = Form('f', static=True).add_select('f',
                                           o,
                                           multiple=True,
                                           defaultval=[1, 2])
    assert el() == html, el()
示例#20
0
    def test_is_submit(self):
        f1 = Form('login')
        assert not f1.is_submitted()

        post = {'login-submit-flag': 'submitted'}
        f1.set_submitted(post)
        assert f1.is_submitted()
示例#21
0
 def test_dup_fields(self):
     f = Form('f')
     f.add_text('f')
     try:
         f.add_text('f')
         self.fail('should not be able to add elements with the same id')
     except ValueError:
         pass
示例#22
0
 def test_exception_on_static_submit(self):
     f1 = Form('login1', static=True)
     f1.add_text('field')
     post = {'login1-submit-flag': 'submitted', 'field': 'foo'}
     try:
         f1.set_submitted(post)
         assert False, 'expected exception for submitting to static form'
     except ProgrammingError:
         pass
示例#23
0
    def test_blank_radio(self):
        f = Form('login')
        el1 = f.add_radio('radio1', 'Radio 1', 1, 'rgroup1', selected=True)
        el2 = f.add_radio('radio2', 'Radio 2', 2, 'rgroup1')
        assert 'checked="checked"' in el1()
        assert 'checked="checked"' not in el2()
        post = {'login-submit-flag': 'submitted'}
        f.set_submitted(post)
        assert not f.get_values()['rgroup1']

        # should unset on re-post after a blank submit
        assert 'selected="selected"' not in el1()
        assert 'selected="selected"' not in el2()
示例#24
0
    def test_blank_multicheckbox(self):
        f = Form('login')
        el1 = f.add_mcheckbox('mcheck1', 'Check 1', 1, 'cgroup1', checked=True)
        el2 = f.add_mcheckbox('mcheck2', 'Check 2', 2, 'cgroup1')
        assert 'checked="checked"' in el1()
        assert 'checked="checked"' not in el2()
        post = {'login-submit-flag': 'submitted'}
        f.set_submitted(post)
        assert not f.get_values()['cgroup1']

        # should unset on re-post after a blank submit
        assert 'checked="checked"' not in el1()
        assert 'checked="checked"' not in el2()
示例#25
0
    def test_blank_multiselect(self):
        f = Form('login')
        options = [(1, 'one'), (2, 'two')]
        el = f.add_mselect('numlist', options, 'Disabled', defaultval=2)
        assert 'selected="selected"' in el()
        post = {'login-submit-flag': 'submitted'}
        f.set_submitted(post)
        assert not f.get_values()['numlist']

        # should unset on re-post after a blank submit
        assert 'selected="selected"' not in el()
示例#26
0
def test_el_checkbox():
    not_checked = '<span class="checkbox static" id="f-f">no</span>'
    checked = '<span class="checkbox static" id="f-f">yes</span>'

    # no default
    f = Form('f', static=True)
    el = f.add_checkbox('f', 'f')
    assert el.render() == not_checked, el.render()
    el.defaultval = True
    assert el.render() == checked, el.render()

    # checked attribute
    f = Form('f', static=True)
    el = f.add_checkbox('f', 'f', checked='checked')
    assert el.render(checked='checked') == checked, el.render(
        checked='checked')
示例#27
0
    def test_blank_checkbox(self):
        html = L(
            '<input checked="checked" class="checkbox" id="login-disabled" name="disabled" '
            'type="checkbox" />')
        f = Form('login')
        el = f.add_checkbox('disabled', 'Disabled', defaultval=True)
        self.assertEqual(el(), html)
        post = {'login-submit-flag': 'submitted'}
        f.set_submitted(post)
        dvalue = f.get_values()['disabled']
        assert dvalue is False

        # should unset on re-post after a blank submit
        html = L(
            '<input class="checkbox" id="login-disabled" name="disabled" type="checkbox" />'
        )
        self.assertEqual(el(), html)
示例#28
0
    def test_validator_recursion(self):
        """
            referencing .value from that field's validator causes a recursion
        """
        f = Form('f')

        def validator(form):
            try:
                f.elements.myfield.value
            except ElementInvalid as e:
                raise ValueInvalid(e)

        el = f.add_text('myfield', 'My Field', maxlength=1)
        el.add_processor(validator)
        f.set_submitted({'f-submit-flag': 'submitted', 'myfield': '12'})
        try:
            assert not f.is_valid()
        except RuntimeError as e:
            assert 'maximum recursion depth exceeded' in str(e), str(e)
示例#29
0
class TypeRegistrationTest(unittest.TestCase):
    def setUp(self):
        self.f = Form('login')

    def tearDown(self):
        self.f = None

    def testRegisterElementType1(self):
        self.f.register_element_type('testtype', TextElement)
        self.assertEqual(TextElement, self.f._registered_types['testtype'])

    def testRegisterDuplicateElementType(self):
        self.f.register_element_type('testtype', TextElement)

        try:
            self.f.register_element_type('testtype', TextElement)
        except ValueError:
            pass
        else:
            self.fail("expected a ValueError")
示例#30
0
    def test_is_cancel(self):
        f1 = Form('login')
        f1.add_cancel('cancel', 'Cancel')
        assert not f1.is_cancel()

        # cancel button, but form is not submitted
        post = {'cancel': 'submitted'}
        f1.set_submitted(post)
        assert not f1.is_cancel()

        # now submit form
        post['login-submit-flag'] = 'submitted'
        f1.set_submitted(post)
        assert f1.is_cancel()