1 # -*- coding: utf-8 -*-
3 unit test for the undefined types
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 :copyright: 2008 by Armin Ronacher.
7 :license: BSD, see LICENSE for more details.
9 from py.test import raises
10 from jinja2 import Template
11 from jinja2.exceptions import UndefinedError
14 test_default_undefined = '''
15 >>> from jinja2 import Environment, Undefined
16 >>> env = Environment(undefined=Undefined)
17 >>> env.from_string('{{ missing }}').render()
19 >>> env.from_string('{{ missing.attribute }}').render()
20 Traceback (most recent call last):
22 UndefinedError: 'missing' is undefined
23 >>> env.from_string('{{ missing|list }}').render()
25 >>> env.from_string('{{ missing is not defined }}').render()
27 >>> env.from_string('{{ foo.missing }}').render(foo=42)
29 >>> env.from_string('{{ not missing }}').render()
33 test_debug_undefined = '''
34 >>> from jinja2 import Environment, DebugUndefined
35 >>> env = Environment(undefined=DebugUndefined)
36 >>> env.from_string('{{ missing }}').render()
38 >>> env.from_string('{{ missing.attribute }}').render()
39 Traceback (most recent call last):
41 UndefinedError: 'missing' is undefined
42 >>> env.from_string('{{ missing|list }}').render()
44 >>> env.from_string('{{ missing is not defined }}').render()
46 >>> env.from_string('{{ foo.missing }}').render(foo=42)
47 u"{{ no such element: int['missing'] }}"
48 >>> env.from_string('{{ not missing }}').render()
52 test_strict_undefined = '''
53 >>> from jinja2 import Environment, StrictUndefined
54 >>> env = Environment(undefined=StrictUndefined)
55 >>> env.from_string('{{ missing }}').render()
56 Traceback (most recent call last):
58 UndefinedError: 'missing' is undefined
59 >>> env.from_string('{{ missing.attribute }}').render()
60 Traceback (most recent call last):
62 UndefinedError: 'missing' is undefined
63 >>> env.from_string('{{ missing|list }}').render()
64 Traceback (most recent call last):
66 UndefinedError: 'missing' is undefined
67 >>> env.from_string('{{ missing is not defined }}').render()
69 >>> env.from_string('{{ foo.missing }}').render(foo=42)
70 Traceback (most recent call last):
72 UndefinedError: 'int' object has no attribute 'missing'
73 >>> env.from_string('{{ not missing }}').render()
74 Traceback (most recent call last):
76 UndefinedError: 'missing' is undefined
80 def test_indexing_gives_undefined():
81 t = Template("{{ var[42].foo }}")
82 raises(UndefinedError, t.render, var=0)