blob: a6717e959ed5663ea785d90e0074a58a789a9c24 [file] [log] [blame]
Armin Ronacher21580912007-04-17 17:13:10 +02001# -*- coding: utf-8 -*-
2"""
3 unit test for the lexer
4 ~~~~~~~~~~~~~~~~~~~~~~~
5
6 :copyright: 2007 by Armin Ronacher.
7 :license: BSD, see LICENSE for more details.
8"""
9
Armin Ronacher523bf4c2007-11-17 23:45:04 +010010RAW = '{% raw %}foo{% endraw %}|{%raw%}{{ bar }}|{% baz %}{% endraw %}'
Armin Ronacher21580912007-04-17 17:13:10 +020011BALANCING = '''{% for item in seq %}${{'foo': item}|upper}{% endfor %}'''
12COMMENTS = '''\
13<ul>
14<!--- for item in seq -->
15 <li>{item}</li>
16<!--- endfor -->
17</ul>'''
Armin Ronacher1cc232c2007-09-07 17:52:41 +020018BYTEFALLBACK = u'''{{ 'foo'|pprint }}|{{ 'bär'|pprint }}'''
Armin Ronacher21580912007-04-17 17:13:10 +020019
20
Armin Ronacher523bf4c2007-11-17 23:45:04 +010021def test_raw(env):
22 tmpl = env.from_string(RAW)
23 assert tmpl.render() == 'foo|{{ bar }}|{% baz %}'
24
25
Armin Ronacher21580912007-04-17 17:13:10 +020026def test_balancing():
Christoph Hacke9e43bb2008-04-13 23:35:48 +020027 from jinja2 import Environment
Armin Ronacher21580912007-04-17 17:13:10 +020028 env = Environment('{%', '%}', '${', '}')
29 tmpl = env.from_string(BALANCING)
30 assert tmpl.render(seq=range(3)) == "{'FOO': 0}{'FOO': 1}{'FOO': 2}"
31
32
33def test_comments():
Christoph Hacke9e43bb2008-04-13 23:35:48 +020034 from jinja2 import Environment
Armin Ronacher21580912007-04-17 17:13:10 +020035 env = Environment('<!--', '-->', '{', '}')
36 tmpl = env.from_string(COMMENTS)
37 assert tmpl.render(seq=range(3)) == ("<ul>\n <li>0</li>\n "
38 "<li>1</li>\n <li>2</li>\n</ul>")
Armin Ronacher1cc232c2007-09-07 17:52:41 +020039
40
41def test_string_escapes(env):
42 for char in u'\0', u'\u2668', u'\xe4', u'\t', u'\r', u'\n':
43 tmpl = env.from_string('{{ %s }}' % repr(char)[1:])
44 assert tmpl.render() == char
45 assert env.from_string('{{ "\N{HOT SPRINGS}" }}').render() == u'\u2668'
46
47
48def test_bytefallback(env):
49 tmpl = env.from_string(BYTEFALLBACK)
50 assert tmpl.render() == u"'foo'|u'b\\xe4r'"
51
52
53def test_operators(env):
Christoph Hacke9e43bb2008-04-13 23:35:48 +020054 from jinja2.lexer import operators
Armin Ronacher1cc232c2007-09-07 17:52:41 +020055 for test, expect in operators.iteritems():
56 if test in '([{}])':
57 continue
58 stream = env.lexer.tokenize('{{ %s }}' % test)
59 stream.next()
60 assert stream.current.type == expect