def test_markup(): assert Markup(html.a(name='value')(html.b(first='one'), 'Text', html.c())) == '<a name="value"><b first="one" />Text<c></c></a>' assert Markup(html.p(html.comment('Comment'))) == '<p><!--Comment--></p>' assert Markup(html.p(html.safe('<strong> Text </strong>'))) == '<p><strong> Text </strong></p>' assert Markup(html.safe('<strong> Text </strong>')) == '<strong> Text </strong>' assert rn(html.p(Markup('<strong> Text </strong>'))) == '<p><strong> Text </strong></p>' assert rn(html.p(Markup(' '), Markup('<strong>One</strong>'))) == '<p> <strong>One</strong></p>' assert render(html.p(Markup(' '), Markup('<strong>One</strong>'))) == u'<p>\n \n <strong>One</strong>\n</p>\n'
def test_nested_indentating(): elements = [ html.doctype('html'), html.html(lang='en', class_='no-js')( html.head( html.title('Hello') ), html.body( html.comment(' Body starts here '), html.p('Hello World!') ) ) ] assert render(elements) == """<!doctype html>
def test_many_child_indenting(): assert render(html.a(name='value')(html.b(first='one'), 'Text', html.c())) == '<a name="value">\n <b first="one" />\n Text\n <c></c>\n</a>\n'
def test_many_text_child_indenting(): assert render(html.a('One', 'Two')) == '<a>\n One\n Two\n</a>\n'
def test_one_non_text_child_indenting(): assert render(html.a(html.b)) == '<a>\n <b />\n</a>\n'
def test_one_text_child_indenting(): assert render(html.a(name='value')('Text')) == '<a name="value">Text</a>\n' assert render(html.a('Text')) == '<a>Text</a>\n'
def test_single_element_indenting(): assert render(html.a) == '<a />\n' assert render(html.a()) == '<a></a>\n' assert render(html.a(name='value')) == '<a name="value" />\n' assert render(html.a(name='value')()) == '<a name="value"></a>\n'
def test_escape_attribute_numbers(): render(html.a(x=5))
def test_escape_numbers(): render(html.a(5))
def test_newline(): assert render([html.p('First'), html.newline(), html.p('Second')]) == '<p>First</p>\n\n<p>Second</p>\n' assert render(html.div(html.p('First'), html.newline(), html.p('Second'))) == \ '<div>\n <p>First</p>\n \n <p>Second</p>\n</div>\n' assert rn([html.p('First'), html.newline(), html.p('Second')]) == '<p>First</p><p>Second</p>'
def test_render_level(): assert render(html.p(html.a('Text')), level=1) == ' <p>\n <a>Text</a>\n </p>\n' assert render(html.p(html.a('Text')), level=2) == ' <p>\n <a>Text</a>\n </p>\n'
def test_safe(): assert rn(html.safe('<strong> Text </strong>')) == '<strong> Text </strong>' assert rn(html.p(html.safe('<strong> Text </strong>'))) == '<p><strong> Text </strong></p>' assert render(html.p(html.safe('<strong> Text </strong>'))) == '<p>\n <strong> Text </strong>\n</p>\n'
def test_doctype(): assert rn(html.doctype('html')) == '<!doctype html>' assert render(html.doctype('html')) == '<!doctype html>\n'
def test_comment(): assert rn(html.comment('Comment')) == '<!--Comment-->' assert render(html.p(html.comment('Comment'))) == '<p>\n <!--Comment-->\n</p>\n'
def test_join(): assert render(html.p(html.join(html.a, 'Text', html.b()))) == '<p>\n <a />Text<b></b>\n</p>\n' assert render(html.join(html.p(html.a, 'Text', html.b()))) == '<p><a />Text<b></b></p>\n' assert rn(html.join(html.p(html.a, 'Text', html.b()))) == '<p><a />Text<b></b></p>'
def rn(element): return render(element, None)