From: David Lord Date: Wed, 5 Jul 2017 18:09:24 +0000 (-0700) Subject: test compares random filter to random call with same seed X-Git-Tag: 2.10~21^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c8636fed17f08fd052ec25c3607f3743812eb049;p=thirdparty%2Fjinja.git test compares random filter to random call with same seed --- diff --git a/tests/test_filters.py b/tests/test_filters.py index 30e7ca55..894ec29c 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -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 }}|'