| 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 | |
| 10 | BALANCING = '''{% for item in seq %}${{'foo': item}|upper}{% endfor %}''' |
| 11 | COMMENTS = '''\ |
| 12 | <ul> |
| 13 | <!--- for item in seq --> |
| 14 | <li>{item}</li> |
| 15 | <!--- endfor --> |
| 16 | </ul>''' |
| Armin Ronacher | 1cc232c | 2007-09-07 17:52:41 +0200 | [diff] [blame] | 17 | BYTEFALLBACK = u'''{{ 'foo'|pprint }}|{{ 'bär'|pprint }}''' |
| Armin Ronacher | 2158091 | 2007-04-17 17:13:10 +0200 | [diff] [blame] | 18 | |
| 19 | |
| 20 | def 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 | |
| 27 | def 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 Ronacher | 1cc232c | 2007-09-07 17:52:41 +0200 | [diff] [blame] | 33 | |
| 34 | |
| 35 | def 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 | |
| 42 | def test_bytefallback(env): |
| 43 | tmpl = env.from_string(BYTEFALLBACK) |
| 44 | assert tmpl.render() == u"'foo'|u'b\\xe4r'" |
| 45 | |
| 46 | |
| 47 | def 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 |