| from mako.template import Template |
| import unittest |
| |
| |
| class ComponentTest(unittest.TestCase): |
| def test_component_noargs(self): |
| template = Template(""" |
| |
| ${mycomp()} |
| |
| <%component name="mycomp"> |
| hello mycomp ${variable} |
| </%component> |
| |
| """) |
| assert template.render(variable='hi').strip() == """hello mycomp hi""" |
| |
| def test_component_blankargs(self): |
| template = Template(""" |
| <%component name="mycomp()"> |
| hello mycomp ${variable} |
| </%component> |
| |
| ${mycomp()}""") |
| assert template.render(variable='hi').strip() == """hello mycomp hi""" |
| |
| def test_component_args(self): |
| template = Template(""" |
| <%component name="mycomp(a, b)"> |
| hello mycomp ${variable}, ${a}, ${b} |
| </%component> |
| |
| ${mycomp(5, 6)}""") |
| assert template.render(variable='hi', a=5, b=6).strip() == """hello mycomp hi, 5, 6""" |
| |
| def test_inter_component(self): |
| """test components calling each other""" |
| template = Template(""" |
| ${b()} |
| |
| <%component name="a">\ |
| im a |
| </%component> |
| |
| <%component name="b"> |
| im b |
| and heres a: ${a()} |
| </%component> |
| |
| <%component name="c"> |
| im c |
| </%component> |
| """) |
| # check that "a" is declared in "b", but not in "c" |
| assert "a" not in template.module.render_c.func_code.co_varnames |
| assert "a" in template.module.render_b.func_code.co_varnames |
| |
| # then test output |
| assert template.render().strip() == "im b\nand heres a: im a" |
| |
| def test_nested_component(self): |
| template = """ |
| |
| ${hi()} |
| |
| <%component name="hi"> |
| hey, im hi. |
| and heres ${foo()}, ${bar()} |
| |
| <%component name="foo"> |
| this is foo |
| </%component> |
| |
| <%component name="bar"> |
| this is bar |
| </%component> |
| </%component> |
| """ |
| t = Template(template) |
| #print t.code |
| print t.render() |
| |
| def test_nested_nested_component(self): |
| template = """ |
| |
| ${a()} |
| <%component name="a"> |
| <%component name="b1"> |
| </%component> |
| <%component name="b2"> |
| a_b2 ${c1()} |
| <%component name="c1"> |
| a_b2_c1 |
| </%component> |
| </%component> |
| <%component name="b3"> |
| a_b3 ${c1()} |
| <%component name="c1"> |
| a_b3_c1 heres x: ${x} |
| <% |
| y = 7 |
| %> |
| y is ${y} |
| </%component> |
| <%component name="c2"> |
| a_b3_c2 |
| y is ${y} |
| c1 is ${c1()} |
| </%component> |
| ${c2()} |
| </%component> |
| |
| ${b1()} ${b2()} ${b3()} |
| </%component> |
| """ |
| |
| t = Template(template) |
| #print t.code |
| print t.render(x=5) |
| |
| class ExceptionTest(unittest.TestCase): |
| def test_raise(self): |
| template = Template(""" |
| <% |
| raise Exception("this is a test") |
| %> |
| """, format_exceptions=False) |
| try: |
| template.render() |
| assert False |
| except Exception, e: |
| assert str(e) == "this is a test" |
| def test_handler(self): |
| def handle(context, error): |
| context.write("error message is " + str(error)) |
| return True |
| |
| template = Template(""" |
| <% |
| raise Exception("this is a test") |
| %> |
| """, error_handler=handle) |
| assert template.render().strip() == """error message is this is a test""" |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |