use soft_str in do_wordcount, to trigger undefined

This commit is contained in:
Matt Martz 2020-02-27 12:46:58 -06:00 committed by David Lord
parent 2a70ef218b
commit ba080f51e0
No known key found for this signature in database
GPG Key ID: 7A1C87E3F5BC42A8
3 changed files with 10 additions and 2 deletions

View File

@ -8,7 +8,8 @@ Unreleased
- Fix a bug that caused callable objects with ``__getattr__``, like
:class:`~unittest.mock.Mock` to be treated as a
:func:`contextfunction`. :issue:`1145`
- Update ``wordcount`` filter to trigger :class:`Undefined` methods
by wrapping the input in :func:`soft_unicode`. :pr:`1160`
Version 2.11.1

View File

@ -761,7 +761,7 @@ def do_wordwrap(
def do_wordcount(s):
"""Count the words in that string."""
return len(_word_re.findall(s))
return len(_word_re.findall(soft_unicode(s)))
def do_int(value, default=0, base=10):

View File

@ -6,6 +6,8 @@ import pytest
from jinja2 import Environment
from jinja2 import Markup
from jinja2 import StrictUndefined
from jinja2 import UndefinedError
from jinja2._compat import implements_to_string
from jinja2._compat import text_type
@ -369,6 +371,11 @@ class TestFilter(object):
tmpl = env.from_string('{{ "foo bar baz"|wordcount }}')
assert tmpl.render() == "3"
strict_env = Environment(undefined=StrictUndefined)
t = strict_env.from_string("{{ s|wordcount }}")
with pytest.raises(UndefinedError):
t.render()
def test_block(self, env):
tmpl = env.from_string("{% filter lower|escape %}<HEHE>{% endfilter %}")
assert tmpl.render() == "&lt;hehe&gt;"