blob: cc85b198e4e199a09756019fbd3d6f84a011762e [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
10BALANCING = '''{% for item in seq %}${{'foo': item}|upper}{% endfor %}'''
11COMMENTS = '''\
12<ul>
13<!--- for item in seq -->
14 <li>{item}</li>
15<!--- endfor -->
16</ul>'''
Armin Ronacher1cc232c2007-09-07 17:52:41 +020017BYTEFALLBACK = u'''{{ 'foo'|pprint }}|{{ 'bär'|pprint }}'''
Armin Ronacher21580912007-04-17 17:13:10 +020018
19
20def test_balancing():
21 from jinja import Environment
22 env = Environment('{%', '%}', '${', '}')
23 tmpl = env.from_string(BALANCING)
24 assert tmpl.render(seq=range(3)) == "{'FOO': 0}{'FOO': 1}{'FOO': 2}"
25
26
27def test_comments():
28 from jinja import Environment
29 env = Environment('<!--', '-->', '{', '}')
30 tmpl = env.from_string(COMMENTS)
31 assert tmpl.render(seq=range(3)) == ("<ul>\n <li>0</li>\n "
32 "<li>1</li>\n <li>2</li>\n</ul>")
Armin Ronacher1cc232c2007-09-07 17:52:41 +020033
34
35def test_string_escapes(env):
36 for char in u'\0', u'\u2668', u'\xe4', u'\t', u'\r', u'\n':
37 tmpl = env.from_string('{{ %s }}' % repr(char)[1:])
38 assert tmpl.render() == char
39 assert env.from_string('{{ "\N{HOT SPRINGS}" }}').render() == u'\u2668'
40
41
42def test_bytefallback(env):
43 tmpl = env.from_string(BYTEFALLBACK)
44 assert tmpl.render() == u"'foo'|u'b\\xe4r'"
45
46
47def test_operators(env):
48 from jinja.lexer import operators
49 for test, expect in operators.iteritems():
50 if test in '([{}])':
51 continue
52 stream = env.lexer.tokenize('{{ %s }}' % test)
53 stream.next()
54 assert stream.current.type == expect