blob: 53ebfac3e5024b7c170dc850617663cb32a75f5d [file] [log] [blame]
Armin Ronacherc1e30402007-03-18 22:41:09 +01001# -*- coding: utf-8 -*-
2"""
3 unit test for the inheritance
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
6 :copyright: 2007 by Armin Ronacher.
7 :license: BSD, see LICENSE for more details.
8"""
Christoph Hacke9e43bb2008-04-13 23:35:48 +02009from jinja2 import Environment, DictLoader
10from jinja2.exceptions import TemplateSyntaxError
Armin Ronacherc1e30402007-03-18 22:41:09 +010011
12LAYOUTTEMPLATE = '''\
13|{% block block1 %}block 1 from layout{% endblock %}
14|{% block block2 %}block 2 from layout{% endblock %}
15|{% block block3 %}
16{% block block4 %}nested block 4 from layout{% endblock %}
17{% endblock %}|'''
18
19LEVEL1TEMPLATE = '''\
20{% extends "layout" %}
21{% block block1 %}block 1 from level1{% endblock %}'''
22
23LEVEL2TEMPLATE = '''\
24{% extends "level1" %}
25{% block block2 %}{% block block5 %}nested block 5 from level2{%
26endblock %}{% endblock %}'''
27
28LEVEL3TEMPLATE = '''\
29{% extends "level2" %}
30{% block block5 %}block 5 from level3{% endblock %}
31{% block block4 %}block 4 from level3{% endblock %}
32'''
33
34LEVEL4TEMPLATE = '''\
35{% extends "level3" %}
36{% block block3 %}block 3 from level4{% endblock %}
37'''
38
Armin Ronacher44fb2e12007-04-29 09:45:00 +020039BROKENTEMPLATE = '''\
40{% extends "layout" %}
41{% if false %}
42 {% block block1 %}
43 this is broken
44 {% endblock %}
45{% endif %}
46'''
47
48WORKINGTEMPLATE = '''\
49{% extends "layout" %}
50{% block block1 %}
51 {% if false %}
52 {% block block2 %}
53 this should workd
54 {% endblock %}
55 {% endif %}
56{% endblock %}
57'''
58
Armin Ronacherc1e30402007-03-18 22:41:09 +010059def test_layout(env):
60 tmpl = env.get_template('layout')
61 assert tmpl.render() == ('|block 1 from layout|block 2 from '
62 'layout|nested block 4 from layout|')
63
64
65def test_level1(env):
66 tmpl = env.get_template('level1')
67 assert tmpl.render() == ('|block 1 from level1|block 2 from '
68 'layout|nested block 4 from layout|')
69
70
71def test_level2(env):
72 tmpl = env.get_template('level2')
73 assert tmpl.render() == ('|block 1 from level1|nested block 5 from '
74 'level2|nested block 4 from layout|')
75
76
77def test_level3(env):
78 tmpl = env.get_template('level3')
79 assert tmpl.render() == ('|block 1 from level1|block 5 from level3|'
80 'block 4 from level3|')
81
82
83def test_level4(env):
84 tmpl = env.get_template('level4')
85 assert tmpl.render() == ('|block 1 from level1|block 5 from '
86 'level3|block 3 from level4|')
Armin Ronacher21580912007-04-17 17:13:10 +020087
88
89def test_super():
90 env = Environment(loader=DictLoader({
91 'a': '{% block intro %}INTRO{% endblock %}|'
92 'BEFORE|{% block data %}INNER{% endblock %}|AFTER',
93 'b': '{% extends "a" %}{% block data %}({{ '
94 'super() }}){% endblock %}',
95 'c': '{% extends "b" %}{% block intro %}--{{ '
96 'super() }}--{% endblock %}\n{% block data '
97 '%}[{{ super() }}]{% endblock %}'
98 }))
99 tmpl = env.get_template('c')
100 assert tmpl.render() == '--INTRO--|BEFORE|[(INNER)]|AFTER'
Armin Ronacher44fb2e12007-04-29 09:45:00 +0200101
102
103def test_broken(env):
104 try:
105 tmpl = env.get_template('broken')
106 except TemplateSyntaxError:
107 pass
108 else:
109 raise RuntimeError('no syntax error occured')
110
111
112def test_working(env):
113 tmpl = env.get_template('working')
Armin Ronacher9cdf3bf2007-10-19 00:21:08 +0200114
115
116def test_shortcut(env):
117 tmpl = env.from_string('{% block foo "42" %}')
118 assert tmpl.render() == '42'