blob: dc66d56a9592e6bae4fb8d0545cdb26ad78c90ef [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 py.test import raises
10from jinja2 import Template
11from jinja2.exceptions import UndefinedError
Armin Ronacher44fb2e12007-04-29 09:45:00 +020012
Armin Ronacher44fb2e12007-04-29 09:45:00 +020013
Armin Ronacherf41d1392008-04-18 16:41:52 +020014test_default_undefined = '''
15>>> from jinja2 import Environment, Undefined
16>>> env = Environment(undefined=Undefined)
17>>> env.from_string('{{ missing }}').render()
18u''
19>>> env.from_string('{{ missing.attribute }}').render()
20Traceback (most recent call last):
21 ...
22UndefinedError: 'missing' is undefined
23>>> env.from_string('{{ missing|list }}').render()
24u'[]'
25>>> env.from_string('{{ missing is not defined }}').render()
26u'True'
27>>> env.from_string('{{ foo.missing }}').render(foo=42)
28u''
29>>> env.from_string('{{ not missing }}').render()
30u'True'
31'''
Armin Ronacher44fb2e12007-04-29 09:45:00 +020032
Armin Ronacherf41d1392008-04-18 16:41:52 +020033test_debug_undefined = '''
34>>> from jinja2 import Environment, DebugUndefined
35>>> env = Environment(undefined=DebugUndefined)
36>>> env.from_string('{{ missing }}').render()
37u'{{ missing }}'
38>>> env.from_string('{{ missing.attribute }}').render()
39Traceback (most recent call last):
40 ...
41UndefinedError: 'missing' is undefined
42>>> env.from_string('{{ missing|list }}').render()
43u'[]'
44>>> env.from_string('{{ missing is not defined }}').render()
45u'True'
46>>> env.from_string('{{ foo.missing }}').render(foo=42)
47u"{{ no such element: int['missing'] }}"
48>>> env.from_string('{{ not missing }}').render()
49u'True'
50'''
Armin Ronacher44fb2e12007-04-29 09:45:00 +020051
Armin Ronacherf41d1392008-04-18 16:41:52 +020052test_strict_undefined = '''
53>>> from jinja2 import Environment, StrictUndefined
54>>> env = Environment(undefined=StrictUndefined)
55>>> env.from_string('{{ missing }}').render()
56Traceback (most recent call last):
57 ...
58UndefinedError: 'missing' is undefined
59>>> env.from_string('{{ missing.attribute }}').render()
60Traceback (most recent call last):
61 ...
62UndefinedError: 'missing' is undefined
63>>> env.from_string('{{ missing|list }}').render()
64Traceback (most recent call last):
65 ...
66UndefinedError: 'missing' is undefined
67>>> env.from_string('{{ missing is not defined }}').render()
68u'True'
69>>> env.from_string('{{ foo.missing }}').render(foo=42)
70Traceback (most recent call last):
71 ...
72UndefinedError: 'int' object has no attribute 'missing'
73>>> env.from_string('{{ not missing }}').render()
74Traceback (most recent call last):
75 ...
76UndefinedError: 'missing' is undefined
77'''
Armin Ronacher5c3c4702008-09-12 23:12:49 +020078
79
80def test_indexing_gives_undefined():
81 t = Template("{{ var[42].foo }}")
82 raises(UndefinedError, t.render, var=0)