def test_that_end_of_file_parser_parsers_multiple_times(n): parser = reduce( lambda accu, _: chain(accu, end_of_file()), range(0, n), unit(True), ) assert run_parser(chain(parser, unit(True)), "")
def test_choice_can_be_chained_1000_times(runner): c = choice( literal('a'), literal('b'), ) p = unit('') for i in range(0, 1000): p = bind( p, lambda x: c, ) assert runner(p, 'a' * 999 + 'b').value == 'b'
def test_that_end_of_file_parser_does_only_accept_empty_input(data): if data: with pytest.raises(ParsingFailed): run_parser( end_of_file(), data, ) else: assert run_parser( chain(end_of_file(), unit(True)), data, )
def wrapper(document): parser = unit(True) for character in document: parser = chain(parser, literal(character)) return parser
def test_that_unit_parser_returns_complete_input_string_as_not_consumed( text, runner, ): parser = unit(True) assert runner(parser, text).remaining_input == text
def test_that_unit_returns_char_given_to_unit(runner, char, text): assert runner(unit(char), text).value == char
def test_that_end_of_file_parser_accepts_empty_input(): assert run_parser( chain(end_of_file(), unit(True)), "", )