]> git.ipfire.org Git - thirdparty/jinja.git/commitdiff
test compares random filter to random call with same seed
authorDavid Lord <davidism@gmail.com>
Wed, 5 Jul 2017 18:09:24 +0000 (11:09 -0700)
committerDavid Lord <davidism@gmail.com>
Wed, 5 Jul 2017 18:09:24 +0000 (11:09 -0700)
tests/test_filters.py

index 30e7ca55582578bad4ad43ca00d93e7fdb84b053..894ec29c4b4db39280ee300f1463128900e91e8b 100644 (file)
@@ -183,17 +183,21 @@ class TestFilter(object):
         data = list(range(1000))
         assert tmpl.render(data=data) == pformat(data)
 
-    def test_random1(self, env):
-        tmpl = env.from_string('''{{ seq|random }}''')
-        seq = list(range(100))
-        for _ in range(10):
-            assert int(tmpl.render(seq=seq)) in seq
-
-    def test_random2(self, env, monkeypatch):
-        monkeypatch.setattr(random, 'choice', lambda seq: seq[0])
-        tmpl = env.from_string('''{{ range(100)|random }}''')
-        monkeypatch.setattr(random, 'choice', lambda seq: seq[2])
-        assert tmpl.render() == '2'
+    def test_random(self, env, request):
+        # restore the random state when the test ends
+        state = random.getstate()
+        request.addfinalizer(lambda: random.setstate(state))
+        # generate the random values from a known seed
+        random.seed('jinja', version=2)
+        expected = [random.choice('1234567890') for _ in range(10)]
+
+        # check that the random sequence is generated again by a template
+        # ensures that filter result is not constant folded
+        random.seed('jinja', version=2)
+        t = env.from_string('{{ "1234567890"|random }}')
+
+        for value in expected:
+            assert t.render() == value
 
     def test_reverse(self, env):
         tmpl = env.from_string('{{ "foobar"|reverse|join }}|'