blob: 8d39ab0f2a9df049b12d44e7f01da25d0c10b0a8 [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 Ronacherdb7985d2009-03-31 23:51:56 +020049LINE_SYNTAX_PRIORITY1 = '''\
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
57LINE_SYNTAX_PRIORITY2 = '''\
Armin Ronacher59b6bd52009-03-30 21:00:16 +020058/* ignore me.
59 I'm a multiline comment */
60# for item in seq:
61* ${item} ## this is just extra stuff
62# endfor
63'''
64
Armin Ronacherccf284b2007-05-21 16:44:26 +020065
Armin Ronacherccf284b2007-05-21 16:44:26 +020066def test_php_syntax():
67 env = Environment('<?', '?>', '<?=', '?>', '<!--', '-->')
68 tmpl = env.from_string(PHP_SYNTAX)
69 assert tmpl.render(seq=range(5)) == '01234'
70
71
72def test_erb_syntax():
73 env = Environment('<%', '%>', '<%=', '%>', '<%#', '%>')
74 tmpl = env.from_string(ERB_SYNTAX)
75 assert tmpl.render(seq=range(5)) == '01234'
76
77
78def test_comment_syntax():
79 env = Environment('<!--', '-->', '${', '}', '<!--#', '-->')
80 tmpl = env.from_string(COMMENT_SYNTAX)
81 assert tmpl.render(seq=range(5)) == '01234'
82
83
Armin Ronacherecc051b2007-06-01 18:25:28 +020084def test_balancing(env):
85 tmpl = env.from_string(BALANCING)
86 assert tmpl.render() == 'bar'
Armin Ronacher9b0545a2007-09-26 13:16:41 +020087
88
89def test_start_comment(env):
90 tmpl = env.from_string(STARTCOMMENT)
91 assert tmpl.render().strip() == 'foo'
Armin Ronacher4f7d2d52008-04-22 10:40:26 +020092
93
94def test_line_syntax():
95 env = Environment('<%', '%>', '${', '}', '<%#', '%>', '%')
96 tmpl = env.from_string(MAKO_SYNTAX)
97 assert [int(x.strip()) for x in tmpl.render(seq=range(5)).split()] == \
Armin Ronacher59b6bd52009-03-30 21:00:16 +020098 range(5)
99
100 env = Environment('<%', '%>', '${', '}', '<%#', '%>', '%', '##')
101 tmpl = env.from_string(MAKO_SYNTAX_LINECOMMENTS)
102 assert [int(x.strip()) for x in tmpl.render(seq=range(5)).split()] == \
103 range(5)
104
105
106def test_line_syntax_priority():
Armin Ronacherdb7985d2009-03-31 23:51:56 +0200107 # XXX: why is the whitespace there in front of the newline?
108 env = Environment('{%', '%}', '${', '}', '/*', '*/', '##', '#')
109 tmpl = env.from_string(LINE_SYNTAX_PRIORITY1)
Armin Ronacher1bb3ab72009-04-01 19:16:25 +0200110 assert tmpl.render(seq=[1, 2]).strip() == '* 1\n* 2'
Armin Ronacher59b6bd52009-03-30 21:00:16 +0200111 env = Environment('{%', '%}', '${', '}', '/*', '*/', '#', '##')
Armin Ronacherdb7985d2009-03-31 23:51:56 +0200112 tmpl = env.from_string(LINE_SYNTAX_PRIORITY2)
Armin Ronacher1bb3ab72009-04-01 19:16:25 +0200113 assert tmpl.render(seq=[1, 2]).strip() == '* 1\n* 2'