blob: 7e6d54a02df07a5b1c63ad2fafee1736b200af6d [file] [log] [blame]
Armin Ronacherc1e30402007-03-18 22:41:09 +01001# -*- coding: utf-8 -*-
2"""
3 unit test for the macros
4 ~~~~~~~~~~~~~~~~~~~~~~~~
5
6 :copyright: 2007 by Armin Ronacher.
7 :license: BSD, see LICENSE for more details.
8"""
9
10SIMPLE = '''\
11{% macro say_hello name %}Hello {{ name }}!{% endmacro %}
12{{ say_hello('Peter') }}\
13'''
14
15KWARGSFAILURE = '''\
16{% macro foo bar %}...{% endmacro %}
17{{ foo(bar='blub') }}\
18'''
19
20SCOPING = '''\
21{% macro level1 data1 %}
22{% macro level2 data2 %}{{ data1 }}|{{ data2 }}{% endmacro %}
23{{ level2('bar') }}{% endmacro %}
24{{ level1('foo') }}|{{ level2('bar') }}\
25'''
26
27ARGUMENTS = '''\
28{% macro m a, b, c='c', d='d' %}{{ a }}|{{ b }}|{{ c }}|{{ d }}{% endmacro %}
29{{ m() }}|{{ m('a') }}|{{ m('a', 'b') }}|{{ m(1, 2, 3) }}\
30'''
31
Armin Ronacher44fb2e12007-04-29 09:45:00 +020032PARENTHESES = '''\
33{% macro foo(a, b) %}{{ a }}|{{ b }}{% endmacro %}\
34{{ foo(1, 2) }}\
35'''
36
37VARARGS = '''\
38{% macro test %}{{ varargs|join('|') }}{% endmacro %}\
39{{ test(1, 2, 3) }}\
40'''
41
Armin Ronacher9bcd4112007-05-29 14:17:24 +020042SIMPLECALL = '''\
43{% macro test %}[[{{ caller() }}]]{% endmacro %}\
44{% call test() %}data{% endcall %}\
45'''
46
47COMPLEXCALL = '''\
48{% macro test %}[[{{ caller(data='data') }}]]{% endmacro %}\
49{% call test() %}{{ data }}{% endcall %}\
50'''
51
52CALLERUNDEFINED = '''\
53{% set caller = 42 %}\
54{% macro test() %}{{ caller is not defined }}{% endmacro %}\
55{{ test() }}\
56'''
57
Armin Ronacher1cc232c2007-09-07 17:52:41 +020058INCLUDETEMPLATE = '''{% macro test(foo) %}[{{ foo }}]{% endmacro %}'''
59
Armin Ronacher44fb2e12007-04-29 09:45:00 +020060
Armin Ronacherc1e30402007-03-18 22:41:09 +010061def test_simple(env):
62 tmpl = env.from_string(SIMPLE)
63 assert tmpl.render() == 'Hello Peter!'
64
65
66def test_kwargs_failure(env):
Armin Ronacheree2c18e2007-04-20 22:39:04 +020067 from jinja.exceptions import TemplateRuntimeError
Armin Ronacherc1e30402007-03-18 22:41:09 +010068 tmpl = env.from_string(KWARGSFAILURE)
69 try:
70 tmpl.render()
Armin Ronacheree2c18e2007-04-20 22:39:04 +020071 except TemplateRuntimeError, e:
Armin Ronacherc1e30402007-03-18 22:41:09 +010072 pass
73 else:
74 raise AssertionError('kwargs failure test failed')
75
76
77def test_scoping(env):
78 tmpl = env.from_string(SCOPING)
79 assert tmpl.render() == 'foo|bar|'
80
81
82def test_arguments(env):
83 tmpl = env.from_string(ARGUMENTS)
84 assert tmpl.render() == '||c|d|a||c|d|a|b|c|d|1|2|3|d'
Armin Ronacher44fb2e12007-04-29 09:45:00 +020085
86
87def test_parentheses(env):
88 tmpl = env.from_string(PARENTHESES)
89 assert tmpl.render() == '1|2'
90
91
92def test_varargs(env):
93 tmpl = env.from_string(VARARGS)
94 assert tmpl.render() == '1|2|3'
Armin Ronacher9bcd4112007-05-29 14:17:24 +020095
96
97def test_simple_call(env):
98 tmpl = env.from_string(SIMPLECALL)
99 assert tmpl.render() == '[[data]]'
100
101
102def test_complex_call(env):
103 tmpl = env.from_string(COMPLEXCALL)
104 assert tmpl.render() == '[[data]]'
105
106
107def test_caller_undefined(env):
108 tmpl = env.from_string(CALLERUNDEFINED)
109 assert tmpl.render() == 'True'
Armin Ronacher1cc232c2007-09-07 17:52:41 +0200110
111
112def test_include(env):
113 tmpl = env.from_string('{% include "include" %}{{ test("foo") }}')
114 assert tmpl.render() == '[foo]'