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 }}|'