summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTakuto Ikuta <tikuta@google.com>2021-05-26 17:09:33 +0900
committerDavid Lord <davidism@gmail.com>2021-08-09 10:58:24 -0700
commit4c703ec44dc74b25ba4f1fb7b87bf9106313ffcf (patch)
treebfc87bd8ed3e8c04f3efe3c755c205f7c2a86665 /tests
parent02071b3e5933560f070e3a898f8aa82622d2001e (diff)
downloadjinja2-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.py28
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