1 # -*- coding: utf-8 -*-
3 unit test for the lexer
4 ~~~~~~~~~~~~~~~~~~~~~~~
6 :copyright: (c) 2009 by the Jinja Team.
7 :license: BSD, see LICENSE for more details.
9 from jinja2 import Environment
14 RAW = '{% raw %}foo{% endraw %}|{%raw%}{{ bar }}|{% baz %}{% endraw %}'
15 BALANCING = '''{% for item in seq %}${{'foo': item}|upper}{% endfor %}'''
18 <!--- for item in seq -->
22 BYTEFALLBACK = u'''{{ 'foo'|pprint }}|{{ 'bär'|pprint }}'''
26 tmpl = env.from_string(RAW)
27 assert tmpl.render() == 'foo|{{ bar }}|{% baz %}'
31 from jinja2 import Environment
32 env = Environment('{%', '%}', '${', '}')
33 tmpl = env.from_string(BALANCING)
34 assert tmpl.render(seq=range(3)) == "{'FOO': 0}{'FOO': 1}{'FOO': 2}"
38 from jinja2 import Environment
39 env = Environment('<!--', '-->', '{', '}')
40 tmpl = env.from_string(COMMENTS)
41 assert tmpl.render(seq=range(3)) == ("<ul>\n <li>0</li>\n "
42 "<li>1</li>\n <li>2</li>\n</ul>")
45 def test_string_escapes():
46 for char in u'\0', u'\u2668', u'\xe4', u'\t', u'\r', u'\n':
47 tmpl = env.from_string('{{ %s }}' % repr(char)[1:])
48 assert tmpl.render() == char
49 assert env.from_string('{{ "\N{HOT SPRINGS}" }}').render() == u'\u2668'
52 def test_bytefallback():
53 tmpl = env.from_string(BYTEFALLBACK)
54 assert tmpl.render() == u"'foo'|u'b\\xe4r'"
58 from jinja2.lexer import operators
59 for test, expect in operators.iteritems():
62 stream = env.lexer.tokenize('{{ %s }}' % test)
64 assert stream.current.type == expect
67 def test_normalizing():
68 from jinja2 import Environment
69 for seq in '\r', '\r\n', '\n':
70 env = Environment(newline_sequence=seq)
71 tmpl = env.from_string('1\n2\r\n3\n4\n')
72 result = tmpl.render()
73 assert result.replace(seq, 'X') == '1X2X3X4'