blob: d9e3c934b6bf9db262c0a8bbc3f5207a059e10d5 [file] [log] [blame]
Armin Ronacher44fb2e12007-04-29 09:45:00 +02001# -*- coding: utf-8 -*-
2"""
Armin Ronacherf41d1392008-04-18 16:41:52 +02003 unit test for the undefined types
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Armin Ronacher44fb2e12007-04-29 09:45:00 +02005
Armin Ronacher62ccd1b2009-01-04 14:26:19 +01006 :copyright: (c) 2009 by the Jinja Team.
Armin Ronacher44fb2e12007-04-29 09:45:00 +02007 :license: BSD, see LICENSE for more details.
8"""
Armin Ronacher5c3c4702008-09-12 23:12:49 +02009from jinja2 import Template
10from jinja2.exceptions import UndefinedError
Armin Ronacher44fb2e12007-04-29 09:45:00 +020011
Armin Ronacher42979eb2009-07-26 11:08:50 +020012from nose.tools import assert_raises
Armin Ronacher44fb2e12007-04-29 09:45:00 +020013
Rene Leonhardtc7e6c6d2009-04-20 23:08:53 +020014
15def test_default_undefined():
16 '''
Armin Ronacherf41d1392008-04-18 16:41:52 +020017>>> from jinja2 import Environment, Undefined
18>>> env = Environment(undefined=Undefined)
19>>> env.from_string('{{ missing }}').render()
20u''
21>>> env.from_string('{{ missing.attribute }}').render()
22Traceback (most recent call last):
23 ...
24UndefinedError: 'missing' is undefined
25>>> env.from_string('{{ missing|list }}').render()
26u'[]'
27>>> env.from_string('{{ missing is not defined }}').render()
28u'True'
29>>> env.from_string('{{ foo.missing }}').render(foo=42)
30u''
31>>> env.from_string('{{ not missing }}').render()
32u'True'
33'''
Armin Ronacher44fb2e12007-04-29 09:45:00 +020034
Rene Leonhardtc7e6c6d2009-04-20 23:08:53 +020035def test_debug_undefined():
36 '''
Armin Ronacherf41d1392008-04-18 16:41:52 +020037>>> from jinja2 import Environment, DebugUndefined
38>>> env = Environment(undefined=DebugUndefined)
39>>> env.from_string('{{ missing }}').render()
40u'{{ missing }}'
41>>> env.from_string('{{ missing.attribute }}').render()
42Traceback (most recent call last):
43 ...
44UndefinedError: 'missing' is undefined
45>>> env.from_string('{{ missing|list }}').render()
46u'[]'
47>>> env.from_string('{{ missing is not defined }}').render()
48u'True'
49>>> env.from_string('{{ foo.missing }}').render(foo=42)
50u"{{ no such element: int['missing'] }}"
51>>> env.from_string('{{ not missing }}').render()
52u'True'
53'''
Armin Ronacher44fb2e12007-04-29 09:45:00 +020054
Rene Leonhardtc7e6c6d2009-04-20 23:08:53 +020055def test_strict_undefined():
56 '''
Armin Ronacherf41d1392008-04-18 16:41:52 +020057>>> from jinja2 import Environment, StrictUndefined
58>>> env = Environment(undefined=StrictUndefined)
59>>> env.from_string('{{ missing }}').render()
60Traceback (most recent call last):
61 ...
62UndefinedError: 'missing' is undefined
63>>> env.from_string('{{ missing.attribute }}').render()
64Traceback (most recent call last):
65 ...
66UndefinedError: 'missing' is undefined
67>>> env.from_string('{{ missing|list }}').render()
68Traceback (most recent call last):
69 ...
70UndefinedError: 'missing' is undefined
71>>> env.from_string('{{ missing is not defined }}').render()
72u'True'
73>>> env.from_string('{{ foo.missing }}').render(foo=42)
74Traceback (most recent call last):
75 ...
76UndefinedError: 'int' object has no attribute 'missing'
77>>> env.from_string('{{ not missing }}').render()
78Traceback (most recent call last):
79 ...
80UndefinedError: 'missing' is undefined
81'''
Armin Ronacher5c3c4702008-09-12 23:12:49 +020082
83
84def test_indexing_gives_undefined():
85 t = Template("{{ var[42].foo }}")
Armin Ronacher42979eb2009-07-26 11:08:50 +020086 assert_raises(UndefinedError, t.render, var=0)