示例#1
0
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)), "")
示例#2
0
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'
示例#3
0
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,
        )
示例#4
0
 def wrapper(document):
     parser = unit(True)
     for character in document:
         parser = chain(parser, literal(character))
     return parser
示例#5
0
def test_that_unit_parser_returns_complete_input_string_as_not_consumed(
        text,
        runner,
):
    parser = unit(True)
    assert runner(parser, text).remaining_input == text
示例#6
0
def test_that_unit_returns_char_given_to_unit(runner, char, text):
    assert runner(unit(char), text).value == char
示例#7
0
def test_that_end_of_file_parser_accepts_empty_input():
    assert run_parser(
        chain(end_of_file(), unit(True)),
        "",
    )