Armin Ronacher | 2158091 | 2007-04-17 17:13:10 +0200 | [diff] [blame] | 1 | # -*- 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 Ronacher | 523bf4c | 2007-11-17 23:45:04 +0100 | [diff] [blame] | 10 | RAW = '{% raw %}foo{% endraw %}|{%raw%}{{ bar }}|{% baz %}{% endraw %}' |
Armin Ronacher | 2158091 | 2007-04-17 17:13:10 +0200 | [diff] [blame] | 11 | BALANCING = '''{% for item in seq %}${{'foo': item}|upper}{% endfor %}''' |
| 12 | COMMENTS = '''\ |
| 13 | <ul> |
| 14 | <!--- for item in seq --> |
| 15 | <li>{item}</li> |
| 16 | <!--- endfor --> |
| 17 | </ul>''' |
Armin Ronacher | 1cc232c | 2007-09-07 17:52:41 +0200 | [diff] [blame] | 18 | BYTEFALLBACK = u'''{{ 'foo'|pprint }}|{{ 'bär'|pprint }}''' |
Armin Ronacher | 2158091 | 2007-04-17 17:13:10 +0200 | [diff] [blame] | 19 | |
| 20 | |
Armin Ronacher | 523bf4c | 2007-11-17 23:45:04 +0100 | [diff] [blame] | 21 | def test_raw(env): |
| 22 | tmpl = env.from_string(RAW) |
| 23 | assert tmpl.render() == 'foo|{{ bar }}|{% baz %}' |
| 24 | |
| 25 | |
Armin Ronacher | 2158091 | 2007-04-17 17:13:10 +0200 | [diff] [blame] | 26 | def test_balancing(): |
Christoph Hack | e9e43bb | 2008-04-13 23:35:48 +0200 | [diff] [blame] | 27 | from jinja2 import Environment |
Armin Ronacher | 2158091 | 2007-04-17 17:13:10 +0200 | [diff] [blame] | 28 | env = Environment('{%', '%}', '${', '}') |
| 29 | tmpl = env.from_string(BALANCING) |
| 30 | assert tmpl.render(seq=range(3)) == "{'FOO': 0}{'FOO': 1}{'FOO': 2}" |
| 31 | |
| 32 | |
| 33 | def test_comments(): |
Christoph Hack | e9e43bb | 2008-04-13 23:35:48 +0200 | [diff] [blame] | 34 | from jinja2 import Environment |
Armin Ronacher | 2158091 | 2007-04-17 17:13:10 +0200 | [diff] [blame] | 35 | 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 Ronacher | 1cc232c | 2007-09-07 17:52:41 +0200 | [diff] [blame] | 39 | |
| 40 | |
| 41 | def 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 | |
| 48 | def test_bytefallback(env): |
| 49 | tmpl = env.from_string(BYTEFALLBACK) |
| 50 | assert tmpl.render() == u"'foo'|u'b\\xe4r'" |
| 51 | |
| 52 | |
| 53 | def test_operators(env): |
Christoph Hack | e9e43bb | 2008-04-13 23:35:48 +0200 | [diff] [blame] | 54 | from jinja2.lexer import operators |
Armin Ronacher | 1cc232c | 2007-09-07 17:52:41 +0200 | [diff] [blame] | 55 | 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 |