Beispiel #1
0
def test_odd_and_even_neither_validate_2_nor_5():
    p = (odd & even).validates(
        fmap(lambda xs: int(''.join(xs)), many1(character())))
    with pytest.raises(ParsingFailed):
        run_parser(p, '2')
    with pytest.raises(ParsingFailed):
        run_parser(p, '5')
Beispiel #2
0
def test_failure_of_choice_of_2_literals_should_contain_both_literals():
    p = choice(
        literal('first_literal'),
        literal('second_literal'),
    )
    with pytest.raises(ParsingFailed) as err:
        run_parser(p, 'xxxxxxxxxxxxxxxxxxx')
    assert 'first_literal' in str(err.value)
    assert 'second_literal' in str(err.value)
Beispiel #3
0
def test_that_error_message_respects_ordering_of_failing_choices():
    p = choice(
        literal('first'),
        literal('second'),
    )
    with pytest.raises(ParsingFailed) as err:
        run_parser(p, 'xxxxxxxxxxxxxx')
    error_message = str(err.value)
    assert 'second' in error_message.split('first')[1]
    assert 'first' in error_message.split('second')[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,
        )
Beispiel #5
0
def test_failure_of_choice_of_3_literals_should_contain_all_3_literal():
    p = choice(
        literal('first'),
        choice(
            literal('second'),
            literal('third')
        )
    )
    with pytest.raises(ParsingFailed) as err:
        run_parser(p, 'xxxxxxxxxxxxxxxx')
    error_message = str(err.value)
    assert 'first' in error_message
    assert 'second' in error_message
    assert 'third' in error_message
Beispiel #6
0
def test_that_error_message_order_is_preserved_with_3_choices():
    p = choice(
        literal('first'),
        choice(
            literal('second'),
            literal('third'),
        )
    )
    with pytest.raises(ParsingFailed) as err:
        run_parser(p, 'xxxxxxxxxxxxxx')
    error_message = str(err.value)
    assert 'second' in error_message.split('first')[1]
    assert 'third' in error_message.split('first')[1]
    assert 'first' in error_message.split('second')[0]
    assert 'third' in error_message.split('second')[1]
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)), "")
Beispiel #8
0
def test_that_floating_point_does_not_recognize_number_without_rational_part():
    with pytest.raises(ParsingFailed):
        run_parser(floating_point(), '.e1')
Beispiel #9
0
def test_if_floating_point_recognizes_float_with_e_notation():
    assert run_parser(floating_point(), '1e1').value == 1e1
Beispiel #10
0
def test_if_floating_point_recognizes_custom_delimiters():
    assert run_parser(floating_point(delimiter=','), '123,12').value == 123.12
Beispiel #11
0
def test_if_floating_point_parses_number_without_rational_part():
    assert run_parser(floating_point(), '1.').value == 1.
Beispiel #12
0
def test_if_floating_point_parses_number_with_one_point_in_the_middle():
    assert run_parser(floating_point(), '1.1').value == 1.1
Beispiel #13
0
def test_if_integer_parses_plus_prefix():
    assert run_parser(integer(), '+132').value == 132
Beispiel #14
0
def test_json_bool_detects_false():
    assert not run_parser(json_bool(), 'false').value
Beispiel #15
0
def test_json_bool_detects_true():
    assert run_parser(json_bool(), 'true').value
Beispiel #16
0
 def fixture(*args, **kwargs):
     return run_parser(*args, stream_implementation=request.param, **kwargs)
Beispiel #17
0
def test_if_integer_parses_negative_numbers():
    assert run_parser(integer(), '-987').value == -987
Beispiel #18
0
def test_json_string_parses_abc_as_intended():
    assert run_parser(json_string(), '"abc"').value == "abc"
Beispiel #19
0
def test_if_floating_point_parses_simple_integer():
    assert run_parser(floating_point(), '1').value == float(1)
Beispiel #20
0
def test_json_null_detects_null():
    assert run_parser(json_null(), 'null').value is None
Beispiel #21
0
def test_if_floating_point_parses_number_without_integer_part():
    assert run_parser(floating_point(), '.1').value == .1
Beispiel #22
0
def test_json_null_fails_on_other_strings():
    with pytest.raises(ParsingFailed):
        run_parser(json_null(), 'abcd')
Beispiel #23
0
def test_if_floating_point_recognizes_one_sign_before_number():
    assert run_parser(floating_point(), '+1.1').value == +1.1
Beispiel #24
0
def test_json_list_parses_empty_list_with_5_spaces():
    assert run_parser(json_list(), '[     ]').value == []
Beispiel #25
0
def test_if_floating_point_recognizes_custom_delimiters_without_integer_part():
    assert run_parser(floating_point(delimiter=','), '-,2').value == -.2
Beispiel #26
0
def test_json_list_parses_list_with_one_int_in_it():
    assert run_parser(json_list(), '[1]').value == [1]
Beispiel #27
0
def test_if_integer_parses_1_digit():
    assert run_parser(integer(), '1').value == 1
Beispiel #28
0
def test_json_list_parses_a_list_of_2_ints():
    assert run_parser(json_list(), '[1,2]').value == [1, 2]
Beispiel #29
0
def test_if_integer_parses_2_digits():
    assert run_parser(integer(), '42').value == 42
Beispiel #30
0
def test_json_list_parses_list_including_spaces():
    assert run_parser(json_list(), '[1,  2 ,3]').value == [1, 2, 3]