diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-05-29 18:18:04 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-05-31 14:03:02 -0400 |
commit | fb7f0437323ba836c68947d38f3604c3336e3a9b (patch) | |
tree | 756512a2b68f1c7270f028b487228fd0e3f13778 /test/test_template.py | |
parent | db498f217e03d772e0c0c37a526226d48ed790e2 (diff) | |
download | mako-fb7f0437323ba836c68947d38f3604c3336e3a9b.tar.gz |
Use tox / zimports
Change-Id: Ia047c7052a6d242c2cf1c7a83981f1e38ea4d928
Diffstat (limited to 'test/test_template.py')
-rw-r--r-- | test/test_template.py | 1349 |
1 files changed, 918 insertions, 431 deletions
diff --git a/test/test_template.py b/test/test_template.py index 1f2d0c1..89e5a61 100644 --- a/test/test_template.py +++ b/test/test_template.py @@ -1,17 +1,28 @@ # -*- coding: utf-8 -*- -from mako.template import Template, ModuleTemplate, ModuleInfo -from mako.lookup import TemplateLookup -from mako.ext.preprocessors import convert_comments -from mako import exceptions, runtime +import os +import unittest + from mako import compat +from mako import exceptions +from mako import runtime from mako import util -import os -from test.util import flatten_result, result_lines from mako.compat import u -from test import TemplateTest, eq_, template_base, module_base, \ - assert_raises, assert_raises_message, requires_python_2 -import unittest +from mako.ext.preprocessors import convert_comments +from mako.lookup import TemplateLookup +from mako.template import ModuleInfo +from mako.template import ModuleTemplate +from mako.template import Template +from test import assert_raises +from test import assert_raises_message +from test import eq_ +from test import module_base +from test import requires_python_2 +from test import template_base +from test import TemplateTest +from test.util import flatten_result +from test.util import result_lines + class ctx(object): def __init__(self, a, b): @@ -23,14 +34,17 @@ class ctx(object): def __exit__(self, *arg): pass + class EncodingTest(TemplateTest): def test_escapes_html_tags(self): from mako.exceptions import html_error_template - x = Template(""" + x = Template( + """ X: <% raise Exception('<span style="color:red">Foobar</span>') %> - """) + """ + ) try: x.render() @@ -38,254 +52,390 @@ class EncodingTest(TemplateTest): # <h3>Exception: <span style="color:red">Foobar</span></h3> markup = html_error_template().render(full=False, css=False) if compat.py3k: - assert '<span style="color:red">Foobar</span></h3>'\ - .encode('ascii') not in markup - assert '<span style="color:red"'\ - '>Foobar</span>'\ - .encode('ascii') in markup + assert ( + '<span style="color:red">Foobar</span></h3>'.encode( + "ascii" + ) + not in markup + ) + assert ( + "<span style="color:red"" + ">Foobar</span>".encode("ascii") in markup + ) else: - assert '<span style="color:red">Foobar</span></h3>' \ - not in markup - assert '<span style="color:red"'\ - '>Foobar</span>' in markup + assert ( + '<span style="color:red">Foobar</span></h3>' not in markup + ) + assert ( + "<span style="color:red"" + ">Foobar</span>" in markup + ) def test_unicode(self): self._do_memory_test( - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), ) def test_encoding_doesnt_conflict(self): self._do_memory_test( - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - output_encoding='utf-8' + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), + output_encoding="utf-8", ) def test_unicode_arg(self): - val = u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + val = u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ) self._do_memory_test( "${val}", - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - template_args={'val':val} + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), + template_args={"val": val}, ) def test_unicode_file(self): self._do_file_test( "unicode.html", - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), ) def test_unicode_file_code(self): self._do_file_test( - 'unicode_code.html', + "unicode_code.html", u("""hi, drôle de petite voix m’a réveillé."""), - filters=flatten_result + filters=flatten_result, ) def test_unicode_file_lookup(self): lookup = TemplateLookup( - directories=[template_base], - output_encoding='utf-8', - default_filters=['decode.utf8']) + directories=[template_base], + output_encoding="utf-8", + default_filters=["decode.utf8"], + ) if compat.py3k: - template = lookup.get_template('/chs_unicode_py3k.html') + template = lookup.get_template("/chs_unicode_py3k.html") else: - template = lookup.get_template('/chs_unicode.html') + template = lookup.get_template("/chs_unicode.html") eq_( - flatten_result(template.render_unicode(name='毛泽东')), - u('毛泽东 是 新中国的主席<br/> Welcome 你 to 北京.') + flatten_result(template.render_unicode(name="毛泽东")), + u("毛泽东 是 新中国的主席<br/> Welcome 你 to 北京."), ) def test_unicode_bom(self): self._do_file_test( - 'bom.html', - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + "bom.html", + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), ) self._do_file_test( - 'bommagic.html', - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + "bommagic.html", + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), ) self.assertRaises( exceptions.CompileException, - Template, filename=self._file_path('badbom.html'), - module_directory=module_base + Template, + filename=self._file_path("badbom.html"), + module_directory=module_base, ) def test_unicode_memory(self): - val = u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + val = u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ) self._do_memory_test( - ("## -*- coding: utf-8 -*-\n" + val).encode('utf-8'), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + ("## -*- coding: utf-8 -*-\n" + val).encode("utf-8"), + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), ) def test_unicode_text(self): - val = u("""<%text>Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »</%text>""") + val = u( + "<%text>Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »</%text>" + ) self._do_memory_test( - ("## -*- coding: utf-8 -*-\n" + val).encode('utf-8'), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""") + ("## -*- coding: utf-8 -*-\n" + val).encode("utf-8"), + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), ) def test_unicode_text_ccall(self): - val = u(""" + val = u( + """ <%def name="foo()"> ${capture(caller.body)} </%def> <%call expr="foo()"> - <%text>Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »</%text> - </%call>""") + <%text>Alors vous imaginez ma surprise, au lever du jour, +quand une drôle de petite voix m’a réveillé. Elle disait: +« S’il vous plaît… dessine-moi un mouton! »</%text> + </%call>""" + ) self._do_memory_test( - ("## -*- coding: utf-8 -*-\n" + val).encode('utf-8'), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - filters=flatten_result + ("## -*- coding: utf-8 -*-\n" + val).encode("utf-8"), + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), + filters=flatten_result, ) def test_unicode_literal_in_expr(self): if compat.py3k: self._do_memory_test( - u("""## -*- coding: utf-8 -*- - ${"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"} - """).encode('utf-8'), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - filters = lambda s:s.strip() + u( + "## -*- coding: utf-8 -*-\n" + '${"Alors vous imaginez ma surprise, au lever du jour, ' + "quand une drôle de petite voix m’a réveillé. " + "Elle disait: " + '« S’il vous plaît… dessine-moi un mouton! »"}\n' + ).encode("utf-8"), + u( + "Alors vous imaginez ma surprise, au lever du jour, " + "quand une drôle de petite voix m’a réveillé. " + "Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + ), + filters=lambda s: s.strip(), ) else: self._do_memory_test( - u("""## -*- coding: utf-8 -*- - ${u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"} - """).encode('utf-8'), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - filters = lambda s:s.strip() + u( + "## -*- coding: utf-8 -*-\n" + '${u"Alors vous imaginez ma surprise, au lever du jour, ' + "quand une drôle de petite voix m’a réveillé. " + "Elle disait: « S’il vous plaît… dessine-moi un " + 'mouton! »"}' + ).encode("utf-8"), + u( + "Alors vous imaginez ma surprise, au lever du jour, " + "quand une drôle de petite voix m’a réveillé. " + "Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + ), + filters=lambda s: s.strip(), ) def test_unicode_literal_in_expr_file(self): self._do_file_test( - 'unicode_expr.html', - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - lambda t:t.strip() + "unicode_expr.html", + u( + "Alors vous imaginez ma surprise, au lever du jour, " + "quand une drôle de petite voix m’a réveillé. " + "Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + ), + lambda t: t.strip(), ) def test_unicode_literal_in_code(self): if compat.py3k: self._do_memory_test( - u("""## -*- coding: utf-8 -*- + u( + """## -*- coding: utf-8 -*- <% - context.write("Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »") + context.write("Alors vous imaginez ma surprise, au """ + """lever du jour, quand une drôle de petite voix m’a """ + """réveillé. Elle disait: """ + """« S’il vous plaît… dessine-moi un mouton! »") %> - """).encode('utf-8'), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - filters=lambda s:s.strip() + """ + ).encode("utf-8"), + u( + "Alors vous imaginez ma surprise, au lever du jour, " + "quand une drôle de petite voix m’a réveillé. " + "Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + ), + filters=lambda s: s.strip(), ) else: self._do_memory_test( - u("""## -*- coding: utf-8 -*- + u( + """## -*- coding: utf-8 -*- <% - context.write(u"Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »") + context.write(u"Alors vous imaginez ma surprise, """ + """au lever du jour, quand une drôle de petite voix """ + """m’a réveillé. Elle disait: « S’il vous plaît… """ + """dessine-moi un mouton! »") %> - """).encode('utf-8'), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - filters=lambda s:s.strip() + """ + ).encode("utf-8"), + u( + "Alors vous imaginez ma surprise, au lever du jour, " + "quand une drôle de petite voix m’a réveillé. " + "Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + ), + filters=lambda s: s.strip(), ) def test_unicode_literal_in_controlline(self): if compat.py3k: self._do_memory_test( - u("""## -*- coding: utf-8 -*- + u( + """## -*- coding: utf-8 -*- <% x = "drôle de petite voix m’a réveillé." %> % if x=="drôle de petite voix m’a réveillé.": hi, ${x} % endif - """).encode('utf-8'), + """ + ).encode("utf-8"), u("""hi, drôle de petite voix m’a réveillé."""), - filters=lambda s:s.strip(), + filters=lambda s: s.strip(), ) else: self._do_memory_test( - u("""## -*- coding: utf-8 -*- + u( + """## -*- coding: utf-8 -*- <% x = u"drôle de petite voix m’a réveillé." %> % if x==u"drôle de petite voix m’a réveillé.": hi, ${x} % endif - """).encode('utf-8'), + """ + ).encode("utf-8"), u("""hi, drôle de petite voix m’a réveillé."""), - filters=lambda s:s.strip(), + filters=lambda s: s.strip(), ) def test_unicode_literal_in_tag(self): self._do_file_test( "unicode_arguments.html", [ - u('x is: drôle de petite voix m’a réveillé'), - u('x is: drôle de petite voix m’a réveillé'), - u('x is: drôle de petite voix m’a réveillé'), - u('x is: drôle de petite voix m’a réveillé'), + u("x is: drôle de petite voix m’a réveillé"), + u("x is: drôle de petite voix m’a réveillé"), + u("x is: drôle de petite voix m’a réveillé"), + u("x is: drôle de petite voix m’a réveillé"), ], - filters=result_lines + filters=result_lines, ) self._do_memory_test( util.read_file(self._file_path("unicode_arguments.html")), [ - u('x is: drôle de petite voix m’a réveillé'), - u('x is: drôle de petite voix m’a réveillé'), - u('x is: drôle de petite voix m’a réveillé'), - u('x is: drôle de petite voix m’a réveillé'), + u("x is: drôle de petite voix m’a réveillé"), + u("x is: drôle de petite voix m’a réveillé"), + u("x is: drôle de petite voix m’a réveillé"), + u("x is: drôle de petite voix m’a réveillé"), ], - filters=result_lines + filters=result_lines, ) def test_unicode_literal_in_def(self): if compat.py3k: self._do_memory_test( - u("""## -*- coding: utf-8 -*- + u( + """## -*- coding: utf-8 -*- <%def name="bello(foo, bar)"> Foo: ${ foo } Bar: ${ bar } </%def> - <%call expr="bello(foo='árvíztűrő tükörfúrógép', bar='ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> - </%call>""").encode('utf-8'), - u("""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"""), - filters=flatten_result + <%call expr="bello(foo='árvíztűrő tükörfúrógép', """ + """bar='ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> + </%call>""" + ).encode("utf-8"), + u( + """Foo: árvíztűrő tükörfúrógép """ + """Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""" + ), + filters=flatten_result, ) self._do_memory_test( - u("""## -*- coding: utf-8 -*- - <%def name="hello(foo='árvíztűrő tükörfúrógép', bar='ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> - Foo: ${ foo } - Bar: ${ bar } - </%def> - ${ hello() }""").encode('utf-8'), - u("""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"""), - filters=flatten_result + u( + "## -*- coding: utf-8 -*-\n" + """<%def name="hello(foo='árvíztűrő tükörfúrógép', """ + """bar='ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')">\n""" + "Foo: ${ foo }\n" + "Bar: ${ bar }\n" + "</%def>\n" + "${ hello() }" + ).encode("utf-8"), + u( + """Foo: árvíztűrő tükörfúrógép Bar: """ + """ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""" + ), + filters=flatten_result, ) else: self._do_memory_test( - u("""## -*- coding: utf-8 -*- + u( + """## -*- coding: utf-8 -*- <%def name="bello(foo, bar)"> Foo: ${ foo } Bar: ${ bar } </%def> - <%call expr="bello(foo=u'árvíztűrő tükörfúrógép', bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> - </%call>""").encode('utf-8'), - u("""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"""), - filters=flatten_result + <%call expr="bello(foo=u'árvíztűrő tükörfúrógép', """ + """bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> + </%call>""" + ).encode("utf-8"), + u( + """Foo: árvíztűrő tükörfúrógép Bar: """ + """ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""" + ), + filters=flatten_result, ) self._do_memory_test( - u("""## -*- coding: utf-8 -*- - <%def name="hello(foo=u'árvíztűrő tükörfúrógép', bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> + u( + """## -*- coding: utf-8 -*- + <%def name="hello(foo=u'árvíztűrő tükörfúrógép', """ + """bar=u'ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP')"> Foo: ${ foo } Bar: ${ bar } </%def> - ${ hello() }""").encode('utf-8'), - u("""Foo: árvíztűrő tükörfúrógép Bar: ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"""), - filters=flatten_result + ${ hello() }""" + ).encode("utf-8"), + u( + """Foo: árvíztűrő tükörfúrógép Bar: """ + """ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP""" + ), + filters=flatten_result, ) def test_input_encoding(self): @@ -296,32 +446,32 @@ class EncodingTest(TemplateTest): self._do_memory_test( u("hello ${f('śląsk')}"), u("hello śląsk"), - input_encoding='utf-8', - template_args={'f': lambda x:x} + input_encoding="utf-8", + template_args={"f": lambda x: x}, ) self._do_memory_test( u("## -*- coding: utf-8 -*-\nhello ${f('śląsk')}"), u("hello śląsk"), - template_args={'f': lambda x:x} + template_args={"f": lambda x: x}, ) else: self._do_memory_test( u("hello ${f(u'śląsk')}"), u("hello śląsk"), - input_encoding='utf-8', - template_args={'f': lambda x:x} + input_encoding="utf-8", + template_args={"f": lambda x: x}, ) self._do_memory_test( u("## -*- coding: utf-8 -*-\nhello ${f(u'śląsk')}"), u("hello śląsk"), - template_args={'f': lambda x:x} + template_args={"f": lambda x: x}, ) def test_raw_strings(self): - """test that raw strings go straight thru with default_filters turned off, - bytestring_passthrough enabled. + """test that raw strings go straight thru with default_filters + turned off, bytestring_passthrough enabled. """ @@ -329,75 +479,101 @@ class EncodingTest(TemplateTest): u("## -*- coding: utf-8 -*-\nhello ${x}"), "hello śląsk", default_filters=[], - template_args={'x':'śląsk'}, + template_args={"x": "śląsk"}, unicode_=False, bytestring_passthrough=True, - output_encoding=None #'ascii' + output_encoding=None, # 'ascii' ) # now, the way you *should* be doing it.... self._do_memory_test( u("## -*- coding: utf-8 -*-\nhello ${x}"), u("hello śląsk"), - template_args={'x':u('śląsk')} + template_args={"x": u("śląsk")}, ) def test_encoding(self): self._do_memory_test( - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »"""), - u("""Alors vous imaginez ma surprise, au lever du jour, quand une drôle de petite voix m’a réveillé. Elle disait: « S’il vous plaît… dessine-moi un mouton! »""").encode('utf-8'), - output_encoding='utf-8', - unicode_=False + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ), + u( + "Alors vous imaginez ma surprise, au lever du jour, quand " + "une drôle de petite voix m’a réveillé. Elle disait: " + "« S’il vous plaît… dessine-moi un mouton! »" + ).encode("utf-8"), + output_encoding="utf-8", + unicode_=False, ) def test_encoding_errors(self): self._do_memory_test( - u("""KGB (transliteration of "КГБ") is the Russian-language abbreviation for Committee for State Security, (Russian: Комит́ет Госуд́арственной Безоп́асности (help·info); Komitet Gosudarstvennoy Bezopasnosti)"""), - u("""KGB (transliteration of "КГБ") is the Russian-language abbreviation for Committee for State Security, (Russian: Комит́ет Госуд́арственной Безоп́асности (help·info); Komitet Gosudarstvennoy Bezopasnosti)""").encode('iso-8859-1', 'replace'), - output_encoding='iso-8859-1', encoding_errors='replace', - unicode_=False + u( + """KGB (transliteration of "КГБ") is the Russian-language """ + """abbreviation for Committee for State Security, """ + """(Russian: Комит́ет Госуд́арственной Безоп́асности """ + """(help·info); Komitet Gosudarstvennoy Bezopasnosti)""" + ), + u( + """KGB (transliteration of "КГБ") is the Russian-language """ + """abbreviation for Committee for State Security, """ + """(Russian: Комит́ет Госуд́арственной Безоп́асности """ + """(help·info); Komitet Gosudarstvennoy Bezopasnosti)""" + ).encode("iso-8859-1", "replace"), + output_encoding="iso-8859-1", + encoding_errors="replace", + unicode_=False, ) def test_read_unicode(self): - lookup = TemplateLookup(directories=[template_base], - filesystem_checks=True, output_encoding='utf-8') + lookup = TemplateLookup( + directories=[template_base], + filesystem_checks=True, + output_encoding="utf-8", + ) if compat.py3k: - template = lookup.get_template('/read_unicode_py3k.html') + template = lookup.get_template("/read_unicode_py3k.html") else: - template = lookup.get_template('/read_unicode.html') + template = lookup.get_template("/read_unicode.html") # TODO: I've no idea what encoding this file is, Python 3.1.2 # won't read the file even with open(...encoding='utf-8') unless # errors is specified. or if there's some quirk in 3.1.2 # since I'm pretty sure this test worked with py3k when I wrote it. - data = template.render(path=self._file_path('internationalization.html')) + template.render( + path=self._file_path("internationalization.html") + ) @requires_python_2 def test_bytestring_passthru(self): self._do_file_test( - 'chs_utf8.html', - '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.', + "chs_utf8.html", + "毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.", default_filters=[], disable_unicode=True, output_encoding=None, - template_args={'name':'毛泽东'}, + template_args={"name": "毛泽东"}, filters=flatten_result, - unicode_=False + unicode_=False, ) self._do_file_test( - 'chs_utf8.html', - '毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.', + "chs_utf8.html", + "毛泽东 是 新中国的主席<br/> Welcome 你 to 北京. Welcome 你 to 北京.", disable_unicode=True, output_encoding=None, - template_args={'name':'毛泽东'}, + template_args={"name": "毛泽东"}, filters=flatten_result, - unicode_=False + unicode_=False, ) - template = self._file_template('chs_utf8.html', - output_encoding=None, - disable_unicode=True) - self.assertRaises(UnicodeDecodeError, template.render_unicode, name='毛泽东') + template = self._file_template( + "chs_utf8.html", output_encoding=None, disable_unicode=True + ) + self.assertRaises( + UnicodeDecodeError, template.render_unicode, name="毛泽东" + ) template = Template( "${'Alors vous imaginez ma surprise, au lever" @@ -405,400 +581,531 @@ class EncodingTest(TemplateTest): "réveillé. Elle disait: « S’il vous plaît… " "dessine-moi un mouton! »'}", output_encoding=None, - disable_unicode=True, input_encoding='utf-8') - assert template.render() == "Alors vous imaginez ma surprise, "\ - "au lever du jour, quand une drôle de petite "\ - "voix m’a réveillé. Elle disait: « S’il vous "\ - "plaît… dessine-moi un mouton! »" + disable_unicode=True, + input_encoding="utf-8", + ) + assert ( + template.render() == "Alors vous imaginez ma surprise, " + "au lever du jour, quand une drôle de petite " + "voix m’a réveillé. Elle disait: « S’il vous " + "plaît… dessine-moi un mouton! »" + ) template = Template( - "${'Alors vous imaginez ma surprise, au " - "lever du jour, quand une drôle de petite " - "voix m’a réveillé. Elle disait: « S’il " - "vous plaît… dessine-moi un mouton! »'}", - input_encoding='utf8', output_encoding='utf8', - disable_unicode=False, default_filters=[]) - # raises because expression contains an encoded bytestring which cannot be decoded + "${'Alors vous imaginez ma surprise, au " + "lever du jour, quand une drôle de petite " + "voix m’a réveillé. Elle disait: « S’il " + "vous plaît… dessine-moi un mouton! »'}", + input_encoding="utf8", + output_encoding="utf8", + disable_unicode=False, + default_filters=[], + ) + # raises because expression contains an encoded bytestring which cannot + # be decoded self.assertRaises(UnicodeDecodeError, template.render) class PageArgsTest(TemplateTest): def test_basic(self): - template = Template(""" + template = Template( + """ <%page args="x, y, z=7"/> this is page, ${x}, ${y}, ${z} -""") +""" + ) - assert flatten_result(template.render(x=5, y=10)) == "this is page, 5, 10, 7" - assert flatten_result(template.render(x=5, y=10, z=32)) == "this is page, 5, 10, 32" + assert ( + flatten_result(template.render(x=5, y=10)) + == "this is page, 5, 10, 7" + ) + assert ( + flatten_result(template.render(x=5, y=10, z=32)) + == "this is page, 5, 10, 32" + ) assert_raises(TypeError, template.render, y=10) def test_inherits(self): lookup = TemplateLookup() - lookup.put_string("base.tmpl", - """ + lookup.put_string( + "base.tmpl", + """ <%page args="bar" /> ${bar} ${pageargs['foo']} ${self.body(**pageargs)} - """ + """, ) - lookup.put_string("index.tmpl", """ + lookup.put_string( + "index.tmpl", + """ <%inherit file="base.tmpl" /> <%page args="variable" /> ${variable} - """) + """, + ) self._do_test( lookup.get_template("index.tmpl"), "bar foo var", filters=flatten_result, - template_args={'variable':'var', 'bar':'bar', 'foo':'foo'} - + template_args={"variable": "var", "bar": "bar", "foo": "foo"}, ) def test_includes(self): lookup = TemplateLookup() - lookup.put_string("incl1.tmpl", - """ + lookup.put_string( + "incl1.tmpl", + """ <%page args="bar" /> ${bar} ${pageargs['foo']} - """ + """, ) - lookup.put_string("incl2.tmpl", - """ + lookup.put_string( + "incl2.tmpl", + """ ${pageargs} - """ + """, ) - lookup.put_string("index.tmpl", """ + lookup.put_string( + "index.tmpl", + """ <%include file="incl1.tmpl" args="**pageargs"/> <%page args="variable" /> ${variable} <%include file="incl2.tmpl" /> - """) + """, + ) self._do_test( lookup.get_template("index.tmpl"), "bar foo var {}", filters=flatten_result, - template_args={'variable':'var', 'bar':'bar', 'foo':'foo'} - + template_args={"variable": "var", "bar": "bar", "foo": "foo"}, ) def test_context_small(self): ctx = runtime.Context([].append, x=5, y=4) - eq_(sorted(ctx.keys()), ['caller', 'capture', 'x', 'y']) + eq_(sorted(ctx.keys()), ["caller", "capture", "x", "y"]) def test_with_context(self): - template = Template(""" + template = Template( + """ <%page args="x, y, z=7"/> this is page, ${x}, ${y}, ${z}, ${w} -""") - #print template.code - assert flatten_result(template.render(x=5, y=10, w=17)) == "this is page, 5, 10, 7, 17" +""" + ) + # print template.code + assert ( + flatten_result(template.render(x=5, y=10, w=17)) + == "this is page, 5, 10, 7, 17" + ) def test_overrides_builtins(self): - template = Template(""" + template = Template( + """ <%page args="id"/> this is page, id is ${id} - """) + """ + ) - assert flatten_result(template.render(id="im the id")) == "this is page, id is im the id" + assert ( + flatten_result(template.render(id="im the id")) + == "this is page, id is im the id" + ) def test_canuse_builtin_names(self): - template = Template(""" + template = Template( + """ exception: ${Exception} id: ${id} - """) - assert flatten_result(template.render(id='some id', Exception='some exception')) == "exception: some exception id: some id" + """ + ) + assert ( + flatten_result( + template.render(id="some id", Exception="some exception") + ) + == "exception: some exception id: some id" + ) def test_builtin_names_dont_clobber_defaults_in_includes(self): lookup = TemplateLookup() - lookup.put_string("test.mako", - """ + lookup.put_string( + "test.mako", + """ <%include file="test1.mako"/> - """) + """, + ) - lookup.put_string("test1.mako", """ + lookup.put_string( + "test1.mako", + """ <%page args="id='foo'"/> ${id} - """) + """, + ) for template in ("test.mako", "test1.mako"): - assert flatten_result(lookup.get_template(template).render()) == "foo" - assert flatten_result(lookup.get_template(template).render(id=5)) == "5" - assert flatten_result(lookup.get_template(template).render(id=id)) == "<built-in function id>" + assert ( + flatten_result(lookup.get_template(template).render()) == "foo" + ) + assert ( + flatten_result(lookup.get_template(template).render(id=5)) + == "5" + ) + assert ( + flatten_result(lookup.get_template(template).render(id=id)) + == "<built-in function id>" + ) def test_dict_locals(self): - template = Template(""" + template = Template( + """ <% dict = "this is dict" locals = "this is locals" %> dict: ${dict} locals: ${locals} - """) - assert flatten_result(template.render()) == "dict: this is dict locals: this is locals" + """ + ) + assert ( + flatten_result(template.render()) + == "dict: this is dict locals: this is locals" + ) + class IncludeTest(TemplateTest): def test_basic(self): lookup = TemplateLookup() - lookup.put_string("a", """ + lookup.put_string( + "a", + """ this is a <%include file="b" args="a=3,b=4,c=5"/> - """) - lookup.put_string("b", """ + """, + ) + lookup.put_string( + "b", + """ <%page args="a,b,c"/> this is b. ${a}, ${b}, ${c} - """) - assert flatten_result(lookup.get_template("a").render()) == "this is a this is b. 3, 4, 5" + """, + ) + assert ( + flatten_result(lookup.get_template("a").render()) + == "this is a this is b. 3, 4, 5" + ) def test_localargs(self): lookup = TemplateLookup() - lookup.put_string("a", """ + lookup.put_string( + "a", + """ this is a <%include file="b" args="a=a,b=b,c=5"/> - """) - lookup.put_string("b", """ + """, + ) + lookup.put_string( + "b", + """ <%page args="a,b,c"/> this is b. ${a}, ${b}, ${c} - """) - assert flatten_result(lookup.get_template("a").render(a=7,b=8)) == "this is a this is b. 7, 8, 5" + """, + ) + assert ( + flatten_result(lookup.get_template("a").render(a=7, b=8)) + == "this is a this is b. 7, 8, 5" + ) def test_viakwargs(self): lookup = TemplateLookup() - lookup.put_string("a", """ + lookup.put_string( + "a", + """ this is a <%include file="b" args="c=5, **context.kwargs"/> - """) - lookup.put_string("b", """ + """, + ) + lookup.put_string( + "b", + """ <%page args="a,b,c"/> this is b. ${a}, ${b}, ${c} - """) - #print lookup.get_template("a").code - assert flatten_result(lookup.get_template("a").render(a=7,b=8)) == "this is a this is b. 7, 8, 5" + """, + ) + # print lookup.get_template("a").code + assert ( + flatten_result(lookup.get_template("a").render(a=7, b=8)) + == "this is a this is b. 7, 8, 5" + ) def test_include_withargs(self): lookup = TemplateLookup() - lookup.put_string("a", """ + lookup.put_string( + "a", + """ this is a <%include file="${i}" args="c=5, **context.kwargs"/> - """) - lookup.put_string("b", """ + """, + ) + lookup.put_string( + "b", + """ <%page args="a,b,c"/> this is b. ${a}, ${b}, ${c} - """) - assert flatten_result(lookup.get_template("a").render(a=7,b=8,i='b')) == "this is a this is b. 7, 8, 5" + """, + ) + assert ( + flatten_result(lookup.get_template("a").render(a=7, b=8, i="b")) + == "this is a this is b. 7, 8, 5" + ) def test_within_ccall(self): lookup = TemplateLookup() lookup.put_string("a", """this is a""") - lookup.put_string("b", """ + lookup.put_string( + "b", + """ <%def name="bar()"> bar: ${caller.body()} <%include file="a"/> </%def> - """) - lookup.put_string("c", """ + """, + ) + lookup.put_string( + "c", + """ <%namespace name="b" file="b"/> <%b:bar> calling bar </%b:bar> - """) - assert flatten_result(lookup.get_template("c").render()) == "bar: calling bar this is a" + """, + ) + assert ( + flatten_result(lookup.get_template("c").render()) + == "bar: calling bar this is a" + ) def test_include_error_handler(self): def handle(context, error): - context.write('include error') + context.write("include error") return True lookup = TemplateLookup(include_error_handler=handle) - lookup.put_string("a", """ + lookup.put_string( + "a", + """ this is a. <%include file="b"/> - """) - lookup.put_string("b", """ + """, + ) + lookup.put_string( + "b", + """ this is b ${1/0} end. - """) - assert flatten_result(lookup.get_template("a").render()) == "this is a. this is b include error" + """, + ) + assert ( + flatten_result(lookup.get_template("a").render()) + == "this is a. this is b include error" + ) + class UndefinedVarsTest(TemplateTest): def test_undefined(self): - t = Template(""" + t = Template( + """ % if x is UNDEFINED: undefined % else: x: ${x} % endif - """) + """ + ) assert result_lines(t.render(x=12)) == ["x: 12"] assert result_lines(t.render(y=12)) == ["undefined"] def test_strict(self): - t = Template(""" + t = Template( + """ % if x is UNDEFINED: undefined % else: x: ${x} % endif - """, strict_undefined=True) + """, + strict_undefined=True, + ) - assert result_lines(t.render(x=12)) == ['x: 12'] + assert result_lines(t.render(x=12)) == ["x: 12"] - assert_raises( - NameError, - t.render, y=12 - ) + assert_raises(NameError, t.render, y=12) l = TemplateLookup(strict_undefined=True) l.put_string("a", "some template") - l.put_string("b", """ + l.put_string( + "b", + """ <%namespace name='a' file='a' import='*'/> % if x is UNDEFINED: undefined % else: x: ${x} % endif - """) + """, + ) - assert result_lines(t.render(x=12)) == ['x: 12'] + assert result_lines(t.render(x=12)) == ["x: 12"] - assert_raises( - NameError, - t.render, y=12 - ) + assert_raises(NameError, t.render, y=12) def test_expression_declared(self): - t = Template(""" + t = Template( + """ ${",".join([t for t in ("a", "b", "c")])} - """, strict_undefined=True) + """, + strict_undefined=True, + ) - eq_(result_lines(t.render()), ['a,b,c']) + eq_(result_lines(t.render()), ["a,b,c"]) - t = Template(""" + t = Template( + """ <%self:foo value="${[(val, n) for val, n in [(1, 2)]]}"/> <%def name="foo(value)"> ${value} </%def> - """, strict_undefined=True) + """, + strict_undefined=True, + ) - eq_(result_lines(t.render()), ['[(1, 2)]']) + eq_(result_lines(t.render()), ["[(1, 2)]"]) - t = Template(""" + t = Template( + """ <%call expr="foo(value=[(val, n) for val, n in [(1, 2)]])" /> <%def name="foo(value)"> ${value} </%def> - """, strict_undefined=True) + """, + strict_undefined=True, + ) - eq_(result_lines(t.render()), ['[(1, 2)]']) + eq_(result_lines(t.render()), ["[(1, 2)]"]) l = TemplateLookup(strict_undefined=True) l.put_string("i", "hi, ${pageargs['y']}") - l.put_string("t", """ + l.put_string( + "t", + """ <%include file="i" args="y=[x for x in range(3)]" /> - """) - eq_( - result_lines(l.get_template("t").render()), ['hi, [0, 1, 2]'] + """, ) + eq_(result_lines(l.get_template("t").render()), ["hi, [0, 1, 2]"]) - l.put_string('q', """ - <%namespace name="i" file="${(str([x for x in range(3)][2]) + 'i')[-1]}" /> + l.put_string( + "q", + """ + <%namespace name="i" file="${(str([x for x in range(3)][2]) + """ + """'i')[-1]}" /> ${i.body(y='x')} - """) - eq_( - result_lines(l.get_template("q").render()), ['hi, x'] + """, ) + eq_(result_lines(l.get_template("q").render()), ["hi, x"]) - t = Template(""" + t = Template( + """ <% y = lambda q: str(q) %> ${y('hi')} - """, strict_undefined=True) - eq_( - result_lines(t.render()), ["hi"] + """, + strict_undefined=True, ) + eq_(result_lines(t.render()), ["hi"]) def test_list_comprehensions_plus_undeclared_nonstrict(self): # traditional behavior. variable inside a list comprehension # is treated as an "undefined", so is pulled from the context. - t = Template(""" + t = Template( + """ t is: ${t} ${",".join([t for t in ("a", "b", "c")])} - """) - - eq_( - result_lines(t.render(t="T")), - ['t is: T', 'a,b,c'] + """ ) + eq_(result_lines(t.render(t="T")), ["t is: T", "a,b,c"]) + def test_traditional_assignment_plus_undeclared(self): - t = Template(""" + t = Template( + """ t is: ${t} <% t = 12 %> - """) - assert_raises( - UnboundLocalError, - t.render, t="T" + """ ) + assert_raises(UnboundLocalError, t.render, t="T") def test_list_comprehensions_plus_undeclared_strict(self): # with strict, a list comprehension now behaves # like the undeclared case above. - t = Template(""" + t = Template( + """ t is: ${t} ${",".join([t for t in ("a", "b", "c")])} - """, strict_undefined=True) - - eq_( - result_lines(t.render(t="T")), - ['t is: T', 'a,b,c'] + """, + strict_undefined=True, ) + eq_(result_lines(t.render(t="T")), ["t is: T", "a,b,c"]) + + class StopRenderingTest(TemplateTest): def test_return_in_template(self): - t = Template(""" + t = Template( + """ Line one <% return STOP_RENDERING %> Line Three - """, strict_undefined=True) - - eq_( - result_lines(t.render()), - ['Line one'] + """, + strict_undefined=True, ) + eq_(result_lines(t.render()), ["Line one"]) + + class ReservedNameTest(TemplateTest): def test_names_on_context(self): - for name in ('context', 'loop', 'UNDEFINED', 'STOP_RENDERING'): + for name in ("context", "loop", "UNDEFINED", "STOP_RENDERING"): assert_raises_message( exceptions.NameConflictError, r"Reserved words passed to render\(\): %s" % name, - Template("x").render, **{name:'foo'} + Template("x").render, + **{name: "foo"} ) def test_names_in_template(self): - for name in ('context', 'loop', 'UNDEFINED', 'STOP_RENDERING'): + for name in ("context", "loop", "UNDEFINED", "STOP_RENDERING"): assert_raises_message( exceptions.NameConflictError, r"Reserved words declared in template: %s" % name, - Template, "<%% %s = 5 %%>" % name + Template, + "<%% %s = 5 %%>" % name, ) def test_exclude_loop_context(self): @@ -806,19 +1113,19 @@ class ReservedNameTest(TemplateTest): "loop is ${loop}", "loop is 5", template_args=dict(loop=5), - enable_loop=False + enable_loop=False, ) def test_exclude_loop_template(self): self._do_memory_test( - "<% loop = 12 %>loop is ${loop}", - "loop is 12", - enable_loop=False + "<% loop = 12 %>loop is ${loop}", "loop is 12", enable_loop=False ) + class ControlTest(TemplateTest): def test_control(self): - t = Template(""" + t = Template( + """ ## this is a template. % for x in y: % if 'test' in x: @@ -827,12 +1134,17 @@ class ControlTest(TemplateTest): no x does not have test %endif %endfor -""") - assert result_lines(t.render(y=[{'test':'one'}, {'foo':'bar'}, {'foo':'bar', 'test':'two'}])) == [ - "yes x has test", - "no x does not have test", - "yes x has test" - ] +""" + ) + assert result_lines( + t.render( + y=[ + {"test": "one"}, + {"foo": "bar"}, + {"foo": "bar", "test": "two"}, + ] + ) + ) == ["yes x has test", "no x does not have test", "yes x has test"] def test_blank_control_1(self): self._do_memory_test( @@ -841,7 +1153,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_blank_control_2(self): @@ -852,7 +1164,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_blank_control_3(self): @@ -863,7 +1175,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_blank_control_4(self): @@ -875,7 +1187,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_blank_control_5(self): @@ -885,7 +1197,7 @@ class ControlTest(TemplateTest): % endfor """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_blank_control_6(self): @@ -895,7 +1207,7 @@ class ControlTest(TemplateTest): % endwhile """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_blank_control_7(self): @@ -906,7 +1218,7 @@ class ControlTest(TemplateTest): % endtry """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_blank_control_8(self): @@ -917,7 +1229,7 @@ class ControlTest(TemplateTest): """, "", filters=lambda s: s.strip(), - template_args={"ctx": ctx} + template_args={"ctx": ctx}, ) def test_commented_blank_control_1(self): @@ -928,7 +1240,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_commented_blank_control_2(self): @@ -941,7 +1253,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_commented_blank_control_3(self): @@ -954,7 +1266,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_commented_blank_control_4(self): @@ -969,7 +1281,7 @@ class ControlTest(TemplateTest): % endif """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_commented_blank_control_5(self): @@ -980,7 +1292,7 @@ class ControlTest(TemplateTest): % endfor """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_commented_blank_control_6(self): @@ -991,7 +1303,7 @@ class ControlTest(TemplateTest): % endwhile """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_commented_blank_control_7(self): @@ -1004,7 +1316,7 @@ class ControlTest(TemplateTest): % endtry """, "", - filters=lambda s:s.strip() + filters=lambda s: s.strip(), ) def test_commented_blank_control_8(self): @@ -1016,19 +1328,22 @@ class ControlTest(TemplateTest): """, "", filters=lambda s: s.strip(), - template_args={"ctx": ctx} + template_args={"ctx": ctx}, ) def test_multiline_control(self): - t = Template(""" + t = Template( + """ % for x in \\ [y for y in [1,2,3]]: ${x} % endfor -""") - #print t.code +""" + ) + # print t.code assert flatten_result(t.render()) == "1 2 3" + class GlobalsTest(TemplateTest): def test_globals(self): self._do_memory_test( @@ -1039,33 +1354,39 @@ class GlobalsTest(TemplateTest): y is ${y} """, "y is hi", - filters=lambda t:t.strip() + filters=lambda t: t.strip(), ) -class RichTracebackTest(TemplateTest): +class RichTracebackTest(TemplateTest): def _do_test_traceback(self, utf8, memory, syntax): if memory: if syntax: - source = u('## coding: utf-8\n<% print "m’a réveillé. '\ - 'Elle disait: « S’il vous plaît… dessine-moi un mouton! » %>') + source = u( + '## coding: utf-8\n<% print "m’a réveillé. ' + "Elle disait: « S’il vous plaît… dessine-moi " + "un mouton! » %>" + ) else: - source = u('## coding: utf-8\n<% print u"m’a réveillé. '\ - 'Elle disait: « S’il vous plaît… dessine-moi un mouton! »" + str(5/0) %>') + source = u( + '## coding: utf-8\n<% print u"m’a réveillé. ' + "Elle disait: « S’il vous plaît… dessine-moi un " + 'mouton! »" + str(5/0) %>' + ) if utf8: - source = source.encode('utf-8') + source = source.encode("utf-8") else: source = source - templateargs = {'text': source} + templateargs = {"text": source} else: if syntax: - filename = 'unicode_syntax_error.html' + filename = "unicode_syntax_error.html" else: - filename = 'unicode_runtime_error.html' - source = util.read_file(self._file_path(filename), 'rb') + filename = "unicode_runtime_error.html" + source = util.read_file(self._file_path(filename), "rb") if not utf8: - source = source.decode('utf-8') - templateargs = {'filename': self._file_path(filename)} + source = source.decode("utf-8") + templateargs = {"filename": self._file_path(filename)} try: template = Template(**templateargs) if not syntax: @@ -1074,101 +1395,119 @@ class RichTracebackTest(TemplateTest): except Exception: tback = exceptions.RichTraceback() if utf8: - assert tback.source == source.decode('utf-8') + assert tback.source == source.decode("utf-8") else: assert tback.source == source + for utf8 in (True, False): for memory in (True, False): for syntax in (True, False): + def _do_test(self): self._do_test_traceback(utf8, memory, syntax) - name = 'test_%s_%s_%s' % (utf8 and 'utf8' or 'unicode', - memory and 'memory' or 'file', - syntax and 'syntax' or 'runtime') + + name = "test_%s_%s_%s" % ( + utf8 and "utf8" or "unicode", + memory and "memory" or "file", + syntax and "syntax" or "runtime", + ) _do_test.__name__ = name setattr(RichTracebackTest, name, _do_test) del _do_test + class ModuleDirTest(TemplateTest): def tearDown(self): import shutil + shutil.rmtree(module_base, True) def test_basic(self): t = self._file_template("modtest.html") - t2 = self._file_template('subdir/modtest.html') + t2 = self._file_template("subdir/modtest.html") - eq_( - t.module.__file__, - os.path.join(module_base, 'modtest.html.py') - ) + eq_(t.module.__file__, os.path.join(module_base, "modtest.html.py")) eq_( t2.module.__file__, - os.path.join(module_base, 'subdir', 'modtest.html.py') + os.path.join(module_base, "subdir", "modtest.html.py"), ) def test_callable(self): def get_modname(filename, uri): return os.path.join( - module_base, - os.path.dirname(uri)[1:], - 'foo', - os.path.basename(filename) + ".py") + module_base, + os.path.dirname(uri)[1:], + "foo", + os.path.basename(filename) + ".py", + ) lookup = TemplateLookup(template_base, modulename_callable=get_modname) - t = lookup.get_template('/modtest.html') - t2 = lookup.get_template('/subdir/modtest.html') + t = lookup.get_template("/modtest.html") + t2 = lookup.get_template("/subdir/modtest.html") eq_( t.module.__file__, - os.path.join(module_base, 'foo', 'modtest.html.py') + os.path.join(module_base, "foo", "modtest.html.py"), ) eq_( t2.module.__file__, - os.path.join(module_base, 'subdir', 'foo', 'modtest.html.py') + os.path.join(module_base, "subdir", "foo", "modtest.html.py"), ) def test_custom_writer(self): canary = [] + def write_module(source, outputpath): - f = open(outputpath, 'wb') + f = open(outputpath, "wb") canary.append(outputpath) f.write(source) f.close() - lookup = TemplateLookup(template_base, module_writer=write_module, - module_directory=module_base) - t = lookup.get_template('/modtest.html') - t2 = lookup.get_template('/subdir/modtest.html') + + lookup = TemplateLookup( + template_base, + module_writer=write_module, + module_directory=module_base, + ) + lookup.get_template("/modtest.html") + lookup.get_template("/subdir/modtest.html") eq_( canary, - [os.path.join(module_base, "modtest.html.py"), - os.path.join(module_base, "subdir", "modtest.html.py")] + [ + os.path.join(module_base, "modtest.html.py"), + os.path.join(module_base, "subdir", "modtest.html.py"), + ], ) + class FilenameToURITest(TemplateTest): def test_windows_paths(self): - """test that windows filenames are handled appropriately by Template.""" + """test that windows filenames are handled appropriately by + Template.""" current_path = os.path import ntpath + os.path = ntpath try: + class NoCompileTemplate(Template): def _compile_from_file(self, path, filename): self.path = path return Template("foo bar").module t1 = NoCompileTemplate( - filename="c:\\foo\\template.html", - module_directory="c:\\modules\\") + filename="c:\\foo\\template.html", + module_directory="c:\\modules\\", + ) eq_(t1.uri, "/foo/template.html") eq_(t1.path, "c:\\modules\\foo\\template.html.py") t1 = NoCompileTemplate( - filename="c:\\path\\to\\templates\\template.html", - uri = "/bar/template.html", - module_directory="c:\\modules\\") + filename="c:\\path\\to\\templates\\template.html", + uri="/bar/template.html", + module_directory="c:\\modules\\", + ) eq_(t1.uri, "/bar/template.html") eq_(t1.path, "c:\\modules\\bar\\template.html.py") @@ -1181,24 +1520,31 @@ class FilenameToURITest(TemplateTest): current_path = os.path import posixpath + os.path = posixpath try: + class NoCompileTemplate(Template): def _compile_from_file(self, path, filename): self.path = path return Template("foo bar").module t1 = NoCompileTemplate( - filename="/var/www/htdocs/includes/template.html", - module_directory="/var/lib/modules") + filename="/var/www/htdocs/includes/template.html", + module_directory="/var/lib/modules", + ) eq_(t1.uri, "/var/www/htdocs/includes/template.html") - eq_(t1.path, "/var/lib/modules/var/www/htdocs/includes/template.html.py") + eq_( + t1.path, + "/var/lib/modules/var/www/htdocs/includes/template.html.py", + ) t1 = NoCompileTemplate( - filename="/var/www/htdocs/includes/template.html", - uri = "/bar/template.html", - module_directory="/var/lib/modules") + filename="/var/www/htdocs/includes/template.html", + uri="/bar/template.html", + module_directory="/var/lib/modules", + ) eq_(t1.uri, "/bar/template.html") eq_(t1.path, "/var/lib/modules/bar/template.html.py") @@ -1209,16 +1555,20 @@ class FilenameToURITest(TemplateTest): def test_dont_accept_relative_outside_of_root(self): assert_raises_message( exceptions.TemplateLookupException, - "Template uri \"../../foo.html\" is invalid - it " + 'Template uri "../../foo.html" is invalid - it ' "cannot be relative outside of the root path", - Template, "test", uri="../../foo.html", + Template, + "test", + uri="../../foo.html", ) assert_raises_message( exceptions.TemplateLookupException, - "Template uri \"/../../foo.html\" is invalid - it " + 'Template uri "/../../foo.html" is invalid - it ' "cannot be relative outside of the root path", - Template, "test", uri="/../../foo.html", + Template, + "test", + uri="/../../foo.html", ) # normalizes in the root is OK @@ -1230,24 +1580,35 @@ class ModuleTemplateTest(TemplateTest): def test_module_roundtrip(self): lookup = TemplateLookup() - template = Template(""" + template = Template( + """ <%inherit file="base.html"/> % for x in range(5): ${x} % endfor -""", lookup=lookup) +""", + lookup=lookup, + ) - base = Template(""" + base = Template( + """ This is base. ${self.body()} -""", lookup=lookup) +""", + lookup=lookup, + ) lookup.put_template("base.html", base) lookup.put_template("template.html", template) assert result_lines(template.render()) == [ - "This is base.", "0", "1", "2", "3", "4" + "This is base.", + "0", + "1", + "2", + "3", + "4", ] lookup = TemplateLookup() @@ -1258,12 +1619,19 @@ class ModuleTemplateTest(TemplateTest): lookup.put_template("template.html", template) assert result_lines(template.render()) == [ - "This is base.", "0", "1", "2", "3", "4" + "This is base.", + "0", + "1", + "2", + "3", + "4", ] + class TestTemplateAPI(unittest.TestCase): def test_metadata(self): - t = Template(""" + t = Template( + """ Text Text % if bar: @@ -1272,24 +1640,69 @@ Text <%include file='bar'/> -""", uri="/some/template") +""", + uri="/some/template", + ) eq_( ModuleInfo.get_module_source_metadata(t.code, full_line_map=True), { - 'full_line_map': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 4, 5, 5, 5, 7, - 8, 8, 8, 8, 8, 8, 8], - 'source_encoding': 'ascii', - 'filename': None, - 'line_map': {35: 29, 15: 0, 22: 1, 23: 4, 24: 5, 25: 5, - 26: 5, 27: 7, 28: 8, 29: 8}, - 'uri': '/some/template' - } - + "full_line_map": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 5, + 5, + 5, + 7, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + ], + "source_encoding": "ascii", + "filename": None, + "line_map": { + 35: 29, + 15: 0, + 22: 1, + 23: 4, + 24: 5, + 25: 5, + 26: 5, + 27: 7, + 28: 8, + 29: 8, + }, + "uri": "/some/template", + }, ) def test_metadata_two(self): - t = Template(""" + t = Template( + """ Text Text % if bar: @@ -1301,26 +1714,89 @@ Text </%block> -""", uri="/some/template") +""", + uri="/some/template", + ) eq_( ModuleInfo.get_module_source_metadata(t.code, full_line_map=True), { - 'full_line_map': [ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 4, 5, 5, 5, 7, 7, - 7, 7, 7, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8], - 'source_encoding': 'ascii', - 'filename': None, - 'line_map': {34: 10, 40: 8, 46: 8, 15: 0, 52: 46, - 24: 1, 25: 4, 26: 5, 27: 5, 28: 5, 29: 7}, - 'uri': '/some/template'} + "full_line_map": [ + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 4, + 5, + 5, + 5, + 7, + 7, + 7, + 7, + 7, + 10, + 10, + 10, + 10, + 10, + 10, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + ], + "source_encoding": "ascii", + "filename": None, + "line_map": { + 34: 10, + 40: 8, + 46: 8, + 15: 0, + 52: 46, + 24: 1, + 25: 4, + 26: 5, + 27: 5, + 28: 5, + 29: 7, + }, + "uri": "/some/template", + }, ) class PreprocessTest(TemplateTest): def test_old_comments(self): - t = Template(""" + t = Template( + """ im a template # old style comment # more old style comment @@ -1328,32 +1804,43 @@ class PreprocessTest(TemplateTest): ## new style comment - # not a comment - ## not a comment -""", preprocessor=convert_comments) +""", + preprocessor=convert_comments, + ) + + assert ( + flatten_result(t.render()) + == "im a template - # not a comment - ## not a comment" + ) - assert flatten_result(t.render()) == "im a template - # not a comment - ## not a comment" class LexerTest(TemplateTest): def _fixture(self): from mako.parsetree import TemplateNode, Text + class MyLexer(object): - encoding = 'ascii' + encoding = "ascii" + def __init__(self, *arg, **kw): pass def parse(self): t = TemplateNode("foo") t.nodes.append( - Text("hello world", source="foo", lineno=0, - pos=0, filename=None) + Text( + "hello world", + source="foo", + lineno=0, + pos=0, + filename=None, + ) ) return t + return MyLexer def _test_custom_lexer(self, template): - eq_( - result_lines(template.render()), - ["hello world"] - ) + eq_(result_lines(template.render()), ["hello world"]) def test_via_template(self): t = Template("foo", lexer_cls=self._fixture()) @@ -1365,8 +1852,8 @@ class LexerTest(TemplateTest): t = tl.get_template("foo") self._test_custom_lexer(t) -class FuturesTest(TemplateTest): +class FuturesTest(TemplateTest): def test_future_import(self): t = Template("${ x / y }", future_imports=["division"]) assert result_lines(t.render(x=12, y=5)) == ["2.4"] |