Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 1 | # -*- coding: utf-8 -*- |
| 2 | """ |
Armin Ronacher | f41d139 | 2008-04-18 16:41:52 +0200 | [diff] [blame] | 3 | unit test for the undefined types |
| 4 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 5 | |
Armin Ronacher | 62ccd1b | 2009-01-04 14:26:19 +0100 | [diff] [blame^] | 6 | :copyright: (c) 2009 by the Jinja Team. |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 7 | :license: BSD, see LICENSE for more details. |
| 8 | """ |
Armin Ronacher | 5c3c470 | 2008-09-12 23:12:49 +0200 | [diff] [blame] | 9 | from py.test import raises |
| 10 | from jinja2 import Template |
| 11 | from jinja2.exceptions import UndefinedError |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 12 | |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 13 | |
Armin Ronacher | f41d139 | 2008-04-18 16:41:52 +0200 | [diff] [blame] | 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 | ''' |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 32 | |
Armin Ronacher | f41d139 | 2008-04-18 16:41:52 +0200 | [diff] [blame] | 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 | ''' |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 51 | |
Armin Ronacher | f41d139 | 2008-04-18 16:41:52 +0200 | [diff] [blame] | 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 | ''' |
Armin Ronacher | 5c3c470 | 2008-09-12 23:12:49 +0200 | [diff] [blame] | 78 | |
| 79 | |
| 80 | def test_indexing_gives_undefined(): |
| 81 | t = Template("{{ var[42].foo }}") |
| 82 | raises(UndefinedError, t.render, var=0) |