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!')
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"> </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()
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')
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)
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"> </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()
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"> </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()
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')
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'])
def test_el_select_list(): o = ['foo', 'bar'] html = '<span class="select" id="f-f"> </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()
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()
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' }
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
def test_el_text(): html = '<span class="text static" id="f-field"> </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()
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()))
def test_el_date(): html = '<span class="text static" id="f-field"> </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()
def test_el_select_multiple(): o = [(1, 'foo'), (2, 'bar')] html = '<span class="select" id="f-f"> </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()
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()
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
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
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()
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()
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()
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')
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)
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)
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")
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()