summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAmy <leiamy12@gmail.com>2020-06-26 15:26:04 -0400
committerAmy <leiamy12@gmail.com>2021-04-04 13:09:31 -0400
commitebf0e2dfdad237a938436cd18fc49405c5703dc6 (patch)
tree32bc5e70d82b669a3459c0ef9f40dac2a78005ea /tests
parent1c863d0447efb7e68e2593e7de3fec87670521cb (diff)
downloadjinja2-ebf0e2dfdad237a938436cd18fc49405c5703dc6.tar.gz
allow optional use of filter based on existence
Diffstat (limited to 'tests')
-rw-r--r--tests/test_filters.py48
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)