Automated merge with ssh://team@pocoo.org/jinja2-main
[jinja2.git] / tests / test_undefined.py
1 # -*- coding: utf-8 -*-
2 """
3     unit test for the undefined types
4     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
5
6     :copyright: 2008 by Armin Ronacher.
7     :license: BSD, see LICENSE for more details.
8 """
9 from py.test import raises
10 from jinja2 import Template
11 from jinja2.exceptions import UndefinedError
12
13
14 test_default_undefined = '''
15 >>> from jinja2 import Environment, Undefined
16 >>> env = Environment(undefined=Undefined)
17 >>> env.from_string('{{ missing }}').render()
18 u''
19 >>> env.from_string('{{ missing.attribute }}').render()
20 Traceback (most recent call last):
21   ...
22 UndefinedError: 'missing' is undefined
23 >>> env.from_string('{{ missing|list }}').render()
24 u'[]'
25 >>> env.from_string('{{ missing is not defined }}').render()
26 u'True'
27 >>> env.from_string('{{ foo.missing }}').render(foo=42)
28 u''
29 >>> env.from_string('{{ not missing }}').render()
30 u'True'
31 '''
32
33 test_debug_undefined = '''
34 >>> from jinja2 import Environment, DebugUndefined
35 >>> env = Environment(undefined=DebugUndefined)
36 >>> env.from_string('{{ missing }}').render()
37 u'{{ missing }}'
38 >>> env.from_string('{{ missing.attribute }}').render()
39 Traceback (most recent call last):
40   ...
41 UndefinedError: 'missing' is undefined
42 >>> env.from_string('{{ missing|list }}').render()
43 u'[]'
44 >>> env.from_string('{{ missing is not defined }}').render()
45 u'True'
46 >>> env.from_string('{{ foo.missing }}').render(foo=42)
47 u"{{ no such element: int['missing'] }}"
48 >>> env.from_string('{{ not missing }}').render()
49 u'True'
50 '''
51
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):
57   ...
58 UndefinedError: 'missing' is undefined
59 >>> env.from_string('{{ missing.attribute }}').render()
60 Traceback (most recent call last):
61   ...
62 UndefinedError: 'missing' is undefined
63 >>> env.from_string('{{ missing|list }}').render()
64 Traceback (most recent call last):
65   ...
66 UndefinedError: 'missing' is undefined
67 >>> env.from_string('{{ missing is not defined }}').render()
68 u'True'
69 >>> env.from_string('{{ foo.missing }}').render(foo=42)
70 Traceback (most recent call last):
71   ...
72 UndefinedError: 'int' object has no attribute 'missing'
73 >>> env.from_string('{{ not missing }}').render()
74 Traceback (most recent call last):
75   ...
76 UndefinedError: 'missing' is undefined
77 '''
78
79
80 def test_indexing_gives_undefined():
81     t = Template("{{ var[42].foo }}")
82     raises(UndefinedError, t.render, var=0)