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')
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)
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, )
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
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)), "")
def test_that_floating_point_does_not_recognize_number_without_rational_part(): with pytest.raises(ParsingFailed): run_parser(floating_point(), '.e1')
def test_if_floating_point_recognizes_float_with_e_notation(): assert run_parser(floating_point(), '1e1').value == 1e1
def test_if_floating_point_recognizes_custom_delimiters(): assert run_parser(floating_point(delimiter=','), '123,12').value == 123.12
def test_if_floating_point_parses_number_without_rational_part(): assert run_parser(floating_point(), '1.').value == 1.
def test_if_floating_point_parses_number_with_one_point_in_the_middle(): assert run_parser(floating_point(), '1.1').value == 1.1
def test_if_integer_parses_plus_prefix(): assert run_parser(integer(), '+132').value == 132
def test_json_bool_detects_false(): assert not run_parser(json_bool(), 'false').value
def test_json_bool_detects_true(): assert run_parser(json_bool(), 'true').value
def fixture(*args, **kwargs): return run_parser(*args, stream_implementation=request.param, **kwargs)
def test_if_integer_parses_negative_numbers(): assert run_parser(integer(), '-987').value == -987
def test_json_string_parses_abc_as_intended(): assert run_parser(json_string(), '"abc"').value == "abc"
def test_if_floating_point_parses_simple_integer(): assert run_parser(floating_point(), '1').value == float(1)
def test_json_null_detects_null(): assert run_parser(json_null(), 'null').value is None
def test_if_floating_point_parses_number_without_integer_part(): assert run_parser(floating_point(), '.1').value == .1
def test_json_null_fails_on_other_strings(): with pytest.raises(ParsingFailed): run_parser(json_null(), 'abcd')
def test_if_floating_point_recognizes_one_sign_before_number(): assert run_parser(floating_point(), '+1.1').value == +1.1
def test_json_list_parses_empty_list_with_5_spaces(): assert run_parser(json_list(), '[ ]').value == []
def test_if_floating_point_recognizes_custom_delimiters_without_integer_part(): assert run_parser(floating_point(delimiter=','), '-,2').value == -.2
def test_json_list_parses_list_with_one_int_in_it(): assert run_parser(json_list(), '[1]').value == [1]
def test_if_integer_parses_1_digit(): assert run_parser(integer(), '1').value == 1
def test_json_list_parses_a_list_of_2_ints(): assert run_parser(json_list(), '[1,2]').value == [1, 2]
def test_if_integer_parses_2_digits(): assert run_parser(integer(), '42').value == 42
def test_json_list_parses_list_including_spaces(): assert run_parser(json_list(), '[1, 2 ,3]').value == [1, 2, 3]