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