# SPDX-License-Identifier: LGPL-2.1-only # Copyright 2022 Jookia <contact@jookia.org> from hypothesis import given from hypothesis.strategies import lists from src.parse import ( NoteSkipper, ParseErrorException, Parser, parse, ) from src.token import TokenStream from tests.test_token import draw_token_random from tests.parse.test_error import draw_parse_context # Tests the parser wrapper works correctly # We expect the following behaviour: # - Notes to be removed from the tokens # - The remaining tokens to be parsed as a file @given(lists(draw_token_random()), draw_parse_context()) def test_parse_fuzz(tokens, context): result = None parsed = None try: stream = TokenStream(tokens.copy()) cleared = NoteSkipper().clear_notes(stream, context) stream2 = TokenStream(cleared) result = Parser().parse_file(stream2, context) except ParseErrorException as e: result = e try: parsed = parse(tokens.copy(), context) except ParseErrorException as e: parsed = e assert parsed == result