diff --git a/tests/test_parse.py b/tests/test_parse.py index 79c69de..72eb22d 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -2,7 +2,15 @@ # Copyright 2022 Jookia from hypothesis import assume, given -from hypothesis.strategies import booleans, composite, lists, one_of, text, sampled_from +from hypothesis.strategies import ( + booleans, + composite, + integers, + lists, + one_of, + text, + sampled_from, +) from src import tokenize from src import parse @@ -206,6 +214,19 @@ return [] +# Generate text with invalid content tokens +# We expect the following behaviour: +# - Error if a content token is not a SyntaxType.TOKEN +@composite +def draw_syntax_text_invalid_invalidcontent(draw): + (tokens, _) = draw(draw_syntax_text_valid()) + token = draw(draw_syntax_random()) + assume(token.type != parse.SyntaxType.TOKEN) + pos = draw(integers(min_value=1, max_value=(len(tokens) - 1))) + new_tokens = tokens[0:pos] + [token] + tokens[pos:] + return new_tokens + + # Generate text without EndText # We expect the following behaviour: # - Error if there is no EndText node at all @@ -220,13 +241,14 @@ def draw_syntax_text_invalid(draw): strategies = [ draw_syntax_text_invalid_nostarttext(), + draw_syntax_text_invalid_invalidcontent(), draw_syntax_text_invalid_noendtext(), ] return draw(one_of(strategies)) # Test that parse_text errors in invalid cases -@given(one_of(draw_syntax_text_invalid())) +@given(draw_syntax_text_invalid()) def test_parse_text_invalid(test_data): tokens = test_data stream = parse.SyntaxStream(tokens)