diff options
author | Amy <leiamy12@gmail.com> | 2020-06-26 15:26:04 -0400 |
---|---|---|
committer | Amy <leiamy12@gmail.com> | 2021-04-04 13:09:31 -0400 |
commit | ebf0e2dfdad237a938436cd18fc49405c5703dc6 (patch) | |
tree | 32bc5e70d82b669a3459c0ef9f40dac2a78005ea /tests | |
parent | 1c863d0447efb7e68e2593e7de3fec87670521cb (diff) | |
download | jinja2-ebf0e2dfdad237a938436cd18fc49405c5703dc6.tar.gz |
allow optional use of filter based on existence
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_filters.py | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/test_filters.py b/tests/test_filters.py index efc82bc..44be6ad 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -6,7 +6,9 @@ import pytest from jinja2 import Environment from jinja2 import Markup from jinja2 import StrictUndefined +from jinja2 import TemplateRuntimeError from jinja2 import UndefinedError +from jinja2.exceptions import TemplateAssertionError class Magic: @@ -774,3 +776,49 @@ class TestFilter: t = env.from_string("{{ s|wordwrap(20) }}") result = t.render(s="Hello!\nThis is Jinja saying something.") assert result == "Hello!\nThis is Jinja saying\nsomething." + + def test_filter_undefined(self, env): + with pytest.raises(TemplateAssertionError, match="no filter named 'f'"): + env.from_string("{{ var|f }}") + + def test_filter_undefined_in_if(self, env): + t = env.from_string("{%- if x is defined -%}{{ x|f }}{%- else -%}x{% endif %}") + assert t.render() == "x" + with pytest.raises(TemplateRuntimeError, match="no filter named 'f'"): + t.render(x=42) + + def test_filter_undefined_in_elif(self, env): + t = env.from_string( + "{%- if x is defined -%}{{ x }}{%- elif y is defined -%}" + "{{ y|f }}{%- else -%}foo{%- endif -%}" + ) + assert t.render() == "foo" + with pytest.raises(TemplateRuntimeError, match="no filter named 'f'"): + t.render(y=42) + + def test_filter_undefined_in_else(self, env): + t = env.from_string( + "{%- if x is not defined -%}foo{%- else -%}{{ x|f }}{%- endif -%}" + ) + assert t.render() == "foo" + with pytest.raises(TemplateRuntimeError, match="no filter named 'f'"): + t.render(x=42) + + def test_filter_undefined_in_nested_if(self, env): + t = env.from_string( + "{%- if x is not defined -%}foo{%- else -%}{%- if y " + "is defined -%}{{ y|f }}{%- endif -%}{{ x }}{%- endif -%}" + ) + assert t.render() == "foo" + assert t.render(x=42) == "42" + with pytest.raises(TemplateRuntimeError, match="no filter named 'f'"): + t.render(x=24, y=42) + + def test_filter_undefined_in_condexpr(self, env): + t1 = env.from_string("{{ x|f if x is defined else 'foo' }}") + t2 = env.from_string("{{ 'foo' if x is not defined else x|f }}") + assert t1.render() == t2.render() == "foo" + + with pytest.raises(TemplateRuntimeError, match="no filter named 'f'"): + t1.render(x=42) + t2.render(x=42) |