Newer
Older
NewLang / tests / parse / test_parse.py
# 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 (
    clear_notes,
    ParseErrorException,
    parse,
    parse_file,
)
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 = clear_notes(stream, context)
        stream2 = TokenStream(cleared)
        result = 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