blob: ee8296ab0046c3f9734b3bce2b50fba452955fd2 [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 +020039WORKINGTEMPLATE = '''\
40{% extends "layout" %}
41{% block block1 %}
42 {% if false %}
43 {% block block2 %}
44 this should workd
45 {% endblock %}
46 {% endif %}
47{% endblock %}
48'''
49
Armin Ronacherc1e30402007-03-18 22:41:09 +010050def test_layout(env):
51 tmpl = env.get_template('layout')
52 assert tmpl.render() == ('|block 1 from layout|block 2 from '
53 'layout|nested block 4 from layout|')
54
55
56def test_level1(env):
57 tmpl = env.get_template('level1')
58 assert tmpl.render() == ('|block 1 from level1|block 2 from '
59 'layout|nested block 4 from layout|')
60
61
62def test_level2(env):
63 tmpl = env.get_template('level2')
64 assert tmpl.render() == ('|block 1 from level1|nested block 5 from '
65 'level2|nested block 4 from layout|')
66
67
68def test_level3(env):
69 tmpl = env.get_template('level3')
70 assert tmpl.render() == ('|block 1 from level1|block 5 from level3|'
71 'block 4 from level3|')
72
73
74def test_level4(env):
75 tmpl = env.get_template('level4')
76 assert tmpl.render() == ('|block 1 from level1|block 5 from '
77 'level3|block 3 from level4|')
Armin Ronacher21580912007-04-17 17:13:10 +020078
79
80def test_super():
81 env = Environment(loader=DictLoader({
82 'a': '{% block intro %}INTRO{% endblock %}|'
83 'BEFORE|{% block data %}INNER{% endblock %}|AFTER',
84 'b': '{% extends "a" %}{% block data %}({{ '
85 'super() }}){% endblock %}',
86 'c': '{% extends "b" %}{% block intro %}--{{ '
87 'super() }}--{% endblock %}\n{% block data '
88 '%}[{{ super() }}]{% endblock %}'
89 }))
90 tmpl = env.get_template('c')
91 assert tmpl.render() == '--INTRO--|BEFORE|[(INNER)]|AFTER'
Armin Ronacher44fb2e12007-04-29 09:45:00 +020092
93
Armin Ronacher44fb2e12007-04-29 09:45:00 +020094def test_working(env):
95 tmpl = env.get_template('working')
Armin Ronachere25f24d2008-05-19 11:20:41 +020096
97
98def test_reuse_blocks(env):
99 tmpl = env.from_string('{{ self.foo() }}|{% block foo %}42{% endblock %}|{{ self.foo() }}')
100 assert tmpl.render() == '42|42|42'
Armin Ronacher6df604e2008-05-23 22:18:38 +0200101
102
103def test_preserve_blocks():
104 env = Environment(loader=DictLoader({
105 'a': '{% if false %}{% block x %}A{% endblock %}{% endif %}{{ self.x() }}',
106 'b': '{% extends "a" %}{% block x %}B{{ super() }}{% endblock %}'
107 }))
108 tmpl = env.get_template('b')
109 assert tmpl.render() == 'BA'