from formencode.htmlgen import html import doctest # A test value that can't be encoded as ascii: uni_value = u'\xff' def test_basic(): output = 'hey there' assert str(html.a(href='test')('hey there')) == output assert str(html.a('hey there')(href='test')) == output assert str(html.a(href='test', c='hey there')) == output assert str(html.a('hey there', href='test')) == output assert str(html.a(href='test')('hey ', 'there')) == output assert str(html.a(href='test')(['hey ', 'there'])) == output def test_compound(): output = 'Hey you!' assert str(html.b('Hey ', html.i('you'), '!')) == output assert str(html.b()('Hey ')(html.i()('you'))('!')) == output inner = html('Hey ', html.i('you'), '!') assert html.str(inner) == 'Hey you!' assert str(inner) == 'Hey you!' assert str(html.b(inner)) == output def test_unicode(): try: uni_value.encode('ascii') except ValueError: pass else: assert 0, ( "We need something that can't be ASCII-encoded: %r (%r)" % (uni_value, uni_value.encode('ascii'))) assert (str(html.b(uni_value)) == ('%s' % uni_value).encode('utf-8')) def test_quote(): assert html.quote('!') == '<hey>!' assert html.quote(uni_value) == uni_value.encode('utf-8') assert html.quote(None) == '' assert html.str(None) == '' assert str(html.b('')) == '<hey>' def test_comment(): assert str(html.comment('test')) == '' assert (str(html.comment(uni_value)) == '' % uni_value.encode('utf-8')) assert str(html.comment('test')('this')) == '' def test_none(): assert html.str(None) == '' assert str(html.b(class_=None)('hey')) == 'hey' assert str(html.b(class_=' ')(None)) == '' def test_namespace(): output = '' assert str(html.b(**{'tal:content': 'options/whatever'})) == output assert str(html.b(tal__content='options/whatever')) == output if __name__ == '__main__': # It's like a super-mini py.test... for name, value in globals().items(): if name.startswith('test'): print name value() import htmlgen doctest.testmod(htmlgen) print 'doctest'