blob: be829bf949db887725fec7c1193c7ac708ccd0ea [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
Rene Leonhardtc7e6c6d2009-04-20 23:08:53 +020012import conftest
13if conftest.NOSE:
14 from nose.tools import assert_raises as raises
15else:
16 from py.test import raises
Armin Ronacher44fb2e12007-04-29 09:45:00 +020017
Rene Leonhardtc7e6c6d2009-04-20 23:08:53 +020018
19def test_default_undefined():
20 '''
Armin Ronacherf41d1392008-04-18 16:41:52 +020021>>> from jinja2 import Environment, Undefined
22>>> env = Environment(undefined=Undefined)
23>>> env.from_string('{{ missing }}').render()
24u''
25>>> env.from_string('{{ missing.attribute }}').render()
26Traceback (most recent call last):
27 ...
28UndefinedError: 'missing' is undefined
29>>> env.from_string('{{ missing|list }}').render()
30u'[]'
31>>> env.from_string('{{ missing is not defined }}').render()
32u'True'
33>>> env.from_string('{{ foo.missing }}').render(foo=42)
34u''
35>>> env.from_string('{{ not missing }}').render()
36u'True'
37'''
Armin Ronacher44fb2e12007-04-29 09:45:00 +020038
Rene Leonhardtc7e6c6d2009-04-20 23:08:53 +020039def test_debug_undefined():
40 '''
Armin Ronacherf41d1392008-04-18 16:41:52 +020041>>> from jinja2 import Environment, DebugUndefined
42>>> env = Environment(undefined=DebugUndefined)
43>>> env.from_string('{{ missing }}').render()
44u'{{ missing }}'
45>>> env.from_string('{{ missing.attribute }}').render()
46Traceback (most recent call last):
47 ...
48UndefinedError: 'missing' is undefined
49>>> env.from_string('{{ missing|list }}').render()
50u'[]'
51>>> env.from_string('{{ missing is not defined }}').render()
52u'True'
53>>> env.from_string('{{ foo.missing }}').render(foo=42)
54u"{{ no such element: int['missing'] }}"
55>>> env.from_string('{{ not missing }}').render()
56u'True'
57'''
Armin Ronacher44fb2e12007-04-29 09:45:00 +020058
Rene Leonhardtc7e6c6d2009-04-20 23:08:53 +020059def test_strict_undefined():
60 '''
Armin Ronacherf41d1392008-04-18 16:41:52 +020061>>> from jinja2 import Environment, StrictUndefined
62>>> env = Environment(undefined=StrictUndefined)
63>>> env.from_string('{{ missing }}').render()
64Traceback (most recent call last):
65 ...
66UndefinedError: 'missing' is undefined
67>>> env.from_string('{{ missing.attribute }}').render()
68Traceback (most recent call last):
69 ...
70UndefinedError: 'missing' is undefined
71>>> env.from_string('{{ missing|list }}').render()
72Traceback (most recent call last):
73 ...
74UndefinedError: 'missing' is undefined
75>>> env.from_string('{{ missing is not defined }}').render()
76u'True'
77>>> env.from_string('{{ foo.missing }}').render(foo=42)
78Traceback (most recent call last):
79 ...
80UndefinedError: 'int' object has no attribute 'missing'
81>>> env.from_string('{{ not missing }}').render()
82Traceback (most recent call last):
83 ...
84UndefinedError: 'missing' is undefined
85'''
Armin Ronacher5c3c4702008-09-12 23:12:49 +020086
87
88def test_indexing_gives_undefined():
89 t = Template("{{ var[42].foo }}")
90 raises(UndefinedError, t.render, var=0)