blob: 640394ebe9f5588e433454162c4d215ed152ffd9 [file] [log] [blame]
Armin Ronacherccf284b2007-05-21 16:44:26 +02001# -*- coding: utf-8 -*-
2"""
3 unit test for the parser
4 ~~~~~~~~~~~~~~~~~~~~~~~~
5
Armin Ronacher62ccd1b2009-01-04 14:26:19 +01006 :copyright: (c) 2009 by the Jinja Team.
Armin Ronacherccf284b2007-05-21 16:44:26 +02007 :license: BSD, see LICENSE for more details.
8"""
Christoph Hacke9e43bb2008-04-13 23:35:48 +02009from jinja2 import Environment
Armin Ronacherccf284b2007-05-21 16:44:26 +020010
Armin Ronacherccf284b2007-05-21 16:44:26 +020011
12PHP_SYNTAX = '''\
13<!-- I'm a comment, I'm not interesting -->\
14<? for item in seq -?>
15 <?= item ?>
16<?- endfor ?>'''
17
18ERB_SYNTAX = '''\
19<%# I'm a comment, I'm not interesting %>\
20<% for item in seq -%>
21 <%= item %>
22<%- endfor %>'''
23
24COMMENT_SYNTAX = '''\
25<!--# I'm a comment, I'm not interesting -->\
26<!-- for item in seq --->
27 ${item}
28<!--- endfor -->'''
29
Armin Ronacher4f7d2d52008-04-22 10:40:26 +020030MAKO_SYNTAX = '''\
Armin Ronacher59b6bd52009-03-30 21:00:16 +020031<%# regular comment %>
Armin Ronacher4f7d2d52008-04-22 10:40:26 +020032% for item in seq:
33 ${item}
34% endfor'''
Armin Ronacherccf284b2007-05-21 16:44:26 +020035
Armin Ronacher59b6bd52009-03-30 21:00:16 +020036MAKO_SYNTAX_LINECOMMENTS = '''\
37<%# regular comment %>
38% for item in seq:
39 ${item} ## the rest of the stuff
40% endfor'''
41
Armin Ronacherecc051b2007-06-01 18:25:28 +020042BALANCING = '''{{{'foo':'bar'}.foo}}'''
43
Armin Ronacher9b0545a2007-09-26 13:16:41 +020044STARTCOMMENT = '''{# foo comment
45and bar comment #}
46{% macro blub() %}foo{% endmacro %}
47{{ blub() }}'''
48
Armin Ronacher59b6bd52009-03-30 21:00:16 +020049LINE_SYNTAX_PRIORITY = '''\
50/* ignore me.
51 I'm a multiline comment */
52# for item in seq:
53* ${item} ## this is just extra stuff
54# endfor
55'''
56
Armin Ronacherccf284b2007-05-21 16:44:26 +020057
Armin Ronacherccf284b2007-05-21 16:44:26 +020058def test_php_syntax():
59 env = Environment('<?', '?>', '<?=', '?>', '<!--', '-->')
60 tmpl = env.from_string(PHP_SYNTAX)
61 assert tmpl.render(seq=range(5)) == '01234'
62
63
64def test_erb_syntax():
65 env = Environment('<%', '%>', '<%=', '%>', '<%#', '%>')
66 tmpl = env.from_string(ERB_SYNTAX)
67 assert tmpl.render(seq=range(5)) == '01234'
68
69
70def test_comment_syntax():
71 env = Environment('<!--', '-->', '${', '}', '<!--#', '-->')
72 tmpl = env.from_string(COMMENT_SYNTAX)
73 assert tmpl.render(seq=range(5)) == '01234'
74
75
Armin Ronacherecc051b2007-06-01 18:25:28 +020076def test_balancing(env):
77 tmpl = env.from_string(BALANCING)
78 assert tmpl.render() == 'bar'
Armin Ronacher9b0545a2007-09-26 13:16:41 +020079
80
81def test_start_comment(env):
82 tmpl = env.from_string(STARTCOMMENT)
83 assert tmpl.render().strip() == 'foo'
Armin Ronacher4f7d2d52008-04-22 10:40:26 +020084
85
86def test_line_syntax():
87 env = Environment('<%', '%>', '${', '}', '<%#', '%>', '%')
88 tmpl = env.from_string(MAKO_SYNTAX)
89 assert [int(x.strip()) for x in tmpl.render(seq=range(5)).split()] == \
Armin Ronacher59b6bd52009-03-30 21:00:16 +020090 range(5)
91
92 env = Environment('<%', '%>', '${', '}', '<%#', '%>', '%', '##')
93 tmpl = env.from_string(MAKO_SYNTAX_LINECOMMENTS)
94 assert [int(x.strip()) for x in tmpl.render(seq=range(5)).split()] == \
95 range(5)
96
97
98def test_line_syntax_priority():
99 env = Environment('{%', '%}', '${', '}', '/*', '*/', '#', '##')
100 tmpl = env.from_string(LINE_SYNTAX_PRIORITY)
101 assert tmpl.render(seq=[1, 2]).strip() == '* 1\n* 2'