1 # -*- coding: utf-8 -*-
3 unit test for various things
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 :copyright: 2007 by Armin Ronacher.
7 :license: BSD, see LICENSE for more details.
10 from py.test import raises
11 from jinja2 import escape
12 from jinja2.exceptions import TemplateSyntaxError
15 UNPACKING = '''{% for a, b, c in [[1, 2, 3]] %}{{ a }}|{{ b }}|{{ c }}{% endfor %}'''
16 RAW = '''{% raw %}{{ FOO }} and {% BAR %}{% endraw %}'''
17 CONST = '''{{ true }}|{{ false }}|{{ none }}|\
18 {{ none is defined }}|{{ missing is defined }}'''
19 LOCALSET = '''{% set foo = 0 %}\
20 {% for item in [1, 2] %}{% set foo = 1 %}{% endfor %}\
22 CONSTASS1 = '''{% set true = 42 %}'''
23 CONSTASS2 = '''{% for none in seq %}{% endfor %}'''
26 def test_unpacking(env):
27 tmpl = env.from_string(UNPACKING)
28 assert tmpl.render() == '1|2|3'
32 tmpl = env.from_string(RAW)
33 assert tmpl.render() == '{{ FOO }} and {% BAR %}'
37 tmpl = env.from_string(CONST)
38 assert tmpl.render() == 'True|False|None|True|False'
41 def test_const_assign(env):
42 for tmpl in CONSTASS1, CONSTASS2:
43 raises(TemplateSyntaxError, env.from_string, tmpl)
46 def test_localset(env):
47 tmpl = env.from_string(LOCALSET)
48 assert tmpl.render() == '0'
51 def test_markup_leaks():
53 for count in xrange(20):
54 for item in xrange(1000):
59 counts.add(len(gc.get_objects()))
60 assert len(counts) == 1, 'ouch, c extension seems to leak objects'
63 def test_item_and_attribute():
64 from jinja2 import Environment
65 from jinja2.sandbox import SandboxedEnvironment
67 for env in Environment(), SandboxedEnvironment():
68 tmpl = env.from_string('{{ foo.items() }}')
69 assert tmpl.render(foo={'items': 42}) == "[('items', 42)]"
70 tmpl = env.from_string('{{ foo|attr("items")() }}')
71 assert tmpl.render(foo={'items': 42}) == "[('items', 42)]"
72 tmpl = env.from_string('{{ foo["items"] }}')
73 assert tmpl.render(foo={'items': 42}) == '42'