blob: 7da2515a1840896677662be3a32b800bb5a5a18c [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'