blob: d3364bb61a4b7fedcf11c0230cf9b8c0ed9a77ee [file] [log] [blame]
Armin Ronacher3da90312008-05-23 16:37:28 +02001# -*- coding: utf-8 -*-
2"""
3 unit test for some extensions
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
6 :copyright: 2008 by Armin Ronacher.
7 :license: BSD, see LICENSE for more details.
8"""
Armin Ronacher6df604e2008-05-23 22:18:38 +02009from jinja2 import Environment, nodes
10from jinja2.ext import Extension
11
12
13importable_object = 23
14
15
16class TestExtension(Extension):
17 tags = set(['test'])
18 ext_attr = 42
19
20 def parse(self, parser):
21 return nodes.Output([self.call_method('_dump', [
22 nodes.EnvironmentAttribute('sandboxed'),
23 self.attr('ext_attr'),
24 nodes.ImportedName(__name__ + '.importable_object'),
25 nodes.ContextReference()
26 ])]).set_lineno(parser.stream.next().lineno)
27
28 def _dump(self, sandboxed, ext_attr, imported_object, context):
29 return '%s|%s|%s|%s' % (
30 sandboxed,
31 ext_attr,
32 imported_object,
33 context.blocks
34 )
Armin Ronacher3da90312008-05-23 16:37:28 +020035
36
37def test_loop_controls():
38 env = Environment(extensions=['jinja2.ext.loopcontrols'])
39
40 tmpl = env.from_string('''
41 {%- for item in [1, 2, 3, 4] %}
42 {%- if item % 2 == 0 %}{% continue %}{% endif -%}
43 {{ item }}
44 {%- endfor %}''')
45 assert tmpl.render() == '13'
46
47 tmpl = env.from_string('''
48 {%- for item in [1, 2, 3, 4] %}
49 {%- if item > 2 %}{% break %}{% endif -%}
50 {{ item }}
51 {%- endfor %}''')
52 assert tmpl.render() == '12'
53
54
55def test_do():
56 env = Environment(extensions=['jinja2.ext.do'])
57 tmpl = env.from_string('''
58 {%- set items = [] %}
59 {%- for char in "foo" %}
60 {%- do items.append(loop.index0 ~ char) %}
61 {%- endfor %}{{ items|join(', ') }}''')
62 assert tmpl.render() == '0f, 1o, 2o'
Armin Ronacher6df604e2008-05-23 22:18:38 +020063
64
65def test_extension_nodes():
66 env = Environment(extensions=[TestExtension])
67 tmpl = env.from_string('{% test %}')
68 assert tmpl.render() == 'False|42|23|{}'
Armin Ronacher9cf95912008-05-24 19:54:43 +020069
70
71def test_identifier():
72 assert TestExtension.identifier == __name__ + '.TestExtension'
Armin Ronacher9f258ff2008-05-24 22:28:52 +020073
74
75def test_rebinding():
76 original = Environment(extensions=[TestExtension])
77 overlay = original.overlay()
78 for env in original, overlay:
79 for ext in env.extensions.itervalues():
80 assert ext.environment is env