diff --git a/tests/test_parse.py b/tests/test_parse.py index c5710c6..cbc5ec1 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -125,12 +125,28 @@ return "".join(draw(lists(sampled_from(lexer_whitespace), min_size=1))) +# Draws multiple words made of identifiers and reserved words +@composite +def draw_word_salad(draw, exclude_words): + reserved = reserved_words.copy() + for exclude in exclude_words: + reserved.remove(exclude) + strategies = [ + draw_identifier(), + sampled_from(reserved), + ] + words = draw(lists(one_of(strategies))) + salad = "" + for word in words: + space = draw(draw_whitespace()) + salad += word + space + return salad + + # Generates a Text token @composite def draw_token_text(draw): - value = draw(text()) - text_tokens = split_by(value, lexer_whitespace) - assume("StartText" not in text_tokens and "EndText" not in text_tokens) + value = draw(draw_word_salad(["StartText", "EndText"])) space1 = draw(draw_whitespace()) space2 = draw(draw_whitespace()) code = "StartText" + space1 + value + space2 + "EndText" @@ -165,9 +181,7 @@ # Generates a note token @composite def draw_token_note(draw): - value = draw(text()) - note_tokens = split_by(value, lexer_whitespace) - assume("StartNote" not in note_tokens and "EndNote" not in note_tokens) + value = draw(draw_word_salad(["StartNote", "EndNote"])) space1 = draw(draw_whitespace()) space2 = draw(draw_whitespace()) code = "StartNote" + space1 + value + space2 + "EndNote"