| # -*- coding: utf-8 -*- |
| """ |
| unit test for the lexer |
| ~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| :copyright: 2007 by Armin Ronacher. |
| :license: BSD, see LICENSE for more details. |
| """ |
| |
| RAW = '{% raw %}foo{% endraw %}|{%raw%}{{ bar }}|{% baz %}{% endraw %}' |
| BALANCING = '''{% for item in seq %}${{'foo': item}|upper}{% endfor %}''' |
| COMMENTS = '''\ |
| <ul> |
| <!--- for item in seq --> |
| <li>{item}</li> |
| <!--- endfor --> |
| </ul>''' |
| BYTEFALLBACK = u'''{{ 'foo'|pprint }}|{{ 'bär'|pprint }}''' |
| |
| |
| def test_raw(env): |
| tmpl = env.from_string(RAW) |
| assert tmpl.render() == 'foo|{{ bar }}|{% baz %}' |
| |
| |
| def test_balancing(): |
| from jinja import Environment |
| env = Environment('{%', '%}', '${', '}') |
| tmpl = env.from_string(BALANCING) |
| assert tmpl.render(seq=range(3)) == "{'FOO': 0}{'FOO': 1}{'FOO': 2}" |
| |
| |
| def test_comments(): |
| from jinja import Environment |
| env = Environment('<!--', '-->', '{', '}') |
| tmpl = env.from_string(COMMENTS) |
| assert tmpl.render(seq=range(3)) == ("<ul>\n <li>0</li>\n " |
| "<li>1</li>\n <li>2</li>\n</ul>") |
| |
| |
| def test_string_escapes(env): |
| for char in u'\0', u'\u2668', u'\xe4', u'\t', u'\r', u'\n': |
| tmpl = env.from_string('{{ %s }}' % repr(char)[1:]) |
| assert tmpl.render() == char |
| assert env.from_string('{{ "\N{HOT SPRINGS}" }}').render() == u'\u2668' |
| |
| |
| def test_bytefallback(env): |
| tmpl = env.from_string(BYTEFALLBACK) |
| assert tmpl.render() == u"'foo'|u'b\\xe4r'" |
| |
| |
| def test_operators(env): |
| from jinja.lexer import operators |
| for test, expect in operators.iteritems(): |
| if test in '([{}])': |
| continue |
| stream = env.lexer.tokenize('{{ %s }}' % test) |
| stream.next() |
| assert stream.current.type == expect |