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 jinja2 import Template |
| 10 | from jinja2.exceptions import UndefinedError |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 11 | |
Rene Leonhardt | c7e6c6d | 2009-04-20 23:08:53 +0200 | [diff] [blame^] | 12 | import conftest |
| 13 | if conftest.NOSE: |
| 14 | from nose.tools import assert_raises as raises |
| 15 | else: |
| 16 | from py.test import raises |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 17 | |
Rene Leonhardt | c7e6c6d | 2009-04-20 23:08:53 +0200 | [diff] [blame^] | 18 | |
| 19 | def test_default_undefined(): |
| 20 | ''' |
Armin Ronacher | f41d139 | 2008-04-18 16:41:52 +0200 | [diff] [blame] | 21 | >>> from jinja2 import Environment, Undefined |
| 22 | >>> env = Environment(undefined=Undefined) |
| 23 | >>> env.from_string('{{ missing }}').render() |
| 24 | u'' |
| 25 | >>> env.from_string('{{ missing.attribute }}').render() |
| 26 | Traceback (most recent call last): |
| 27 | ... |
| 28 | UndefinedError: 'missing' is undefined |
| 29 | >>> env.from_string('{{ missing|list }}').render() |
| 30 | u'[]' |
| 31 | >>> env.from_string('{{ missing is not defined }}').render() |
| 32 | u'True' |
| 33 | >>> env.from_string('{{ foo.missing }}').render(foo=42) |
| 34 | u'' |
| 35 | >>> env.from_string('{{ not missing }}').render() |
| 36 | u'True' |
| 37 | ''' |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 38 | |
Rene Leonhardt | c7e6c6d | 2009-04-20 23:08:53 +0200 | [diff] [blame^] | 39 | def test_debug_undefined(): |
| 40 | ''' |
Armin Ronacher | f41d139 | 2008-04-18 16:41:52 +0200 | [diff] [blame] | 41 | >>> from jinja2 import Environment, DebugUndefined |
| 42 | >>> env = Environment(undefined=DebugUndefined) |
| 43 | >>> env.from_string('{{ missing }}').render() |
| 44 | u'{{ missing }}' |
| 45 | >>> env.from_string('{{ missing.attribute }}').render() |
| 46 | Traceback (most recent call last): |
| 47 | ... |
| 48 | UndefinedError: 'missing' is undefined |
| 49 | >>> env.from_string('{{ missing|list }}').render() |
| 50 | u'[]' |
| 51 | >>> env.from_string('{{ missing is not defined }}').render() |
| 52 | u'True' |
| 53 | >>> env.from_string('{{ foo.missing }}').render(foo=42) |
| 54 | u"{{ no such element: int['missing'] }}" |
| 55 | >>> env.from_string('{{ not missing }}').render() |
| 56 | u'True' |
| 57 | ''' |
Armin Ronacher | 44fb2e1 | 2007-04-29 09:45:00 +0200 | [diff] [blame] | 58 | |
Rene Leonhardt | c7e6c6d | 2009-04-20 23:08:53 +0200 | [diff] [blame^] | 59 | def test_strict_undefined(): |
| 60 | ''' |
Armin Ronacher | f41d139 | 2008-04-18 16:41:52 +0200 | [diff] [blame] | 61 | >>> from jinja2 import Environment, StrictUndefined |
| 62 | >>> env = Environment(undefined=StrictUndefined) |
| 63 | >>> env.from_string('{{ missing }}').render() |
| 64 | Traceback (most recent call last): |
| 65 | ... |
| 66 | UndefinedError: 'missing' is undefined |
| 67 | >>> env.from_string('{{ missing.attribute }}').render() |
| 68 | Traceback (most recent call last): |
| 69 | ... |
| 70 | UndefinedError: 'missing' is undefined |
| 71 | >>> env.from_string('{{ missing|list }}').render() |
| 72 | Traceback (most recent call last): |
| 73 | ... |
| 74 | UndefinedError: 'missing' is undefined |
| 75 | >>> env.from_string('{{ missing is not defined }}').render() |
| 76 | u'True' |
| 77 | >>> env.from_string('{{ foo.missing }}').render(foo=42) |
| 78 | Traceback (most recent call last): |
| 79 | ... |
| 80 | UndefinedError: 'int' object has no attribute 'missing' |
| 81 | >>> env.from_string('{{ not missing }}').render() |
| 82 | Traceback (most recent call last): |
| 83 | ... |
| 84 | UndefinedError: 'missing' is undefined |
| 85 | ''' |
Armin Ronacher | 5c3c470 | 2008-09-12 23:12:49 +0200 | [diff] [blame] | 86 | |
| 87 | |
| 88 | def test_indexing_gives_undefined(): |
| 89 | t = Template("{{ var[42].foo }}") |
| 90 | raises(UndefinedError, t.render, var=0) |