diff options
author | Takuto Ikuta <tikuta@google.com> | 2021-05-26 17:09:33 +0900 |
---|---|---|
committer | David Lord <davidism@gmail.com> | 2021-08-09 10:58:24 -0700 |
commit | 4c703ec44dc74b25ba4f1fb7b87bf9106313ffcf (patch) | |
tree | bfc87bd8ed3e8c04f3efe3c755c205f7c2a86665 /tests | |
parent | 02071b3e5933560f070e3a898f8aa82622d2001e (diff) | |
download | jinja2-4c703ec44dc74b25ba4f1fb7b87bf9106313ffcf.tar.gz |
make compile_templates deterministic
Python3 doesn't keep insertion order for set(), so this sorts some
places for deterministic output for compiled template.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_compile.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/test_compile.py b/tests/test_compile.py new file mode 100644 index 0000000..42a773f --- /dev/null +++ b/tests/test_compile.py @@ -0,0 +1,28 @@ +import os +import re + +from jinja2.environment import Environment +from jinja2.loaders import DictLoader + + +def test_filters_deterministic(tmp_path): + src = "".join(f"{{{{ {i}|filter{i} }}}}" for i in range(10)) + env = Environment(loader=DictLoader({"foo": src})) + env.filters.update(dict.fromkeys((f"filter{i}" for i in range(10)), lambda: None)) + env.compile_templates(tmp_path, zip=None) + name = os.listdir(tmp_path)[0] + content = (tmp_path / name).read_text("utf8") + expect = [f"filters['filter{i}']" for i in range(10)] + found = re.findall(r"filters\['filter\d']", content) + assert found == expect + + +def test_import_as_with_context_deterministic(tmp_path): + src = "\n".join(f'{{% import "bar" as bar{i} with context %}}' for i in range(10)) + env = Environment(loader=DictLoader({"foo": src})) + env.compile_templates(tmp_path, zip=None) + name = os.listdir(tmp_path)[0] + content = (tmp_path / name).read_text("utf8") + expect = [f"'bar{i}': " for i in range(10)] + found = re.findall(r"'bar\d': ", content)[:10] + assert found == expect |