def testRenderError(self): try: moody.compile("{% if foo %}\n{{bar}}\n{% else %}\nHello world\n{% endif %}", name="foo").render(foo="foo") except TemplateRenderError as ex: self.assertEqual(ex.template_lineno, 2) self.assertEqual(ex.template_name, "foo") self.assertTrue(isinstance(ex.__cause__, NameError))
def testInheritance(self): parent_template = moody.compile("Hello {% block name %}world{% endblock %}") child_template = moody.compile("{% extends parent %}{% block name %}Dave {% block surname %}Hall{% endblock %}{% endblock %}") grandchild_template = moody.compile("{% extends child %}{% block surname %}Foo{% endblock %}") self.assertEqual(parent_template.render(), "Hello world") self.assertEqual(child_template.render(parent=parent_template), "Hello Dave Hall") self.assertEqual(grandchild_template.render(parent=parent_template, child=child_template), "Hello Dave Foo")
def testCompileError(self): try: moody.compile("{% if foo %}\n{{foo}}\n{% else %}\n{% flobble %}\n{% endif %}", name="foo") except TemplateCompileError as ex: self.assertEqual(ex.template_lineno, 4) self.assertEqual(ex.template_name, "foo") self.assertTrue(isinstance(ex.__cause__, SyntaxError))
def testCompileError(self): try: moody.compile( "{% if foo %}\n{{foo}}\n{% else %}\n{% flobble %}\n{% endif %}", name="foo") except TemplateCompileError as ex: self.assertEqual(ex.template_lineno, 4) self.assertEqual(ex.template_name, "foo") self.assertTrue(isinstance(ex.__cause__, SyntaxError))
def testRenderError(self): try: moody.compile( "{% if foo %}\n{{bar}}\n{% else %}\nHello world\n{% endif %}", name="foo").render(foo="foo") except TemplateRenderError as ex: self.assertEqual(ex.template_lineno, 2) self.assertEqual(ex.template_name, "foo") self.assertTrue(isinstance(ex.__cause__, NameError))
def testForMacro(self): # Test basic functionality. template1 = moody.compile("{% for n in range(0, 3) %}{{n}}{% endfor %}") self.assertEqual(template1.render(), "012") # Test various syntax errors. self.assertRaises(TemplateCompileError, lambda: moody.compile("{% for n in range(0, 3) %}")) # Test variable expansion. template2 = moody.compile("{% for n, m in value %}{{n}}{{m}}{% endfor %}") self.assertEqual(template2.render(value=[["foo", "bar"]]), "foobar") self.assertRaises(TemplateRenderError, lambda: template2.render(value=[["foo"]])) self.assertRaises(TemplateRenderError, lambda: template2.render(value=[["foo", "bar", "foobar"]]))
def testInheritance(self): parent_template = moody.compile( "Hello {% block name %}world{% endblock %}") child_template = moody.compile( "{% extends parent %}{% block name %}Dave {% block surname %}Hall{% endblock %}{% endblock %}" ) grandchild_template = moody.compile( "{% extends child %}{% block surname %}Foo{% endblock %}") self.assertEqual(parent_template.render(), "Hello world") self.assertEqual(child_template.render(parent=parent_template), "Hello Dave Hall") self.assertEqual( grandchild_template.render(parent=parent_template, child=child_template), "Hello Dave Foo")
def testAutoescape(self): template1 = moody.compile("{{value}}{% print value %}", name="test.html") self.assertEqual( template1.render(value="<foo bar='bar' baz=\"baz\">"), "<foo bar='bar' baz="baz"><foo bar='bar' baz=\"baz\">" )
def testPyMacro(self): template1 = moody.compile(""" {% py items = range(10) %} {% for n in items %}{{n}}{% endfor %} """) self.assertEqual(template1.render().strip(), "0123456789") template2 = moody.compile(""" {% py items = [] for n in range(10): items.append(n) %} {% for n in items %}{{n}}{% endfor %} """) self.assertEqual(template2.render().strip(), "0123456789")
def testForMacro(self): # Test basic functionality. template1 = moody.compile( "{% for n in range(0, 3) %}{{n}}{% endfor %}") self.assertEqual(template1.render(), "012") # Test various syntax errors. self.assertRaises(TemplateCompileError, lambda: moody.compile("{% for n in range(0, 3) %}")) # Test variable expansion. template2 = moody.compile( "{% for n, m in value %}{{n}}{{m}}{% endfor %}") self.assertEqual(template2.render(value=[["foo", "bar"]]), "foobar") self.assertRaises(TemplateRenderError, lambda: template2.render(value=[["foo"]])) self.assertRaises( TemplateRenderError, lambda: template2.render(value=[["foo", "bar", "foobar"]]))
def testIfMacro(self): # Test single if. template1 = moody.compile("{% if test == 'foo' %}foo{% endif %}") self.assertEqual(template1.render(test="foo"), "foo") self.assertEqual(template1.render(test="bar"), "") # Test if and else. template2 = moody.compile( "{% if test == 'foo' %}foo{% else %}bar{% endif %}") self.assertEqual(template2.render(test="foo"), "foo") self.assertEqual(template2.render(test="bar"), "bar") # Test if, elif and else. template3 = moody.compile( "{% if test == 'foo' %}foo{% elif test == 'bar' %}bar{% else %}snafu{% endif %}" ) self.assertEqual(template3.render(test="foo"), "foo") self.assertEqual(template3.render(test="bar"), "bar") self.assertEqual(template3.render(test="snafu"), "snafu") # Test if and elif template4 = moody.compile( "{% if test == 'foo' %}foo{% elif test == 'bar' %}bar{% elif test == 'snafu' %}snafu{% endif %}" ) self.assertEqual(template4.render(test="foo"), "foo") self.assertEqual(template4.render(test="bar"), "bar") self.assertEqual(template4.render(test="snafu"), "snafu") self.assertEqual(template4.render(test="wibble"), "") # Test various syntax errors. self.assertRaises(TemplateCompileError, lambda: moody.compile("{% if True %}")) self.assertRaises( TemplateCompileError, lambda: moody.compile( "{% if True %}{% else %}{% elif True %}{% endif %}")) self.assertRaises( TemplateCompileError, lambda: moody.compile( "{% if True %}{% else %}{% else %}{% endif %}"))
def testLineMacros(self): template = moody.compile(""" %% if test.startswith("foo") {% if test.endswith("bar") %}{{test}}{% endif %} %% endif """) self.assertEqual(template.render(test="foobar"), """ foobar """)
def testLineComments(self): template = moody.compile(""" %% if test.startswith("foo") ## This comment should be ignored. {% if test.endswith("bar") %}{{test}}{% endif %} %% endif """) self.assertEqual(template.render(test="foobar"), """ foobar """)
def testNestedTags(self): template1 = moody.compile(""" {% if test.startswith("foo") %} {% if test == "foobar" %} {{test}} {% else %} {% for item in range(2) %}{% if True %}{{test}}{% endif %}{% endfor %} {% endif %} {% else %} snafu {% endif %} """) self.assertEqual(template1.render(test="foobar").strip(), "foobar") self.assertEqual(template1.render(test="foo").strip(), "foofoo") self.assertEqual(template1.render(test="").strip(), "snafu")
def testIfMacro(self): # Test single if. template1 = moody.compile("{% if test == 'foo' %}foo{% endif %}") self.assertEqual(template1.render(test="foo"), "foo") self.assertEqual(template1.render(test="bar"), "") # Test if and else. template2 = moody.compile("{% if test == 'foo' %}foo{% else %}bar{% endif %}") self.assertEqual(template2.render(test="foo"), "foo") self.assertEqual(template2.render(test="bar"), "bar") # Test if, elif and else. template3 = moody.compile("{% if test == 'foo' %}foo{% elif test == 'bar' %}bar{% else %}snafu{% endif %}") self.assertEqual(template3.render(test="foo"), "foo") self.assertEqual(template3.render(test="bar"), "bar") self.assertEqual(template3.render(test="snafu"), "snafu") # Test if and elif template4 = moody.compile("{% if test == 'foo' %}foo{% elif test == 'bar' %}bar{% elif test == 'snafu' %}snafu{% endif %}") self.assertEqual(template4.render(test="foo"), "foo") self.assertEqual(template4.render(test="bar"), "bar") self.assertEqual(template4.render(test="snafu"), "snafu") self.assertEqual(template4.render(test="wibble"), "") # Test various syntax errors. self.assertRaises(TemplateCompileError, lambda: moody.compile("{% if True %}")) self.assertRaises(TemplateCompileError, lambda: moody.compile("{% if True %}{% else %}{% elif True %}{% endif %}")) self.assertRaises(TemplateCompileError, lambda: moody.compile("{% if True %}{% else %}{% else %}{% endif %}"))
def testIncludeMacro(self): template1 = moody.compile("Foo") template2 = moody.compile("{% include inner %}") self.assertEqual(template1.render(), template2.render(inner=template1))
def testAutoescape(self): template1 = moody.compile("{{value}}{% print value %}", name="test.html") self.assertEqual(template1.render(value="<foo bar='bar' baz=\"baz\">"), "<foo bar='bar' baz="baz"><foo bar='bar' baz=\"baz\">")
def testDefaultParams(self): template1 = moody.compile("{{test}}", params={"test": "foo"}) self.assertEqual(template1.render(), "foo") self.assertEqual(template1.render(test="bar"), "bar")