From 58a40fdf487b303f7466c93d84a4cd8a5665aa24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Wed, 27 Apr 2022 23:21:28 -0700 Subject: [PATCH] fix(compliance): pull in spec test suite and fix issues (#40) This commit includes a whole bunch of fixes, some of which are significant changes to the parser and some related functionality. But I consider all changes to be bugfixes because they were compliance failures. --- README.md | 26 ++++ src/document.rs | 24 ++- src/entry.rs | 10 +- src/fmt.rs | 28 ++-- src/identifier.rs | 5 +- src/lib.rs | 27 ++++ src/node.rs | 34 +++-- src/parser.rs | 73 ++++++--- src/value.rs | 35 ++++- tests/README.md | 61 ++++++++ tests/compliance.rs | 144 ++++++++++++++++++ .../expected_kdl/_negative_exponent.kdl | 1 + .../expected_kdl/_parse_all_arg_types.kdl | 1 + .../expected_kdl/_positive_exponent.kdl | 1 + .../expected_kdl/_sci_notation_large.kdl | 1 + .../expected_kdl/_sci_notation_small.kdl | 1 + .../expected_kdl/_underscore_in_exponent.kdl | 1 + tests/test_cases/expected_kdl/all_escapes.kdl | 1 + .../expected_kdl/all_node_fields.kdl | 3 + .../expected_kdl/arg_and_prop_same_name.kdl | 1 + .../expected_kdl/arg_false_type.kdl | 1 + .../expected_kdl/arg_float_type.kdl | 1 + .../test_cases/expected_kdl/arg_hex_type.kdl | 1 + .../test_cases/expected_kdl/arg_null_type.kdl | 1 + .../expected_kdl/arg_raw_string_type.kdl | 1 + .../expected_kdl/arg_string_type.kdl | 1 + .../test_cases/expected_kdl/arg_true_type.kdl | 1 + tests/test_cases/expected_kdl/arg_type.kdl | 1 + .../test_cases/expected_kdl/arg_zero_type.kdl | 1 + .../asterisk_in_block_comment.kdl | 1 + tests/test_cases/expected_kdl/bare_emoji.kdl | 1 + tests/test_cases/expected_kdl/binary.kdl | 1 + .../binary_trailing_underscore.kdl | 1 + .../expected_kdl/binary_underscore.kdl | 1 + .../expected_kdl/blank_arg_type.kdl | 1 + .../expected_kdl/blank_node_type.kdl | 1 + .../expected_kdl/blank_prop_type.kdl | 1 + .../test_cases/expected_kdl/block_comment.kdl | 1 + .../expected_kdl/block_comment_after_node.kdl | 1 + .../block_comment_before_node.kdl | 1 + .../block_comment_before_node_no_space.kdl | 1 + .../expected_kdl/block_comment_newline.kdl | 1 + tests/test_cases/expected_kdl/boolean_arg.kdl | 1 + .../test_cases/expected_kdl/boolean_prop.kdl | 1 + .../test_cases/expected_kdl/commented_arg.kdl | 1 + .../expected_kdl/commented_child.kdl | 1 + .../expected_kdl/commented_line.kdl | 1 + .../expected_kdl/commented_node.kdl | 1 + .../expected_kdl/commented_prop.kdl | 1 + .../expected_kdl/crlf_between_nodes.kdl | 2 + tests/test_cases/expected_kdl/emoji.kdl | 1 + tests/test_cases/expected_kdl/empty.kdl | 1 + tests/test_cases/expected_kdl/empty_child.kdl | 1 + .../empty_child_different_lines.kdl | 1 + .../expected_kdl/empty_child_same_line.kdl | 1 + .../expected_kdl/empty_child_whitespace.kdl | 1 + .../expected_kdl/empty_quoted_node_id.kdl | 1 + .../expected_kdl/empty_quoted_prop_key.kdl | 1 + .../expected_kdl/empty_string_arg.kdl | 1 + .../expected_kdl/esc_newline_in_string.kdl | 1 + .../expected_kdl/esc_unicode_in_string.kdl | 1 + tests/test_cases/expected_kdl/escline.kdl | 1 + .../expected_kdl/escline_line_comment.kdl | 1 + .../test_cases/expected_kdl/escline_node.kdl | 2 + .../expected_kdl/false_prefix_in_bare_id.kdl | 1 + .../expected_kdl/false_prefix_in_prop_key.kdl | 1 + tests/test_cases/expected_kdl/hex.kdl | 1 + tests/test_cases/expected_kdl/hex_int.kdl | 1 + .../expected_kdl/hex_int_underscores.kdl | 1 + .../expected_kdl/hex_leading_zero.kdl | 1 + .../expected_kdl/int_multiple_underscore.kdl | 1 + .../expected_kdl/just_block_comment.kdl | 1 + tests/test_cases/expected_kdl/just_child.kdl | 3 + .../test_cases/expected_kdl/just_newline.kdl | 1 + .../test_cases/expected_kdl/just_node_id.kdl | 1 + tests/test_cases/expected_kdl/just_space.kdl | 1 + .../expected_kdl/leading_newline.kdl | 1 + .../expected_kdl/leading_zero_binary.kdl | 1 + .../expected_kdl/leading_zero_int.kdl | 1 + .../expected_kdl/leading_zero_oct.kdl | 1 + .../expected_kdl/multiline_comment.kdl | 1 + .../expected_kdl/multiline_nodes.kdl | 1 + .../expected_kdl/multiline_string.kdl | 1 + .../expected_kdl/negative_float.kdl | 1 + .../test_cases/expected_kdl/negative_int.kdl | 1 + .../expected_kdl/nested_block_comment.kdl | 1 + .../expected_kdl/nested_children.kdl | 5 + .../expected_kdl/nested_comments.kdl | 1 + .../nested_multiline_block_comment.kdl | 1 + .../expected_kdl/newline_between_nodes.kdl | 2 + .../newlines_in_block_comment.kdl | 1 + .../expected_kdl/no_decimal_exponent.kdl | 1 + tests/test_cases/expected_kdl/node_false.kdl | 1 + tests/test_cases/expected_kdl/node_true.kdl | 1 + tests/test_cases/expected_kdl/node_type.kdl | 1 + tests/test_cases/expected_kdl/null_arg.kdl | 1 + .../expected_kdl/null_prefix_in_bare_id.kdl | 1 + .../expected_kdl/null_prefix_in_prop_key.kdl | 1 + tests/test_cases/expected_kdl/null_prop.kdl | 1 + tests/test_cases/expected_kdl/numeric_arg.kdl | 1 + .../test_cases/expected_kdl/numeric_prop.kdl | 1 + tests/test_cases/expected_kdl/octal.kdl | 1 + tests/test_cases/expected_kdl/only_cr.kdl | 1 + .../expected_kdl/only_line_comment.kdl | 1 + .../expected_kdl/only_line_comment_crlf.kdl | 1 + .../only_line_comment_newline.kdl | 1 + .../test_cases/expected_kdl/positive_int.kdl | 1 + .../expected_kdl/preserve_duplicate_nodes.kdl | 2 + .../expected_kdl/preserve_node_order.kdl | 3 + .../expected_kdl/prop_false_type.kdl | 1 + .../expected_kdl/prop_float_type.kdl | 1 + .../test_cases/expected_kdl/prop_hex_type.kdl | 1 + .../expected_kdl/prop_null_type.kdl | 1 + .../expected_kdl/prop_raw_string_type.kdl | 1 + .../expected_kdl/prop_string_type.kdl | 1 + .../expected_kdl/prop_true_type.kdl | 1 + tests/test_cases/expected_kdl/prop_type.kdl | 1 + .../expected_kdl/prop_zero_type.kdl | 1 + .../expected_kdl/quoted_arg_type.kdl | 1 + .../expected_kdl/quoted_node_name.kdl | 1 + .../expected_kdl/quoted_node_type.kdl | 1 + .../expected_kdl/quoted_numeric.kdl | 1 + .../expected_kdl/quoted_prop_name.kdl | 1 + .../expected_kdl/quoted_prop_type.kdl | 1 + tests/test_cases/expected_kdl/r_node.kdl | 1 + .../test_cases/expected_kdl/raw_arg_type.kdl | 1 + .../test_cases/expected_kdl/raw_node_name.kdl | 1 + .../test_cases/expected_kdl/raw_node_type.kdl | 1 + .../test_cases/expected_kdl/raw_prop_type.kdl | 1 + .../expected_kdl/raw_string_arg.kdl | 3 + .../expected_kdl/raw_string_backslash.kdl | 1 + .../expected_kdl/raw_string_hash_no_esc.kdl | 1 + .../raw_string_just_backslash.kdl | 1 + .../expected_kdl/raw_string_just_quote.kdl | 1 + .../expected_kdl/raw_string_multiple_hash.kdl | 1 + .../expected_kdl/raw_string_newline.kdl | 1 + .../expected_kdl/raw_string_prop.kdl | 3 + .../expected_kdl/raw_string_quote.kdl | 1 + .../test_cases/expected_kdl/repeated_arg.kdl | 1 + .../test_cases/expected_kdl/repeated_prop.kdl | 1 + tests/test_cases/expected_kdl/same_args.kdl | 1 + .../expected_kdl/same_name_nodes.kdl | 2 + .../expected_kdl/semicolon_after_child.kdl | 3 + .../expected_kdl/semicolon_in_child.kdl | 3 + .../expected_kdl/semicolon_separated.kdl | 2 + .../semicolon_separated_nodes.kdl | 2 + .../expected_kdl/semicolon_terminated.kdl | 1 + tests/test_cases/expected_kdl/single_arg.kdl | 1 + tests/test_cases/expected_kdl/single_prop.kdl | 1 + .../slashdash_arg_after_newline_esc.kdl | 1 + .../slashdash_arg_before_newline_esc.kdl | 1 + .../expected_kdl/slashdash_child.kdl | 1 + .../expected_kdl/slashdash_empty_child.kdl | 1 + .../expected_kdl/slashdash_full_node.kdl | 1 + .../expected_kdl/slashdash_in_slashdash.kdl | 1 + .../slashdash_negative_number.kdl | 1 + .../expected_kdl/slashdash_node_in_child.kdl | 1 + .../slashdash_node_with_child.kdl | 1 + .../expected_kdl/slashdash_only_node.kdl | 1 + .../slashdash_only_node_with_space.kdl | 1 + .../expected_kdl/slashdash_prop.kdl | 1 + .../expected_kdl/slashdash_raw_prop_key.kdl | 1 + .../expected_kdl/slashdash_repeated_prop.kdl | 1 + tests/test_cases/expected_kdl/string_arg.kdl | 1 + tests/test_cases/expected_kdl/string_prop.kdl | 1 + tests/test_cases/expected_kdl/tab_space.kdl | 1 + .../test_cases/expected_kdl/trailing_crlf.kdl | 1 + .../expected_kdl/trailing_underscore_hex.kdl | 1 + .../trailing_underscore_octal.kdl | 1 + .../expected_kdl/true_prefix_in_bare_id.kdl | 1 + .../expected_kdl/true_prefix_in_prop_key.kdl | 1 + tests/test_cases/expected_kdl/two_nodes.kdl | 2 + .../expected_kdl/underscore_in_float.kdl | 1 + .../expected_kdl/underscore_in_fraction.kdl | 1 + .../expected_kdl/underscore_in_int.kdl | 1 + .../expected_kdl/underscore_in_octal.kdl | 1 + .../unusual_bare_id_chars_in_quoted_id.kdl | 1 + .../expected_kdl/unusual_chars_in_bare_id.kdl | 1 + tests/test_cases/expected_kdl/zero_arg.kdl | 1 + tests/test_cases/expected_kdl/zero_float.kdl | 1 + tests/test_cases/expected_kdl/zero_int.kdl | 1 + tests/test_cases/input/all_escapes.kdl | 1 + tests/test_cases/input/all_node_fields.kdl | 3 + .../input/arg_and_prop_same_name.kdl | 1 + tests/test_cases/input/arg_false_type.kdl | 1 + tests/test_cases/input/arg_float_type.kdl | 1 + tests/test_cases/input/arg_hex_type.kdl | 1 + tests/test_cases/input/arg_null_type.kdl | 1 + .../test_cases/input/arg_raw_string_type.kdl | 1 + tests/test_cases/input/arg_string_type.kdl | 1 + tests/test_cases/input/arg_true_type.kdl | 1 + tests/test_cases/input/arg_type.kdl | 1 + tests/test_cases/input/arg_zero_type.kdl | 1 + .../input/asterisk_in_block_comment.kdl | 1 + .../test_cases/input/backslash_in_bare_id.kdl | 1 + tests/test_cases/input/bare_arg.kdl | 1 + tests/test_cases/input/bare_emoji.kdl | 1 + tests/test_cases/input/binary.kdl | 1 + .../input/binary_trailing_underscore.kdl | 1 + tests/test_cases/input/binary_underscore.kdl | 1 + tests/test_cases/input/blank_arg_type.kdl | 1 + tests/test_cases/input/blank_node_type.kdl | 1 + tests/test_cases/input/blank_prop_type.kdl | 1 + tests/test_cases/input/block_comment.kdl | 1 + .../input/block_comment_after_node.kdl | 1 + .../input/block_comment_before_node.kdl | 1 + .../block_comment_before_node_no_space.kdl | 1 + .../input/block_comment_newline.kdl | 1 + tests/test_cases/input/boolean_arg.kdl | 1 + tests/test_cases/input/boolean_prop.kdl | 1 + .../test_cases/input/brackets_in_bare_id.kdl | 1 + .../test_cases/input/chevrons_in_bare_id.kdl | 1 + tests/test_cases/input/comma_in_bare_id.kdl | 1 + .../input/comment_after_arg_type.kdl | 1 + .../input/comment_after_node_type.kdl | 1 + .../input/comment_after_prop_type.kdl | 1 + .../test_cases/input/comment_in_arg_type.kdl | 1 + .../test_cases/input/comment_in_node_type.kdl | 1 + .../test_cases/input/comment_in_prop_type.kdl | 1 + tests/test_cases/input/commented_arg.kdl | 1 + tests/test_cases/input/commented_child.kdl | 3 + tests/test_cases/input/commented_line.kdl | 2 + tests/test_cases/input/commented_node.kdl | 2 + tests/test_cases/input/commented_prop.kdl | 1 + tests/test_cases/input/crlf_between_nodes.kdl | 2 + tests/test_cases/input/dash_dash.kdl | 1 + .../test_cases/input/dot_but_no_fraction.kdl | 1 + .../dot_but_no_fraction_before_exponent.kdl | 1 + tests/test_cases/input/dot_in_exponent.kdl | 1 + tests/test_cases/input/dot_zero.kdl | 1 + tests/test_cases/input/emoji.kdl | 1 + tests/test_cases/input/empty.kdl | 0 tests/test_cases/input/empty_arg_type.kdl | 1 + tests/test_cases/input/empty_child.kdl | 2 + .../input/empty_child_different_lines.kdl | 2 + .../input/empty_child_same_line.kdl | 1 + .../input/empty_child_whitespace.kdl | 3 + tests/test_cases/input/empty_node_type.kdl | 1 + tests/test_cases/input/empty_prop_type.kdl | 1 + .../test_cases/input/empty_quoted_node_id.kdl | 1 + .../input/empty_quoted_prop_key.kdl | 1 + tests/test_cases/input/empty_string_arg.kdl | 1 + .../input/esc_newline_in_string.kdl | 1 + .../input/esc_unicode_in_string.kdl | 1 + tests/test_cases/input/escline.kdl | 2 + .../test_cases/input/escline_comment_node.kdl | 3 + .../test_cases/input/escline_line_comment.kdl | 4 + tests/test_cases/input/escline_node.kdl | 2 + .../input/false_prefix_in_bare_id.kdl | 1 + .../input/false_prefix_in_prop_key.kdl | 1 + tests/test_cases/input/false_prop_key.kdl | 1 + tests/test_cases/input/hex.kdl | 1 + tests/test_cases/input/hex_int.kdl | 1 + .../test_cases/input/hex_int_underscores.kdl | 1 + tests/test_cases/input/hex_leading_zero.kdl | 1 + .../input/illegal_char_in_binary.kdl | 1 + .../test_cases/input/illegal_char_in_hex.kdl | 1 + .../input/illegal_char_in_octal.kdl | 1 + .../input/int_multiple_underscore.kdl | 1 + tests/test_cases/input/just_block_comment.kdl | 1 + tests/test_cases/input/just_child.kdl | 3 + tests/test_cases/input/just_newline.kdl | 1 + tests/test_cases/input/just_node_id.kdl | 1 + tests/test_cases/input/just_space.kdl | 1 + .../input/just_space_in_arg_type.kdl | 1 + .../input/just_space_in_node_type.kdl | 1 + .../input/just_space_in_prop_type.kdl | 1 + tests/test_cases/input/just_type_no_arg.kdl | 1 + .../test_cases/input/just_type_no_node_id.kdl | 1 + tests/test_cases/input/just_type_no_prop.kdl | 1 + tests/test_cases/input/leading_newline.kdl | 2 + .../test_cases/input/leading_zero_binary.kdl | 1 + tests/test_cases/input/leading_zero_int.kdl | 1 + tests/test_cases/input/leading_zero_oct.kdl | 1 + tests/test_cases/input/multiline_comment.kdl | 4 + tests/test_cases/input/multiline_nodes.kdl | 3 + tests/test_cases/input/multiline_string.kdl | 4 + .../input/multiple_dots_in_float.kdl | 1 + ...multiple_dots_in_float_before_exponent.kdl | 1 + .../test_cases/input/multiple_es_in_float.kdl | 1 + tests/test_cases/input/multiple_x_in_hex.kdl | 1 + tests/test_cases/input/negative_exponent.kdl | 1 + tests/test_cases/input/negative_float.kdl | 1 + tests/test_cases/input/negative_int.kdl | 1 + .../test_cases/input/nested_block_comment.kdl | 1 + tests/test_cases/input/nested_children.kdl | 5 + tests/test_cases/input/nested_comments.kdl | 1 + .../input/nested_multiline_block_comment.kdl | 6 + .../input/newline_between_nodes.kdl | 2 + .../input/newlines_in_block_comment.kdl | 3 + .../test_cases/input/no_decimal_exponent.kdl | 1 + tests/test_cases/input/no_digits_in_hex.kdl | 1 + tests/test_cases/input/node_false.kdl | 1 + tests/test_cases/input/node_true.kdl | 1 + tests/test_cases/input/node_type.kdl | 1 + tests/test_cases/input/null_arg.kdl | 1 + .../input/null_prefix_in_bare_id.kdl | 1 + .../input/null_prefix_in_prop_key.kdl | 1 + tests/test_cases/input/null_prop.kdl | 1 + tests/test_cases/input/null_prop_key.kdl | 1 + tests/test_cases/input/numeric_arg.kdl | 1 + tests/test_cases/input/numeric_prop.kdl | 1 + tests/test_cases/input/octal.kdl | 1 + tests/test_cases/input/only_cr.kdl | 2 + tests/test_cases/input/only_line_comment.kdl | 1 + .../input/only_line_comment_crlf.kdl | 1 + .../input/only_line_comment_newline.kdl | 1 + tests/test_cases/input/parens_in_bare_id.kdl | 1 + .../test_cases/input/parse_all_arg_types.kdl | 1 + tests/test_cases/input/positive_exponent.kdl | 1 + tests/test_cases/input/positive_int.kdl | 1 + .../input/preserve_duplicate_nodes.kdl | 2 + .../test_cases/input/preserve_node_order.kdl | 3 + tests/test_cases/input/prop_false_type.kdl | 1 + tests/test_cases/input/prop_float_type.kdl | 1 + tests/test_cases/input/prop_hex_type.kdl | 1 + tests/test_cases/input/prop_null_type.kdl | 1 + .../test_cases/input/prop_raw_string_type.kdl | 1 + tests/test_cases/input/prop_string_type.kdl | 1 + tests/test_cases/input/prop_true_type.kdl | 1 + tests/test_cases/input/prop_type.kdl | 1 + tests/test_cases/input/prop_zero_type.kdl | 1 + .../input/question_mark_at_start_of_int.kdl | 1 + .../input/question_mark_before_number.kdl | 1 + tests/test_cases/input/quote_in_bare_id.kdl | 1 + tests/test_cases/input/quoted_arg_type.kdl | 1 + tests/test_cases/input/quoted_node_name.kdl | 1 + tests/test_cases/input/quoted_node_type.kdl | 1 + tests/test_cases/input/quoted_numeric.kdl | 1 + tests/test_cases/input/quoted_prop_name.kdl | 1 + tests/test_cases/input/quoted_prop_type.kdl | 1 + tests/test_cases/input/r_node.kdl | 1 + tests/test_cases/input/raw_arg_type.kdl | 1 + tests/test_cases/input/raw_node_name.kdl | 1 + tests/test_cases/input/raw_node_type.kdl | 1 + tests/test_cases/input/raw_prop_type.kdl | 1 + tests/test_cases/input/raw_string_arg.kdl | 3 + .../test_cases/input/raw_string_backslash.kdl | 1 + .../input/raw_string_hash_no_esc.kdl | 1 + .../input/raw_string_just_backslash.kdl | 1 + .../input/raw_string_just_quote.kdl | 1 + .../input/raw_string_multiple_hash.kdl | 1 + tests/test_cases/input/raw_string_newline.kdl | 4 + tests/test_cases/input/raw_string_prop.kdl | 3 + tests/test_cases/input/raw_string_quote.kdl | 1 + tests/test_cases/input/repeated_arg.kdl | 1 + tests/test_cases/input/repeated_prop.kdl | 1 + tests/test_cases/input/same_args.kdl | 1 + tests/test_cases/input/same_name_nodes.kdl | 2 + tests/test_cases/input/sci_notation_large.kdl | 1 + tests/test_cases/input/sci_notation_small.kdl | 1 + .../input/semicolon_after_child.kdl | 3 + tests/test_cases/input/semicolon_in_child.kdl | 3 + .../test_cases/input/semicolon_separated.kdl | 1 + .../input/semicolon_separated_nodes.kdl | 1 + .../test_cases/input/semicolon_terminated.kdl | 1 + tests/test_cases/input/single_arg.kdl | 1 + tests/test_cases/input/single_prop.kdl | 1 + tests/test_cases/input/slash_in_bare_id.kdl | 1 + .../input/slashdash_arg_after_newline_esc.kdl | 2 + .../slashdash_arg_before_newline_esc.kdl | 2 + tests/test_cases/input/slashdash_child.kdl | 3 + .../input/slashdash_empty_child.kdl | 2 + .../test_cases/input/slashdash_full_node.kdl | 2 + .../input/slashdash_in_slashdash.kdl | 2 + .../input/slashdash_negative_number.kdl | 1 + .../input/slashdash_node_in_child.kdl | 3 + .../input/slashdash_node_with_child.kdl | 3 + .../test_cases/input/slashdash_only_node.kdl | 1 + .../input/slashdash_only_node_with_space.kdl | 1 + tests/test_cases/input/slashdash_prop.kdl | 1 + .../input/slashdash_raw_prop_key.kdl | 1 + .../input/slashdash_repeated_prop.kdl | 1 + .../test_cases/input/space_after_arg_type.kdl | 1 + .../input/space_after_node_type.kdl | 1 + .../input/space_after_prop_type.kdl | 1 + tests/test_cases/input/space_in_arg_type.kdl | 1 + tests/test_cases/input/space_in_node_type.kdl | 1 + tests/test_cases/input/space_in_prop_type.kdl | 1 + .../input/square_bracket_in_bare_id.kdl | 1 + tests/test_cases/input/string_arg.kdl | 1 + tests/test_cases/input/string_prop.kdl | 1 + tests/test_cases/input/tab_space.kdl | 1 + tests/test_cases/input/trailing_crlf.kdl | 1 + .../input/trailing_underscore_hex.kdl | 1 + .../input/trailing_underscore_octal.kdl | 1 + .../input/true_prefix_in_bare_id.kdl | 1 + .../input/true_prefix_in_prop_key.kdl | 1 + tests/test_cases/input/true_prop_key.kdl | 1 + tests/test_cases/input/two_nodes.kdl | 2 + .../test_cases/input/type_before_prop_key.kdl | 1 + .../input/unbalanced_raw_hashes.kdl | 1 + .../input/underscore_at_start_of_fraction.kdl | 1 + .../input/underscore_at_start_of_hex.kdl | 1 + .../input/underscore_at_start_of_int.kdl | 1 + .../input/underscore_before_number.kdl | 1 + .../input/underscore_in_exponent.kdl | 1 + .../test_cases/input/underscore_in_float.kdl | 1 + .../input/underscore_in_fraction.kdl | 1 + tests/test_cases/input/underscore_in_int.kdl | 1 + .../test_cases/input/underscore_in_octal.kdl | 1 + .../unusual_bare_id_chars_in_quoted_id.kdl | 1 + .../input/unusual_chars_in_bare_id.kdl | 1 + tests/test_cases/input/zero_arg.kdl | 1 + tests/test_cases/input/zero_float.kdl | 1 + tests/test_cases/input/zero_int.kdl | 1 + 406 files changed, 897 insertions(+), 59 deletions(-) create mode 100644 tests/README.md create mode 100644 tests/compliance.rs create mode 100644 tests/test_cases/expected_kdl/_negative_exponent.kdl create mode 100644 tests/test_cases/expected_kdl/_parse_all_arg_types.kdl create mode 100644 tests/test_cases/expected_kdl/_positive_exponent.kdl create mode 100644 tests/test_cases/expected_kdl/_sci_notation_large.kdl create mode 100644 tests/test_cases/expected_kdl/_sci_notation_small.kdl create mode 100644 tests/test_cases/expected_kdl/_underscore_in_exponent.kdl create mode 100644 tests/test_cases/expected_kdl/all_escapes.kdl create mode 100644 tests/test_cases/expected_kdl/all_node_fields.kdl create mode 100644 tests/test_cases/expected_kdl/arg_and_prop_same_name.kdl create mode 100644 tests/test_cases/expected_kdl/arg_false_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_float_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_hex_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_null_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_raw_string_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_string_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_true_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_type.kdl create mode 100644 tests/test_cases/expected_kdl/arg_zero_type.kdl create mode 100644 tests/test_cases/expected_kdl/asterisk_in_block_comment.kdl create mode 100644 tests/test_cases/expected_kdl/bare_emoji.kdl create mode 100644 tests/test_cases/expected_kdl/binary.kdl create mode 100644 tests/test_cases/expected_kdl/binary_trailing_underscore.kdl create mode 100644 tests/test_cases/expected_kdl/binary_underscore.kdl create mode 100644 tests/test_cases/expected_kdl/blank_arg_type.kdl create mode 100644 tests/test_cases/expected_kdl/blank_node_type.kdl create mode 100644 tests/test_cases/expected_kdl/blank_prop_type.kdl create mode 100644 tests/test_cases/expected_kdl/block_comment.kdl create mode 100644 tests/test_cases/expected_kdl/block_comment_after_node.kdl create mode 100644 tests/test_cases/expected_kdl/block_comment_before_node.kdl create mode 100644 tests/test_cases/expected_kdl/block_comment_before_node_no_space.kdl create mode 100644 tests/test_cases/expected_kdl/block_comment_newline.kdl create mode 100644 tests/test_cases/expected_kdl/boolean_arg.kdl create mode 100644 tests/test_cases/expected_kdl/boolean_prop.kdl create mode 100644 tests/test_cases/expected_kdl/commented_arg.kdl create mode 100644 tests/test_cases/expected_kdl/commented_child.kdl create mode 100644 tests/test_cases/expected_kdl/commented_line.kdl create mode 100644 tests/test_cases/expected_kdl/commented_node.kdl create mode 100644 tests/test_cases/expected_kdl/commented_prop.kdl create mode 100644 tests/test_cases/expected_kdl/crlf_between_nodes.kdl create mode 100644 tests/test_cases/expected_kdl/emoji.kdl create mode 100644 tests/test_cases/expected_kdl/empty.kdl create mode 100644 tests/test_cases/expected_kdl/empty_child.kdl create mode 100644 tests/test_cases/expected_kdl/empty_child_different_lines.kdl create mode 100644 tests/test_cases/expected_kdl/empty_child_same_line.kdl create mode 100644 tests/test_cases/expected_kdl/empty_child_whitespace.kdl create mode 100644 tests/test_cases/expected_kdl/empty_quoted_node_id.kdl create mode 100644 tests/test_cases/expected_kdl/empty_quoted_prop_key.kdl create mode 100644 tests/test_cases/expected_kdl/empty_string_arg.kdl create mode 100644 tests/test_cases/expected_kdl/esc_newline_in_string.kdl create mode 100644 tests/test_cases/expected_kdl/esc_unicode_in_string.kdl create mode 100644 tests/test_cases/expected_kdl/escline.kdl create mode 100644 tests/test_cases/expected_kdl/escline_line_comment.kdl create mode 100644 tests/test_cases/expected_kdl/escline_node.kdl create mode 100644 tests/test_cases/expected_kdl/false_prefix_in_bare_id.kdl create mode 100644 tests/test_cases/expected_kdl/false_prefix_in_prop_key.kdl create mode 100644 tests/test_cases/expected_kdl/hex.kdl create mode 100644 tests/test_cases/expected_kdl/hex_int.kdl create mode 100644 tests/test_cases/expected_kdl/hex_int_underscores.kdl create mode 100644 tests/test_cases/expected_kdl/hex_leading_zero.kdl create mode 100644 tests/test_cases/expected_kdl/int_multiple_underscore.kdl create mode 100644 tests/test_cases/expected_kdl/just_block_comment.kdl create mode 100644 tests/test_cases/expected_kdl/just_child.kdl create mode 100644 tests/test_cases/expected_kdl/just_newline.kdl create mode 100644 tests/test_cases/expected_kdl/just_node_id.kdl create mode 100644 tests/test_cases/expected_kdl/just_space.kdl create mode 100644 tests/test_cases/expected_kdl/leading_newline.kdl create mode 100644 tests/test_cases/expected_kdl/leading_zero_binary.kdl create mode 100644 tests/test_cases/expected_kdl/leading_zero_int.kdl create mode 100644 tests/test_cases/expected_kdl/leading_zero_oct.kdl create mode 100644 tests/test_cases/expected_kdl/multiline_comment.kdl create mode 100644 tests/test_cases/expected_kdl/multiline_nodes.kdl create mode 100644 tests/test_cases/expected_kdl/multiline_string.kdl create mode 100644 tests/test_cases/expected_kdl/negative_float.kdl create mode 100644 tests/test_cases/expected_kdl/negative_int.kdl create mode 100644 tests/test_cases/expected_kdl/nested_block_comment.kdl create mode 100644 tests/test_cases/expected_kdl/nested_children.kdl create mode 100644 tests/test_cases/expected_kdl/nested_comments.kdl create mode 100644 tests/test_cases/expected_kdl/nested_multiline_block_comment.kdl create mode 100644 tests/test_cases/expected_kdl/newline_between_nodes.kdl create mode 100644 tests/test_cases/expected_kdl/newlines_in_block_comment.kdl create mode 100644 tests/test_cases/expected_kdl/no_decimal_exponent.kdl create mode 100644 tests/test_cases/expected_kdl/node_false.kdl create mode 100644 tests/test_cases/expected_kdl/node_true.kdl create mode 100644 tests/test_cases/expected_kdl/node_type.kdl create mode 100644 tests/test_cases/expected_kdl/null_arg.kdl create mode 100644 tests/test_cases/expected_kdl/null_prefix_in_bare_id.kdl create mode 100644 tests/test_cases/expected_kdl/null_prefix_in_prop_key.kdl create mode 100644 tests/test_cases/expected_kdl/null_prop.kdl create mode 100644 tests/test_cases/expected_kdl/numeric_arg.kdl create mode 100644 tests/test_cases/expected_kdl/numeric_prop.kdl create mode 100644 tests/test_cases/expected_kdl/octal.kdl create mode 100644 tests/test_cases/expected_kdl/only_cr.kdl create mode 100644 tests/test_cases/expected_kdl/only_line_comment.kdl create mode 100644 tests/test_cases/expected_kdl/only_line_comment_crlf.kdl create mode 100644 tests/test_cases/expected_kdl/only_line_comment_newline.kdl create mode 100644 tests/test_cases/expected_kdl/positive_int.kdl create mode 100644 tests/test_cases/expected_kdl/preserve_duplicate_nodes.kdl create mode 100644 tests/test_cases/expected_kdl/preserve_node_order.kdl create mode 100644 tests/test_cases/expected_kdl/prop_false_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_float_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_hex_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_null_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_raw_string_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_string_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_true_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_type.kdl create mode 100644 tests/test_cases/expected_kdl/prop_zero_type.kdl create mode 100644 tests/test_cases/expected_kdl/quoted_arg_type.kdl create mode 100644 tests/test_cases/expected_kdl/quoted_node_name.kdl create mode 100644 tests/test_cases/expected_kdl/quoted_node_type.kdl create mode 100644 tests/test_cases/expected_kdl/quoted_numeric.kdl create mode 100644 tests/test_cases/expected_kdl/quoted_prop_name.kdl create mode 100644 tests/test_cases/expected_kdl/quoted_prop_type.kdl create mode 100644 tests/test_cases/expected_kdl/r_node.kdl create mode 100644 tests/test_cases/expected_kdl/raw_arg_type.kdl create mode 100644 tests/test_cases/expected_kdl/raw_node_name.kdl create mode 100644 tests/test_cases/expected_kdl/raw_node_type.kdl create mode 100644 tests/test_cases/expected_kdl/raw_prop_type.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_arg.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_backslash.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_hash_no_esc.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_just_backslash.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_just_quote.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_multiple_hash.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_newline.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_prop.kdl create mode 100644 tests/test_cases/expected_kdl/raw_string_quote.kdl create mode 100644 tests/test_cases/expected_kdl/repeated_arg.kdl create mode 100644 tests/test_cases/expected_kdl/repeated_prop.kdl create mode 100644 tests/test_cases/expected_kdl/same_args.kdl create mode 100644 tests/test_cases/expected_kdl/same_name_nodes.kdl create mode 100644 tests/test_cases/expected_kdl/semicolon_after_child.kdl create mode 100644 tests/test_cases/expected_kdl/semicolon_in_child.kdl create mode 100644 tests/test_cases/expected_kdl/semicolon_separated.kdl create mode 100644 tests/test_cases/expected_kdl/semicolon_separated_nodes.kdl create mode 100644 tests/test_cases/expected_kdl/semicolon_terminated.kdl create mode 100644 tests/test_cases/expected_kdl/single_arg.kdl create mode 100644 tests/test_cases/expected_kdl/single_prop.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_arg_after_newline_esc.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_arg_before_newline_esc.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_child.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_empty_child.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_full_node.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_in_slashdash.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_negative_number.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_node_in_child.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_node_with_child.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_only_node.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_only_node_with_space.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_prop.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_raw_prop_key.kdl create mode 100644 tests/test_cases/expected_kdl/slashdash_repeated_prop.kdl create mode 100644 tests/test_cases/expected_kdl/string_arg.kdl create mode 100644 tests/test_cases/expected_kdl/string_prop.kdl create mode 100644 tests/test_cases/expected_kdl/tab_space.kdl create mode 100644 tests/test_cases/expected_kdl/trailing_crlf.kdl create mode 100644 tests/test_cases/expected_kdl/trailing_underscore_hex.kdl create mode 100644 tests/test_cases/expected_kdl/trailing_underscore_octal.kdl create mode 100644 tests/test_cases/expected_kdl/true_prefix_in_bare_id.kdl create mode 100644 tests/test_cases/expected_kdl/true_prefix_in_prop_key.kdl create mode 100644 tests/test_cases/expected_kdl/two_nodes.kdl create mode 100644 tests/test_cases/expected_kdl/underscore_in_float.kdl create mode 100644 tests/test_cases/expected_kdl/underscore_in_fraction.kdl create mode 100644 tests/test_cases/expected_kdl/underscore_in_int.kdl create mode 100644 tests/test_cases/expected_kdl/underscore_in_octal.kdl create mode 100644 tests/test_cases/expected_kdl/unusual_bare_id_chars_in_quoted_id.kdl create mode 100644 tests/test_cases/expected_kdl/unusual_chars_in_bare_id.kdl create mode 100644 tests/test_cases/expected_kdl/zero_arg.kdl create mode 100644 tests/test_cases/expected_kdl/zero_float.kdl create mode 100644 tests/test_cases/expected_kdl/zero_int.kdl create mode 100644 tests/test_cases/input/all_escapes.kdl create mode 100644 tests/test_cases/input/all_node_fields.kdl create mode 100644 tests/test_cases/input/arg_and_prop_same_name.kdl create mode 100644 tests/test_cases/input/arg_false_type.kdl create mode 100644 tests/test_cases/input/arg_float_type.kdl create mode 100644 tests/test_cases/input/arg_hex_type.kdl create mode 100644 tests/test_cases/input/arg_null_type.kdl create mode 100644 tests/test_cases/input/arg_raw_string_type.kdl create mode 100644 tests/test_cases/input/arg_string_type.kdl create mode 100644 tests/test_cases/input/arg_true_type.kdl create mode 100644 tests/test_cases/input/arg_type.kdl create mode 100644 tests/test_cases/input/arg_zero_type.kdl create mode 100644 tests/test_cases/input/asterisk_in_block_comment.kdl create mode 100644 tests/test_cases/input/backslash_in_bare_id.kdl create mode 100644 tests/test_cases/input/bare_arg.kdl create mode 100644 tests/test_cases/input/bare_emoji.kdl create mode 100644 tests/test_cases/input/binary.kdl create mode 100644 tests/test_cases/input/binary_trailing_underscore.kdl create mode 100644 tests/test_cases/input/binary_underscore.kdl create mode 100644 tests/test_cases/input/blank_arg_type.kdl create mode 100644 tests/test_cases/input/blank_node_type.kdl create mode 100644 tests/test_cases/input/blank_prop_type.kdl create mode 100644 tests/test_cases/input/block_comment.kdl create mode 100644 tests/test_cases/input/block_comment_after_node.kdl create mode 100644 tests/test_cases/input/block_comment_before_node.kdl create mode 100644 tests/test_cases/input/block_comment_before_node_no_space.kdl create mode 100644 tests/test_cases/input/block_comment_newline.kdl create mode 100644 tests/test_cases/input/boolean_arg.kdl create mode 100644 tests/test_cases/input/boolean_prop.kdl create mode 100644 tests/test_cases/input/brackets_in_bare_id.kdl create mode 100644 tests/test_cases/input/chevrons_in_bare_id.kdl create mode 100644 tests/test_cases/input/comma_in_bare_id.kdl create mode 100644 tests/test_cases/input/comment_after_arg_type.kdl create mode 100644 tests/test_cases/input/comment_after_node_type.kdl create mode 100644 tests/test_cases/input/comment_after_prop_type.kdl create mode 100644 tests/test_cases/input/comment_in_arg_type.kdl create mode 100644 tests/test_cases/input/comment_in_node_type.kdl create mode 100644 tests/test_cases/input/comment_in_prop_type.kdl create mode 100644 tests/test_cases/input/commented_arg.kdl create mode 100644 tests/test_cases/input/commented_child.kdl create mode 100644 tests/test_cases/input/commented_line.kdl create mode 100644 tests/test_cases/input/commented_node.kdl create mode 100644 tests/test_cases/input/commented_prop.kdl create mode 100644 tests/test_cases/input/crlf_between_nodes.kdl create mode 100644 tests/test_cases/input/dash_dash.kdl create mode 100644 tests/test_cases/input/dot_but_no_fraction.kdl create mode 100644 tests/test_cases/input/dot_but_no_fraction_before_exponent.kdl create mode 100644 tests/test_cases/input/dot_in_exponent.kdl create mode 100644 tests/test_cases/input/dot_zero.kdl create mode 100644 tests/test_cases/input/emoji.kdl create mode 100644 tests/test_cases/input/empty.kdl create mode 100644 tests/test_cases/input/empty_arg_type.kdl create mode 100644 tests/test_cases/input/empty_child.kdl create mode 100644 tests/test_cases/input/empty_child_different_lines.kdl create mode 100644 tests/test_cases/input/empty_child_same_line.kdl create mode 100644 tests/test_cases/input/empty_child_whitespace.kdl create mode 100644 tests/test_cases/input/empty_node_type.kdl create mode 100644 tests/test_cases/input/empty_prop_type.kdl create mode 100644 tests/test_cases/input/empty_quoted_node_id.kdl create mode 100644 tests/test_cases/input/empty_quoted_prop_key.kdl create mode 100644 tests/test_cases/input/empty_string_arg.kdl create mode 100644 tests/test_cases/input/esc_newline_in_string.kdl create mode 100644 tests/test_cases/input/esc_unicode_in_string.kdl create mode 100644 tests/test_cases/input/escline.kdl create mode 100644 tests/test_cases/input/escline_comment_node.kdl create mode 100644 tests/test_cases/input/escline_line_comment.kdl create mode 100644 tests/test_cases/input/escline_node.kdl create mode 100644 tests/test_cases/input/false_prefix_in_bare_id.kdl create mode 100644 tests/test_cases/input/false_prefix_in_prop_key.kdl create mode 100644 tests/test_cases/input/false_prop_key.kdl create mode 100644 tests/test_cases/input/hex.kdl create mode 100644 tests/test_cases/input/hex_int.kdl create mode 100644 tests/test_cases/input/hex_int_underscores.kdl create mode 100644 tests/test_cases/input/hex_leading_zero.kdl create mode 100644 tests/test_cases/input/illegal_char_in_binary.kdl create mode 100644 tests/test_cases/input/illegal_char_in_hex.kdl create mode 100644 tests/test_cases/input/illegal_char_in_octal.kdl create mode 100644 tests/test_cases/input/int_multiple_underscore.kdl create mode 100644 tests/test_cases/input/just_block_comment.kdl create mode 100644 tests/test_cases/input/just_child.kdl create mode 100644 tests/test_cases/input/just_newline.kdl create mode 100644 tests/test_cases/input/just_node_id.kdl create mode 100644 tests/test_cases/input/just_space.kdl create mode 100644 tests/test_cases/input/just_space_in_arg_type.kdl create mode 100644 tests/test_cases/input/just_space_in_node_type.kdl create mode 100644 tests/test_cases/input/just_space_in_prop_type.kdl create mode 100644 tests/test_cases/input/just_type_no_arg.kdl create mode 100644 tests/test_cases/input/just_type_no_node_id.kdl create mode 100644 tests/test_cases/input/just_type_no_prop.kdl create mode 100644 tests/test_cases/input/leading_newline.kdl create mode 100644 tests/test_cases/input/leading_zero_binary.kdl create mode 100644 tests/test_cases/input/leading_zero_int.kdl create mode 100644 tests/test_cases/input/leading_zero_oct.kdl create mode 100644 tests/test_cases/input/multiline_comment.kdl create mode 100644 tests/test_cases/input/multiline_nodes.kdl create mode 100644 tests/test_cases/input/multiline_string.kdl create mode 100644 tests/test_cases/input/multiple_dots_in_float.kdl create mode 100644 tests/test_cases/input/multiple_dots_in_float_before_exponent.kdl create mode 100644 tests/test_cases/input/multiple_es_in_float.kdl create mode 100644 tests/test_cases/input/multiple_x_in_hex.kdl create mode 100644 tests/test_cases/input/negative_exponent.kdl create mode 100644 tests/test_cases/input/negative_float.kdl create mode 100644 tests/test_cases/input/negative_int.kdl create mode 100644 tests/test_cases/input/nested_block_comment.kdl create mode 100644 tests/test_cases/input/nested_children.kdl create mode 100644 tests/test_cases/input/nested_comments.kdl create mode 100644 tests/test_cases/input/nested_multiline_block_comment.kdl create mode 100644 tests/test_cases/input/newline_between_nodes.kdl create mode 100644 tests/test_cases/input/newlines_in_block_comment.kdl create mode 100644 tests/test_cases/input/no_decimal_exponent.kdl create mode 100644 tests/test_cases/input/no_digits_in_hex.kdl create mode 100644 tests/test_cases/input/node_false.kdl create mode 100644 tests/test_cases/input/node_true.kdl create mode 100644 tests/test_cases/input/node_type.kdl create mode 100644 tests/test_cases/input/null_arg.kdl create mode 100644 tests/test_cases/input/null_prefix_in_bare_id.kdl create mode 100644 tests/test_cases/input/null_prefix_in_prop_key.kdl create mode 100644 tests/test_cases/input/null_prop.kdl create mode 100644 tests/test_cases/input/null_prop_key.kdl create mode 100644 tests/test_cases/input/numeric_arg.kdl create mode 100644 tests/test_cases/input/numeric_prop.kdl create mode 100644 tests/test_cases/input/octal.kdl create mode 100644 tests/test_cases/input/only_cr.kdl create mode 100644 tests/test_cases/input/only_line_comment.kdl create mode 100644 tests/test_cases/input/only_line_comment_crlf.kdl create mode 100644 tests/test_cases/input/only_line_comment_newline.kdl create mode 100644 tests/test_cases/input/parens_in_bare_id.kdl create mode 100644 tests/test_cases/input/parse_all_arg_types.kdl create mode 100644 tests/test_cases/input/positive_exponent.kdl create mode 100644 tests/test_cases/input/positive_int.kdl create mode 100644 tests/test_cases/input/preserve_duplicate_nodes.kdl create mode 100644 tests/test_cases/input/preserve_node_order.kdl create mode 100644 tests/test_cases/input/prop_false_type.kdl create mode 100644 tests/test_cases/input/prop_float_type.kdl create mode 100644 tests/test_cases/input/prop_hex_type.kdl create mode 100644 tests/test_cases/input/prop_null_type.kdl create mode 100644 tests/test_cases/input/prop_raw_string_type.kdl create mode 100644 tests/test_cases/input/prop_string_type.kdl create mode 100644 tests/test_cases/input/prop_true_type.kdl create mode 100644 tests/test_cases/input/prop_type.kdl create mode 100644 tests/test_cases/input/prop_zero_type.kdl create mode 100644 tests/test_cases/input/question_mark_at_start_of_int.kdl create mode 100644 tests/test_cases/input/question_mark_before_number.kdl create mode 100644 tests/test_cases/input/quote_in_bare_id.kdl create mode 100644 tests/test_cases/input/quoted_arg_type.kdl create mode 100644 tests/test_cases/input/quoted_node_name.kdl create mode 100644 tests/test_cases/input/quoted_node_type.kdl create mode 100644 tests/test_cases/input/quoted_numeric.kdl create mode 100644 tests/test_cases/input/quoted_prop_name.kdl create mode 100644 tests/test_cases/input/quoted_prop_type.kdl create mode 100644 tests/test_cases/input/r_node.kdl create mode 100644 tests/test_cases/input/raw_arg_type.kdl create mode 100644 tests/test_cases/input/raw_node_name.kdl create mode 100644 tests/test_cases/input/raw_node_type.kdl create mode 100644 tests/test_cases/input/raw_prop_type.kdl create mode 100644 tests/test_cases/input/raw_string_arg.kdl create mode 100644 tests/test_cases/input/raw_string_backslash.kdl create mode 100644 tests/test_cases/input/raw_string_hash_no_esc.kdl create mode 100644 tests/test_cases/input/raw_string_just_backslash.kdl create mode 100644 tests/test_cases/input/raw_string_just_quote.kdl create mode 100644 tests/test_cases/input/raw_string_multiple_hash.kdl create mode 100644 tests/test_cases/input/raw_string_newline.kdl create mode 100644 tests/test_cases/input/raw_string_prop.kdl create mode 100644 tests/test_cases/input/raw_string_quote.kdl create mode 100644 tests/test_cases/input/repeated_arg.kdl create mode 100644 tests/test_cases/input/repeated_prop.kdl create mode 100644 tests/test_cases/input/same_args.kdl create mode 100644 tests/test_cases/input/same_name_nodes.kdl create mode 100644 tests/test_cases/input/sci_notation_large.kdl create mode 100644 tests/test_cases/input/sci_notation_small.kdl create mode 100644 tests/test_cases/input/semicolon_after_child.kdl create mode 100644 tests/test_cases/input/semicolon_in_child.kdl create mode 100644 tests/test_cases/input/semicolon_separated.kdl create mode 100644 tests/test_cases/input/semicolon_separated_nodes.kdl create mode 100644 tests/test_cases/input/semicolon_terminated.kdl create mode 100644 tests/test_cases/input/single_arg.kdl create mode 100644 tests/test_cases/input/single_prop.kdl create mode 100644 tests/test_cases/input/slash_in_bare_id.kdl create mode 100644 tests/test_cases/input/slashdash_arg_after_newline_esc.kdl create mode 100644 tests/test_cases/input/slashdash_arg_before_newline_esc.kdl create mode 100644 tests/test_cases/input/slashdash_child.kdl create mode 100644 tests/test_cases/input/slashdash_empty_child.kdl create mode 100644 tests/test_cases/input/slashdash_full_node.kdl create mode 100644 tests/test_cases/input/slashdash_in_slashdash.kdl create mode 100644 tests/test_cases/input/slashdash_negative_number.kdl create mode 100644 tests/test_cases/input/slashdash_node_in_child.kdl create mode 100644 tests/test_cases/input/slashdash_node_with_child.kdl create mode 100644 tests/test_cases/input/slashdash_only_node.kdl create mode 100644 tests/test_cases/input/slashdash_only_node_with_space.kdl create mode 100644 tests/test_cases/input/slashdash_prop.kdl create mode 100644 tests/test_cases/input/slashdash_raw_prop_key.kdl create mode 100644 tests/test_cases/input/slashdash_repeated_prop.kdl create mode 100644 tests/test_cases/input/space_after_arg_type.kdl create mode 100644 tests/test_cases/input/space_after_node_type.kdl create mode 100644 tests/test_cases/input/space_after_prop_type.kdl create mode 100644 tests/test_cases/input/space_in_arg_type.kdl create mode 100644 tests/test_cases/input/space_in_node_type.kdl create mode 100644 tests/test_cases/input/space_in_prop_type.kdl create mode 100644 tests/test_cases/input/square_bracket_in_bare_id.kdl create mode 100644 tests/test_cases/input/string_arg.kdl create mode 100644 tests/test_cases/input/string_prop.kdl create mode 100644 tests/test_cases/input/tab_space.kdl create mode 100644 tests/test_cases/input/trailing_crlf.kdl create mode 100644 tests/test_cases/input/trailing_underscore_hex.kdl create mode 100644 tests/test_cases/input/trailing_underscore_octal.kdl create mode 100644 tests/test_cases/input/true_prefix_in_bare_id.kdl create mode 100644 tests/test_cases/input/true_prefix_in_prop_key.kdl create mode 100644 tests/test_cases/input/true_prop_key.kdl create mode 100644 tests/test_cases/input/two_nodes.kdl create mode 100644 tests/test_cases/input/type_before_prop_key.kdl create mode 100644 tests/test_cases/input/unbalanced_raw_hashes.kdl create mode 100644 tests/test_cases/input/underscore_at_start_of_fraction.kdl create mode 100644 tests/test_cases/input/underscore_at_start_of_hex.kdl create mode 100644 tests/test_cases/input/underscore_at_start_of_int.kdl create mode 100644 tests/test_cases/input/underscore_before_number.kdl create mode 100644 tests/test_cases/input/underscore_in_exponent.kdl create mode 100644 tests/test_cases/input/underscore_in_float.kdl create mode 100644 tests/test_cases/input/underscore_in_fraction.kdl create mode 100644 tests/test_cases/input/underscore_in_int.kdl create mode 100644 tests/test_cases/input/underscore_in_octal.kdl create mode 100644 tests/test_cases/input/unusual_bare_id_chars_in_quoted_id.kdl create mode 100644 tests/test_cases/input/unusual_chars_in_bare_id.kdl create mode 100644 tests/test_cases/input/zero_arg.kdl create mode 100644 tests/test_cases/input/zero_float.kdl create mode 100644 tests/test_cases/input/zero_int.kdl diff --git a/README.md b/README.md index 862cfab..0140102 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,32 @@ Error: ╰──── help: Floating point numbers must be base 10, and have numbers after the decimal point. ``` + +### Quirks + +#### Properties + +Multiple properties with the same name are allowed, and all duplicated +**will be preserved**, meaning those documents will correctly round-trip. +When using `node.get()`/`node["key"]` & company, the _last_ property with +that name's value will be returned. + +#### Numbers + +KDL itself does not specify a particular representation for numbers and +accepts just about anything valid, no matter how large and how small. This +means a few things: + +* Numbers without a decimal point are interpreted as u64. +* Numbers with a decimal point are interpreted as f64. +* Floating point numbers that evaluate to f64::INFINITY or + f64::NEG_INFINITY or NaN will be represented as such in the values, + instead of the original numbers. +* A similar restriction applies to overflowed u64 values. +* The original _representation_ of these numbers will be preserved, unless + you `doc.fmt()`, in which case the original representation will be + thrown away and the actual value will be used when serializing. + ### License The code in this repository is covered by [the Apache-2.0 diff --git a/src/document.rs b/src/document.rs index 7f90fd4..f63bf17 100644 --- a/src/document.rs +++ b/src/document.rs @@ -188,7 +188,12 @@ impl KdlDocument { /// Auto-formats this Document, making everything nice while preserving /// comments. pub fn fmt(&mut self) { - self.fmt_impl(0); + self.fmt_impl(0, false); + } + + /// Formats the document and removes all comments from the document. + pub fn fmt_no_comments(&mut self) { + self.fmt_impl(0, true); } } @@ -199,15 +204,20 @@ impl Display for KdlDocument { } impl KdlDocument { - pub(crate) fn fmt_impl(&mut self, indent: usize) { + pub(crate) fn fmt_impl(&mut self, indent: usize, no_comments: bool) { if let Some(s) = self.leading.as_mut() { - crate::fmt::fmt_leading(s, indent); + crate::fmt::fmt_leading(s, indent, no_comments); + } + let mut has_nodes = false; + for node in &mut self.nodes { + has_nodes = true; + node.fmt_impl(indent, no_comments); } if let Some(s) = self.trailing.as_mut() { - crate::fmt::fmt_trailing(s); - } - for node in &mut self.nodes { - node.fmt_impl(indent); + crate::fmt::fmt_trailing(s, no_comments); + if !has_nodes { + s.push('\n'); + } } } diff --git a/src/entry.rs b/src/entry.rs index 5533266..fb4fa4a 100644 --- a/src/entry.rs +++ b/src/entry.rs @@ -124,12 +124,12 @@ impl Display for KdlEntry { if let Some(leading) = &self.leading { write!(f, "{}", leading)?; } - if let Some(ty) = &self.ty { - write!(f, "({})", ty)?; - } if let Some(name) = &self.name { write!(f, "{}=", name)?; } + if let Some(ty) = &self.ty { + write!(f, "({})", ty)?; + } if let Some(repr) = &self.value_repr { write!(f, "{}", repr)?; } else { @@ -165,7 +165,7 @@ impl FromStr for KdlEntry { type Err = KdlError; fn from_str(s: &str) -> Result { - parser::parse(s, parser::entry_with_node_space) + parser::parse(s, parser::entry_with_trailing) } } @@ -217,7 +217,7 @@ mod test { } ); - let entry: KdlEntry = " \\\n (\"m\\\"eh\")\"foo\"=0xDEADbeef\t\\\n".parse()?; + let entry: KdlEntry = " \\\n \"foo\"=(\"m\\\"eh\")0xDEADbeef\t\\\n".parse()?; assert_eq!( entry, KdlEntry { diff --git a/src/fmt.rs b/src/fmt.rs index ea03789..b6486d0 100644 --- a/src/fmt.rs +++ b/src/fmt.rs @@ -1,30 +1,34 @@ -pub(crate) fn fmt_leading(leading: &mut String, indent: usize) { +pub(crate) fn fmt_leading(leading: &mut String, indent: usize, no_comments: bool) { if leading.is_empty() { return; } - let comments = crate::parser::parse(leading.trim(), crate::parser::leading_comments) - .expect("invalid leading text"); let mut result = String::new(); - for line in comments { - let trimmed = line.trim(); - if !trimmed.is_empty() { - result.push_str(&format!("{:indent$}{}\n", "", trimmed, indent = indent)); + if !no_comments { + let comments = crate::parser::parse(leading.trim(), crate::parser::leading_comments) + .expect("invalid leading text"); + for line in comments { + let trimmed = line.trim(); + if !trimmed.is_empty() { + result.push_str(&format!("{:indent$}{}\n", "", trimmed, indent = indent)); + } } } result.push_str(&format!("{:indent$}", "", indent = indent)); *leading = result; } -pub(crate) fn fmt_trailing(decor: &mut String) { +pub(crate) fn fmt_trailing(decor: &mut String, no_comments: bool) { if decor.is_empty() { return; } *decor = decor.trim().to_string(); let mut result = String::new(); - let comments = crate::parser::parse(decor, crate::parser::trailing_comments) - .expect("invalid trailing text"); - for comment in comments { - result.push_str(comment); + if !no_comments { + let comments = crate::parser::parse(decor, crate::parser::trailing_comments) + .expect("invalid trailing text"); + for comment in comments { + result.push_str(comment); + } } *decor = result; } diff --git a/src/identifier.rs b/src/identifier.rs index d633eaf..760d3dd 100644 --- a/src/identifier.rs +++ b/src/identifier.rs @@ -4,7 +4,7 @@ use crate::{parser, KdlError}; /// Represents a KDL /// [Identifier](https://github.com/kdl-org/kdl/blob/main/SPEC.md#identifier). -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq, Hash)] pub struct KdlIdentifier { pub(crate) value: String, pub(crate) repr: Option, @@ -199,9 +199,6 @@ mod test { let invalid = "\"x"; assert!(invalid.parse::().is_err()); - let invalid = "r#\"foo\"#"; - assert!(invalid.parse::().is_err()); - Ok(()) } diff --git a/src/lib.rs b/src/lib.rs index ad0d46b..dbcb4b0 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -94,6 +94,32 @@ //! ╰──── //! help: Floating point numbers must be base 10, and have numbers after the decimal point. //! ``` +//! +//! ## Quirks +//! +//! ### Properties +//! +//! Multiple properties with the same name are allowed, and all duplicated +//! **will be preserved**, meaning those documents will correctly round-trip. +//! When using `node.get()`/`node["key"]` & company, the _last_ property with +//! that name's value will be returned. +//! +//! ### Numbers +//! +//! KDL itself does not specify a particular representation for numbers and +//! accepts just about anything valid, no matter how large and how small. This +//! means a few things: +//! +//! * Numbers without a decimal point are interpreted as [`u64`]. +//! * Numbers with a decimal point are interpreted as [`f64`]. +//! * Floating point numbers that evaluate to [`f64::INFINITY`] or +//! [`f64::NEG_INFINITY`] or NaN will be represented as such in the values, +//! instead of the original numbers. +//! * A similar restriction applies to overflowed [`u64`] values. +//! * The original _representation_ of these numbers will be preserved, unless +//! you [`KdlDocument::fmt`] in which case the original representation will be +//! thrown away and the actual value will be used when serializing. +//! //! ## License //! //! The code in this repository is covered by [the Apache-2.0 @@ -102,6 +128,7 @@ #![deny(missing_debug_implementations, nonstandard_style)] #![warn(missing_docs, unreachable_pub, rust_2018_idioms, unreachable_pub)] #![cfg_attr(test, deny(warnings))] +#![doc(html_favicon_url = "https://kdl.dev/favicon.ico")] #![doc(html_logo_url = "https://kdl.dev/logo.svg")] pub use document::*; diff --git a/src/node.rs b/src/node.rs index 97c171d..0585465 100644 --- a/src/node.rs +++ b/src/node.rs @@ -134,14 +134,15 @@ impl KdlNode { fn get_impl(&self, key: NodeKey) -> Option<&KdlEntry> { match key { NodeKey::Key(key) => { + let mut current = None; for entry in &self.entries { if entry.name.is_some() && entry.name.as_ref().map(|i| i.value()) == Some(key.value()) { - return Some(entry); + current = Some(entry); } } - None + current } NodeKey::Index(idx) => { let mut current_idx = 0; @@ -170,14 +171,15 @@ impl KdlNode { fn get_mut_impl(&mut self, key: NodeKey) -> Option<&mut KdlEntry> { match key { NodeKey::Key(key) => { + let mut current = None; for entry in &mut self.entries { if entry.name.is_some() && entry.name.as_ref().map(|i| i.value()) == Some(key.value()) { - return Some(entry); + current = Some(entry); } } - None + current } NodeKey::Index(idx) => { let mut current_idx = 0; @@ -340,7 +342,12 @@ impl KdlNode { /// Auto-formats this node and its contents. pub fn fmt(&mut self) { - self.fmt_impl(0); + self.fmt_impl(0, false); + } + + /// Auto-formats this node and its contents, stripping comments. + pub fn fmt_no_comments(&mut self) { + self.fmt_impl(0, true); } } @@ -421,12 +428,12 @@ impl Display for KdlNode { } impl KdlNode { - pub(crate) fn fmt_impl(&mut self, indent: usize) { + pub(crate) fn fmt_impl(&mut self, indent: usize, no_comments: bool) { if let Some(s) = self.leading.as_mut() { - crate::fmt::fmt_leading(s, indent); + crate::fmt::fmt_leading(s, indent, no_comments); } if let Some(s) = self.trailing.as_mut() { - crate::fmt::fmt_trailing(s); + crate::fmt::fmt_trailing(s, no_comments); if s.starts_with(';') { s.remove(0); } @@ -446,7 +453,7 @@ impl KdlNode { entry.fmt(); } if let Some(children) = self.children.as_mut() { - children.fmt_impl(indent + 4); + children.fmt_impl(indent + 4, no_comments); if let Some(leading) = children.leading.as_mut() { leading.push('\n'); } @@ -511,6 +518,11 @@ mod test { assert_eq!(node.name(), &"\"node\"".parse()?); assert_eq!(node.get(0), Some(&"0xDEADbeef".parse()?)); + r#" + node "test" { + link "blah" anything="self" + }"# + .parse::()?; Ok(()) } @@ -528,5 +540,9 @@ mod test { assert_eq!(node[0], false.into()); assert_eq!(node["foo"], KdlValue::Null); + + node.entries_mut().push(KdlEntry::new_prop("x", 1)); + node.entries_mut().push(KdlEntry::new_prop("x", 2)); + assert_eq!(&node["x"], &2.into()) } } diff --git a/src/parser.rs b/src/parser.rs index 72876c7..06b4aa6 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -2,9 +2,9 @@ use std::ops::RangeTo; use crate::nom_compat::{many0, many1, many_till}; use nom::branch::alt; -use nom::bytes::complete::{tag, take_until, take_until1, take_while, take_while_m_n}; +use nom::bytes::complete::{tag, take_until, take_while, take_while_m_n}; use nom::character::complete::{anychar, char, none_of, one_of}; -use nom::combinator::{all_consuming, cut, eof, map, map_opt, map_res, opt, recognize}; +use nom::combinator::{all_consuming, cut, eof, map, map_opt, map_res, opt, peek, recognize}; use nom::error::{context, ParseError}; use nom::sequence::{delimited, preceded, terminated, tuple}; use nom::{Finish, IResult, Offset, Parser, Slice}; @@ -81,7 +81,7 @@ pub(crate) fn node(input: &str) -> IResult<&str, KdlNode, KdlParseError<&str>> { cut(recognize(preceded( many0(node_space), alt(( - terminated(recognize(opt(tag(";"))), alt((linespace, eof))), + terminated(recognize(tag(";")), opt(alt((linespace, eof)))), alt((newline, single_line_comment, eof)), )), ))), @@ -109,7 +109,7 @@ pub(crate) fn node(input: &str) -> IResult<&str, KdlNode, KdlParseError<&str>> { } pub(crate) fn identifier(input: &str) -> IResult<&str, KdlIdentifier, KdlParseError<&str>> { - alt((plain_identifier, quoted_identifier))(input) + alt((quoted_identifier, plain_identifier))(input) } pub(crate) fn leading_comments(input: &str) -> IResult<&str, Vec<&str>, KdlParseError<&str>> { @@ -145,22 +145,38 @@ fn plain_identifier(input: &str) -> IResult<&str, KdlIdentifier, KdlParseError<& take_while_m_n(1, 1, KdlIdentifier::is_initial_char), cut(take_while(KdlIdentifier::is_identifier_char)), ))(input).map_err(|e| set_details(e, start, Some("invalid identifier character"), Some("See https://github.com/kdl-org/kdl/blob/main/SPEC.md#identifier for an explanation of valid KDL identifiers.")))?; + match name { + "false" | "true" | "null" => { + return Err(nom::Err::Error(KdlParseError { + input, + context: Some("non-keyword identifier"), + len: name.len(), + label: Some("reserved keyword"), + help: Some("Reserved keywords cannot be used as identifiers."), + kind: None, + touched: false, + })) + } + _ => {} + } let mut ident = KdlIdentifier::from(name); ident.set_repr(name); Ok((input, ident)) } fn quoted_identifier(input: &str) -> IResult<&str, KdlIdentifier, KdlParseError<&str>> { - let (input, (raw, val)) = string(input)?; + let (input, (raw, val)) = alt((string, raw_string))(input)?; let mut ident = KdlIdentifier::from(val.as_string().unwrap()); ident.set_repr(raw); Ok((input, ident)) } -pub(crate) fn entry_with_node_space(input: &str) -> IResult<&str, KdlEntry, KdlParseError<&str>> { - let (input, leading) = recognize(many0(node_space))(input)?; - let leading = if leading.is_empty() { " " } else { leading }; - let (input, mut entry) = entry(input)?; +pub(crate) fn entry_with_trailing(input: &str) -> IResult<&str, KdlEntry, KdlParseError<&str>> { + let (input, mut leading) = recognize(many0(node_space))(input)?; + if leading.is_empty() { + leading = " "; + }; + let (input, mut entry) = alt((property, argument))(input)?; let (input, trailing) = recognize(many0(node_space))(input)?; entry.set_leading(leading); entry.set_trailing(trailing); @@ -168,25 +184,32 @@ pub(crate) fn entry_with_node_space(input: &str) -> IResult<&str, KdlEntry, KdlP } fn entry(input: &str) -> IResult<&str, KdlEntry, KdlParseError<&str>> { - alt((property, argument))(input) + let (input, leading) = recognize(many1(node_space))(input)?; + let (input, mut entry) = alt((property, argument))(input)?; + entry.set_leading(leading); + Ok((input, entry)) +} + +fn entry_maybe_space(input: &str) -> IResult<&str, KdlEntry, KdlParseError<&str>> { + let (input, leading) = recognize(many0(node_space))(input)?; + let (input, mut entry) = alt((property, argument))(input)?; + entry.set_leading(leading); + Ok((input, entry)) } fn property(input: &str) -> IResult<&str, KdlEntry, KdlParseError<&str>> { - let (input, leading) = recognize(many0(node_space))(input)?; - let (input, ty) = opt(annotation)(input)?; let (input, name) = identifier(input)?; let (input, _) = context("'=' after property name", tag("="))(input)?; + let (input, ty) = opt(annotation)(input)?; let (input, (raw, value)) = context("property value", cut(value))(input).map_err(|e| set_details(e, input, Some("invalid value"), Some("Please refer to https://github.com/kdl-org/kdl/blob/main/SPEC.md#value for valid KDL value syntaxes.")))?; let mut entry = KdlEntry::new_prop(name, value); entry.ty = ty; - entry.set_leading(leading); entry.set_trailing(""); entry.set_value_repr(raw); Ok((input, entry)) } fn argument(input: &str) -> IResult<&str, KdlEntry, KdlParseError<&str>> { - let (input, leading) = recognize(many0(node_space))(input)?; let (input, ty) = opt(annotation)(input)?; let (input, (raw, value)) = if ty.is_some() { context("valid value", cut(value))(input) @@ -195,7 +218,6 @@ fn argument(input: &str) -> IResult<&str, KdlEntry, KdlParseError<&str>> { }?; let mut entry = KdlEntry::new(value); entry.ty = ty; - entry.set_leading(leading); entry.set_trailing(""); entry.set_value_repr(raw); Ok((input, entry)) @@ -329,7 +351,7 @@ fn multi_line_comment(input: &str) -> IResult<&str, &str, KdlParseError<&str>> { tag("/*"), context("comment block body", cut(commented_block)), ))(input) - .map_err(|e| set_details(e, input, Some("comment"), None)) + .map_err(|e| set_details(e, input, Some("comment"), Some("multi-line comments must start with /* and be terminated with a matching */. They may be nested, but their */ must match."))) } /// `commented-block := '*/' | (multi-line-comment | '*' | '/' | [^*/]+) commented-block` @@ -337,7 +359,12 @@ fn commented_block(input: &str) -> IResult<&str, &str, KdlParseError<&str>> { alt(( tag("*/"), terminated( - alt((multi_line_comment, take_until1("*/"), tag("*"), tag("/"))), + alt(( + multi_line_comment, + tag("*"), + tag("/"), + recognize(many_till(anychar, peek(alt((tag("*"), tag("/")))))), + )), commented_block, ), ))(input) @@ -348,7 +375,7 @@ fn node_slashdash(input: &str) -> IResult<&str, &str, KdlParseError<&str>> { tag("/-"), context( "node following a slashdash", - cut(alt((recognize(entry), recognize(children)))), + cut(alt((recognize(entry_maybe_space), recognize(children)))), ), ))(input) .map_err(|e| set_details(e, input, Some("slashdash"), None)) @@ -430,6 +457,7 @@ fn escape(input: &str) -> IResult<&str, char, KdlParseError<&str>> { } fn unicode(input: &str) -> IResult<&str, char, KdlParseError<&str>> { + // TODO: This should only accept up to 0x10FFFF. map_opt( map_res( take_while_m_n(1, 6, |c: char| c.is_ascii_hexdigit()), @@ -448,7 +476,7 @@ fn raw_string(input: &str) -> IResult<&str, (String, KdlValue), KdlParseError<&s raw.push('r'); let (input, hashes) = recognize(many0(char('#')))(input)?; raw.push_str(hashes); - let (input, _) = cut(char('"'))(input)?; + let (input, _) = char('"')(input)?; raw.push('"'); let close = format!("\"{}", hashes); let (input, value) = take_until(&close[..])(input)?; @@ -528,6 +556,7 @@ fn hexadecimal(input: &str) -> IResult<&str, (String, KdlValue), KdlParseError<& )), move |(raw_body, hex): (&str, &str)| { raw.push_str(raw_body); + // TODO: Failure in case of int overflow! i64::from_str_radix(&str::replace(hex, "_", ""), 16) .map(|x| x * sign) .map(|x| (raw.clone(), KdlValue::Base16(x))) @@ -664,6 +693,10 @@ mod comment_tests { #[test] fn multi_line() { assert_eq!(comment("/* Hello world */"), Ok(("", "/* Hello world */"))); + assert_eq!( + comment("/* Hello /* world */ blah */"), + Ok(("", "/* Hello /* world */ blah */")) + ); } #[test] @@ -752,6 +785,8 @@ mod value_tests { ) )) ); + let (_, n) = node("node 0x0123_4567_89ab_cdef").expect("failed to parse node"); + assert_eq!(&n[0], &KdlValue::Base16(0x0123456789abcdef)); assert_eq!( value("0x123_4567"), Ok(("", ("0x123_4567".into(), KdlValue::Base16(0x1234567)))) diff --git a/src/value.rs b/src/value.rs index a9b10cf..929c047 100644 --- a/src/value.rs +++ b/src/value.rs @@ -151,11 +151,23 @@ impl Display for KdlValue { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { Self::RawString(_) => self.write_raw_string(f), - Self::String(string) => write!(f, "{:?}", string), + Self::String(_) => self.write_string(f), Self::Base2(value) => write!(f, "0b{:b}", value), Self::Base8(value) => write!(f, "0o{:o}", value), - Self::Base10(value) => write!(f, "{}", value), - Self::Base10Float(value) => write!(f, "{}", value), + Self::Base10(value) => write!(f, "{:?}", value), + Self::Base10Float(value) => write!( + f, + "{:?}", + if value == &f64::INFINITY { + f64::MAX + } else if value == &f64::NEG_INFINITY { + -f64::MAX + } else if value.is_nan() { + 0.0 + } else { + *value + } + ), Self::Base16(value) => write!(f, "0x{:x}", value), Self::Bool(value) => write!(f, "{}", value), Self::Null => write!(f, "null"), @@ -164,6 +176,23 @@ impl Display for KdlValue { } impl KdlValue { + fn write_string(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let string = self.as_string().unwrap(); + write!(f, "\"")?; + for char in string.chars() { + match char { + '\\' | '"' => write!(f, "\\{}", char)?, + '\n' => write!(f, "\\n")?, + '\r' => write!(f, "\\r")?, + '\t' => write!(f, "\\t")?, + '\u{08}' => write!(f, "\\b")?, + '\u{0C}' => write!(f, "\\f")?, + _ => write!(f, "{}", char)?, + } + } + write!(f, "\"")?; + Ok(()) + } fn write_raw_string(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let raw = self.as_string().unwrap(); let mut consecutive = 0usize; diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 0000000..8c87647 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,61 @@ +# Full Document Test Cases + +The `input` folder contains test cases for KDL parsers. The `expected_kdl` +folder contains files with the same name as those in `input` with the expected +output after being run through the parser and printed out again. If there's no +file in `expected_kdl` with a name corresponding to one in `input` it +indicates that parsing for that case should fail. + +## Translation Rules + +By necessity, the files in `expected_kdl` are not identical to their +corresponding inputs. They are instead pretty-printed according to the +following rules: + +* All comments removed +* Extra empty lines removed except for a newline after the last node +* All nodes should be reformatted without escaped newlines +* Node fields should be `identifier ` +* All values and all children must be in the same order as they were defined. +* Properties must be in _alphabetical order_ and separated by a single space. +* All strings must be represented as regular strings, with appropriate escapes + for invalid bare characters. That means that raw strings must be converted + to plain strings, and escaped. +* Any literal newlines or other ascii escape characters in escaped strings + replaced with their escape sequences. +* All identifiers must be unquoted unless they _must_ be quoted. That means + `"foo"` becomes `foo`, and `"foo bar"` stays that way. +* Any duplicate properties must be removed, with only the rightmost one + remaining. This also means duplicate properties must be allowed. +* 4 space indents +* All numbers must be converted to their simplest decimal representation. That + means that hex, octal, and binary must all be converted to decimals. All + floats must be represented using `E` notation, with a single digit left of + the decimal point if the float is less than 1. While parsers are required to + _consume_ different number syntaxes, they are under no obligation to + represent numbers in any particular way. + +Data may be manipulated as you wish in order to output the expected KDL. This +test suite verifies the ability to **parse**, not specific quirks about +internal representations. + +## What to do if a test fails for you + +This test suite was originally designed for a pre-1.0 version of the KDL +specification. If you encounter a failure, it's likely that the test suite +will need to be updated, rather than your parser itself. This test suite is +NOT AUTHORITATIVE. If this test suite disagrees with the KDL spec in any way, +the most desirable resolution is to send a PR to this repository to fix the +test itself. Likewise, if you think a test succeeded but should not have, +please send a PR. + +If you think the disagreement is due to a genuine error or oversight in the +KDL specification, please open an issue explaining the matter and the change +will be considered for the next version of the KDL spec. + +## Credit + +This test suite was extracted from +[`kdl4j`](https://github.com/hkolbeck/kdl4j), the original Java +implementation of KDL, with huge thanks to +[@hkolbeck](https://github.com/hkolbeck) for authoring them! diff --git a/tests/compliance.rs b/tests/compliance.rs new file mode 100644 index 0000000..60eaddb --- /dev/null +++ b/tests/compliance.rs @@ -0,0 +1,144 @@ +use std::{ + collections::HashMap, + fs, + path::{Path, PathBuf}, +}; + +use kdl::{KdlDocument, KdlError, KdlIdentifier, KdlValue}; +use miette::IntoDiagnostic; + +#[test] +fn spec_compliance() -> miette::Result<()> { + let input = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("tests") + .join("test_cases") + .join("input"); + for test_name in fs::read_dir(&input).into_diagnostic()? { + let test_path = test_name.into_diagnostic()?.path(); + println!( + "parsing {}:", + PathBuf::from(test_path.file_name().unwrap()).display() + ); + let src = normalize_line_endings(fs::read_to_string(&test_path).into_diagnostic()?); + println!("src: {}", src); + let res: Result = src.parse(); + validate_res(res, &test_path)?; + } + Ok(()) +} + +fn validate_res(res: Result, path: &Path) -> miette::Result<()> { + let file_name = path.file_name().unwrap(); + let expected_dir = path + .parent() + .unwrap() + .parent() + .unwrap() + .join("expected_kdl"); + let expected_path = expected_dir.join(file_name); + let underscored = expected_dir.join(&format!("_{}", PathBuf::from(file_name).display())); + if expected_path.exists() { + let doc = res?; + let expected = + normalize_line_endings(fs::read_to_string(&expected_path).into_diagnostic()?); + println!("expected: {}", expected); + let stringified = stringify_to_expected(doc); + println!("stringified: {}", stringified); + assert_eq!(stringified, expected); + } else if underscored.exists() { + println!( + "skipped reserialization for {}", + PathBuf::from(file_name).display() + ); + } else { + assert!(res.is_err(), "parse should not have succeeded"); + } + Ok(()) +} + +fn normalize_line_endings(src: String) -> String { + src.replace("\r\n", "\n") +} + +fn stringify_to_expected(mut doc: KdlDocument) -> String { + doc.fmt_no_comments(); + normalize_numbers(&mut doc); + normalize_strings(&mut doc); + dedupe_props(&mut doc); + remove_empty_children(&mut doc); + doc.to_string() +} + +fn normalize_numbers(doc: &mut KdlDocument) { + for node in doc.nodes_mut() { + for entry in node.entries_mut() { + if let Some(value) = entry.value().as_i64() { + *entry.value_mut() = KdlValue::Base10(value); + } + } + if let Some(children) = node.children_mut() { + normalize_numbers(children); + } + } +} + +fn normalize_strings(doc: &mut KdlDocument) { + for node in doc.nodes_mut() { + for entry in node.entries_mut() { + if let Some(value) = entry.value().as_string() { + *entry.value_mut() = KdlValue::String(value.to_string()); + } + } + if let Some(children) = node.children_mut() { + normalize_strings(children); + } + } +} + +fn dedupe_props(doc: &mut KdlDocument) { + for node in doc.nodes_mut() { + let mut props = HashMap::>::new(); + for (idx, entry) in node.entries_mut().iter_mut().enumerate() { + if let Some(name) = entry.name() { + if !props.contains_key(name) { + props.insert(name.clone(), Vec::new()); + } + if let Some(indices) = props.get_mut(name) { + indices.push(idx); + } + } + } + let new_entries = node + .entries() + .iter() + .enumerate() + .filter_map(|(idx, entry)| { + if let Some(name) = entry.name() { + if let Some(indices) = props.get(name) { + if &idx == indices.last().unwrap() { + return Some(entry.clone()); + } else { + return None; + } + } + } + Some(entry.clone()) + }); + *node.entries_mut() = new_entries.collect(); + if let Some(children) = node.children_mut() { + dedupe_props(children); + } + } +} + +fn remove_empty_children(doc: &mut KdlDocument) { + for node in doc.nodes_mut() { + let maybe_children = node.children_mut(); + if maybe_children.is_some() && maybe_children.as_ref().unwrap().nodes().is_empty() { + *maybe_children = None; + } + if let Some(children) = maybe_children { + remove_empty_children(children); + } + } +} diff --git a/tests/test_cases/expected_kdl/_negative_exponent.kdl b/tests/test_cases/expected_kdl/_negative_exponent.kdl new file mode 100644 index 0000000..88982b3 --- /dev/null +++ b/tests/test_cases/expected_kdl/_negative_exponent.kdl @@ -0,0 +1 @@ +node 1e-10 diff --git a/tests/test_cases/expected_kdl/_parse_all_arg_types.kdl b/tests/test_cases/expected_kdl/_parse_all_arg_types.kdl new file mode 100644 index 0000000..b9b369e --- /dev/null +++ b/tests/test_cases/expected_kdl/_parse_all_arg_types.kdl @@ -0,0 +1 @@ +node 1 1.0 10000000000.0 1e-10 1 7 2 "arg" "arg\\\\" true false null diff --git a/tests/test_cases/expected_kdl/_positive_exponent.kdl b/tests/test_cases/expected_kdl/_positive_exponent.kdl new file mode 100644 index 0000000..0592b9c --- /dev/null +++ b/tests/test_cases/expected_kdl/_positive_exponent.kdl @@ -0,0 +1 @@ +node 10000000000.0 diff --git a/tests/test_cases/expected_kdl/_sci_notation_large.kdl b/tests/test_cases/expected_kdl/_sci_notation_large.kdl new file mode 100644 index 0000000..7fbb60d --- /dev/null +++ b/tests/test_cases/expected_kdl/_sci_notation_large.kdl @@ -0,0 +1 @@ +node prop=1.23E+1000 diff --git a/tests/test_cases/expected_kdl/_sci_notation_small.kdl b/tests/test_cases/expected_kdl/_sci_notation_small.kdl new file mode 100644 index 0000000..5bd062c --- /dev/null +++ b/tests/test_cases/expected_kdl/_sci_notation_small.kdl @@ -0,0 +1 @@ +node prop=1.23E-1000 diff --git a/tests/test_cases/expected_kdl/_underscore_in_exponent.kdl b/tests/test_cases/expected_kdl/_underscore_in_exponent.kdl new file mode 100644 index 0000000..d539203 --- /dev/null +++ b/tests/test_cases/expected_kdl/_underscore_in_exponent.kdl @@ -0,0 +1 @@ +node 1e-100 diff --git a/tests/test_cases/expected_kdl/all_escapes.kdl b/tests/test_cases/expected_kdl/all_escapes.kdl new file mode 100644 index 0000000..c25f434 --- /dev/null +++ b/tests/test_cases/expected_kdl/all_escapes.kdl @@ -0,0 +1 @@ +node "\"\\/\b\f\n\r\t" diff --git a/tests/test_cases/expected_kdl/all_node_fields.kdl b/tests/test_cases/expected_kdl/all_node_fields.kdl new file mode 100644 index 0000000..fc8a9e4 --- /dev/null +++ b/tests/test_cases/expected_kdl/all_node_fields.kdl @@ -0,0 +1,3 @@ +node "arg" prop="val" { + inner_node +} diff --git a/tests/test_cases/expected_kdl/arg_and_prop_same_name.kdl b/tests/test_cases/expected_kdl/arg_and_prop_same_name.kdl new file mode 100644 index 0000000..27d9739 --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_and_prop_same_name.kdl @@ -0,0 +1 @@ +node "arg" arg="val" diff --git a/tests/test_cases/expected_kdl/arg_false_type.kdl b/tests/test_cases/expected_kdl/arg_false_type.kdl new file mode 100644 index 0000000..895945d --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_false_type.kdl @@ -0,0 +1 @@ +node (type)false diff --git a/tests/test_cases/expected_kdl/arg_float_type.kdl b/tests/test_cases/expected_kdl/arg_float_type.kdl new file mode 100644 index 0000000..d670786 --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_float_type.kdl @@ -0,0 +1 @@ +node (type)2.5 diff --git a/tests/test_cases/expected_kdl/arg_hex_type.kdl b/tests/test_cases/expected_kdl/arg_hex_type.kdl new file mode 100644 index 0000000..b1a494a --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_hex_type.kdl @@ -0,0 +1 @@ +node (type)16 diff --git a/tests/test_cases/expected_kdl/arg_null_type.kdl b/tests/test_cases/expected_kdl/arg_null_type.kdl new file mode 100644 index 0000000..476c5cd --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_null_type.kdl @@ -0,0 +1 @@ +node (type)null diff --git a/tests/test_cases/expected_kdl/arg_raw_string_type.kdl b/tests/test_cases/expected_kdl/arg_raw_string_type.kdl new file mode 100644 index 0000000..2808d53 --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_raw_string_type.kdl @@ -0,0 +1 @@ +node (type)"str" diff --git a/tests/test_cases/expected_kdl/arg_string_type.kdl b/tests/test_cases/expected_kdl/arg_string_type.kdl new file mode 100644 index 0000000..2808d53 --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_string_type.kdl @@ -0,0 +1 @@ +node (type)"str" diff --git a/tests/test_cases/expected_kdl/arg_true_type.kdl b/tests/test_cases/expected_kdl/arg_true_type.kdl new file mode 100644 index 0000000..6d1f9bc --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_true_type.kdl @@ -0,0 +1 @@ +node (type)true diff --git a/tests/test_cases/expected_kdl/arg_type.kdl b/tests/test_cases/expected_kdl/arg_type.kdl new file mode 100644 index 0000000..a0b84cf --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_type.kdl @@ -0,0 +1 @@ +node (type)"arg" diff --git a/tests/test_cases/expected_kdl/arg_zero_type.kdl b/tests/test_cases/expected_kdl/arg_zero_type.kdl new file mode 100644 index 0000000..73b2702 --- /dev/null +++ b/tests/test_cases/expected_kdl/arg_zero_type.kdl @@ -0,0 +1 @@ +node (type)0 diff --git a/tests/test_cases/expected_kdl/asterisk_in_block_comment.kdl b/tests/test_cases/expected_kdl/asterisk_in_block_comment.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/asterisk_in_block_comment.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/bare_emoji.kdl b/tests/test_cases/expected_kdl/bare_emoji.kdl new file mode 100644 index 0000000..60707c8 --- /dev/null +++ b/tests/test_cases/expected_kdl/bare_emoji.kdl @@ -0,0 +1 @@ +😁 "happy!" diff --git a/tests/test_cases/expected_kdl/binary.kdl b/tests/test_cases/expected_kdl/binary.kdl new file mode 100644 index 0000000..d14213e --- /dev/null +++ b/tests/test_cases/expected_kdl/binary.kdl @@ -0,0 +1 @@ +node 2 diff --git a/tests/test_cases/expected_kdl/binary_trailing_underscore.kdl b/tests/test_cases/expected_kdl/binary_trailing_underscore.kdl new file mode 100644 index 0000000..d14213e --- /dev/null +++ b/tests/test_cases/expected_kdl/binary_trailing_underscore.kdl @@ -0,0 +1 @@ +node 2 diff --git a/tests/test_cases/expected_kdl/binary_underscore.kdl b/tests/test_cases/expected_kdl/binary_underscore.kdl new file mode 100644 index 0000000..d14213e --- /dev/null +++ b/tests/test_cases/expected_kdl/binary_underscore.kdl @@ -0,0 +1 @@ +node 2 diff --git a/tests/test_cases/expected_kdl/blank_arg_type.kdl b/tests/test_cases/expected_kdl/blank_arg_type.kdl new file mode 100644 index 0000000..8c6fb21 --- /dev/null +++ b/tests/test_cases/expected_kdl/blank_arg_type.kdl @@ -0,0 +1 @@ +node ("")10 diff --git a/tests/test_cases/expected_kdl/blank_node_type.kdl b/tests/test_cases/expected_kdl/blank_node_type.kdl new file mode 100644 index 0000000..6b064a6 --- /dev/null +++ b/tests/test_cases/expected_kdl/blank_node_type.kdl @@ -0,0 +1 @@ +("")node diff --git a/tests/test_cases/expected_kdl/blank_prop_type.kdl b/tests/test_cases/expected_kdl/blank_prop_type.kdl new file mode 100644 index 0000000..c7b0e31 --- /dev/null +++ b/tests/test_cases/expected_kdl/blank_prop_type.kdl @@ -0,0 +1 @@ +node key=("")true diff --git a/tests/test_cases/expected_kdl/block_comment.kdl b/tests/test_cases/expected_kdl/block_comment.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/block_comment.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/block_comment_after_node.kdl b/tests/test_cases/expected_kdl/block_comment_after_node.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/block_comment_after_node.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/block_comment_before_node.kdl b/tests/test_cases/expected_kdl/block_comment_before_node.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/block_comment_before_node.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/block_comment_before_node_no_space.kdl b/tests/test_cases/expected_kdl/block_comment_before_node_no_space.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/block_comment_before_node_no_space.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/block_comment_newline.kdl b/tests/test_cases/expected_kdl/block_comment_newline.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/block_comment_newline.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/boolean_arg.kdl b/tests/test_cases/expected_kdl/boolean_arg.kdl new file mode 100644 index 0000000..9c7928e --- /dev/null +++ b/tests/test_cases/expected_kdl/boolean_arg.kdl @@ -0,0 +1 @@ +node false true diff --git a/tests/test_cases/expected_kdl/boolean_prop.kdl b/tests/test_cases/expected_kdl/boolean_prop.kdl new file mode 100644 index 0000000..712b60b --- /dev/null +++ b/tests/test_cases/expected_kdl/boolean_prop.kdl @@ -0,0 +1 @@ +node prop1=true prop2=false diff --git a/tests/test_cases/expected_kdl/commented_arg.kdl b/tests/test_cases/expected_kdl/commented_arg.kdl new file mode 100644 index 0000000..226fd56 --- /dev/null +++ b/tests/test_cases/expected_kdl/commented_arg.kdl @@ -0,0 +1 @@ +node "arg2" diff --git a/tests/test_cases/expected_kdl/commented_child.kdl b/tests/test_cases/expected_kdl/commented_child.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/commented_child.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/commented_line.kdl b/tests/test_cases/expected_kdl/commented_line.kdl new file mode 100644 index 0000000..2fa08cd --- /dev/null +++ b/tests/test_cases/expected_kdl/commented_line.kdl @@ -0,0 +1 @@ +node_2 diff --git a/tests/test_cases/expected_kdl/commented_node.kdl b/tests/test_cases/expected_kdl/commented_node.kdl new file mode 100644 index 0000000..2fa08cd --- /dev/null +++ b/tests/test_cases/expected_kdl/commented_node.kdl @@ -0,0 +1 @@ +node_2 diff --git a/tests/test_cases/expected_kdl/commented_prop.kdl b/tests/test_cases/expected_kdl/commented_prop.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/commented_prop.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/crlf_between_nodes.kdl b/tests/test_cases/expected_kdl/crlf_between_nodes.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/expected_kdl/crlf_between_nodes.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/expected_kdl/emoji.kdl b/tests/test_cases/expected_kdl/emoji.kdl new file mode 100644 index 0000000..3ed56e2 --- /dev/null +++ b/tests/test_cases/expected_kdl/emoji.kdl @@ -0,0 +1 @@ +node "😀" diff --git a/tests/test_cases/expected_kdl/empty.kdl b/tests/test_cases/expected_kdl/empty.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/empty.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/empty_child.kdl b/tests/test_cases/expected_kdl/empty_child.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/empty_child.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/empty_child_different_lines.kdl b/tests/test_cases/expected_kdl/empty_child_different_lines.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/empty_child_different_lines.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/empty_child_same_line.kdl b/tests/test_cases/expected_kdl/empty_child_same_line.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/empty_child_same_line.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/empty_child_whitespace.kdl b/tests/test_cases/expected_kdl/empty_child_whitespace.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/empty_child_whitespace.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/empty_quoted_node_id.kdl b/tests/test_cases/expected_kdl/empty_quoted_node_id.kdl new file mode 100644 index 0000000..ebfa893 --- /dev/null +++ b/tests/test_cases/expected_kdl/empty_quoted_node_id.kdl @@ -0,0 +1 @@ +"" "arg" diff --git a/tests/test_cases/expected_kdl/empty_quoted_prop_key.kdl b/tests/test_cases/expected_kdl/empty_quoted_prop_key.kdl new file mode 100644 index 0000000..e6e1310 --- /dev/null +++ b/tests/test_cases/expected_kdl/empty_quoted_prop_key.kdl @@ -0,0 +1 @@ +node ""="empty" diff --git a/tests/test_cases/expected_kdl/empty_string_arg.kdl b/tests/test_cases/expected_kdl/empty_string_arg.kdl new file mode 100644 index 0000000..8ade134 --- /dev/null +++ b/tests/test_cases/expected_kdl/empty_string_arg.kdl @@ -0,0 +1 @@ +node "" diff --git a/tests/test_cases/expected_kdl/esc_newline_in_string.kdl b/tests/test_cases/expected_kdl/esc_newline_in_string.kdl new file mode 100644 index 0000000..fd38cb0 --- /dev/null +++ b/tests/test_cases/expected_kdl/esc_newline_in_string.kdl @@ -0,0 +1 @@ +node "hello\nworld" diff --git a/tests/test_cases/expected_kdl/esc_unicode_in_string.kdl b/tests/test_cases/expected_kdl/esc_unicode_in_string.kdl new file mode 100644 index 0000000..fd38cb0 --- /dev/null +++ b/tests/test_cases/expected_kdl/esc_unicode_in_string.kdl @@ -0,0 +1 @@ +node "hello\nworld" diff --git a/tests/test_cases/expected_kdl/escline.kdl b/tests/test_cases/expected_kdl/escline.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/escline.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/escline_line_comment.kdl b/tests/test_cases/expected_kdl/escline_line_comment.kdl new file mode 100644 index 0000000..8a5dc33 --- /dev/null +++ b/tests/test_cases/expected_kdl/escline_line_comment.kdl @@ -0,0 +1 @@ +node "arg" "arg2\n" diff --git a/tests/test_cases/expected_kdl/escline_node.kdl b/tests/test_cases/expected_kdl/escline_node.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/expected_kdl/escline_node.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/expected_kdl/false_prefix_in_bare_id.kdl b/tests/test_cases/expected_kdl/false_prefix_in_bare_id.kdl new file mode 100644 index 0000000..cd962c4 --- /dev/null +++ b/tests/test_cases/expected_kdl/false_prefix_in_bare_id.kdl @@ -0,0 +1 @@ +false_id diff --git a/tests/test_cases/expected_kdl/false_prefix_in_prop_key.kdl b/tests/test_cases/expected_kdl/false_prefix_in_prop_key.kdl new file mode 100644 index 0000000..2d29843 --- /dev/null +++ b/tests/test_cases/expected_kdl/false_prefix_in_prop_key.kdl @@ -0,0 +1 @@ +node false_id=1 diff --git a/tests/test_cases/expected_kdl/hex.kdl b/tests/test_cases/expected_kdl/hex.kdl new file mode 100644 index 0000000..10e54fa --- /dev/null +++ b/tests/test_cases/expected_kdl/hex.kdl @@ -0,0 +1 @@ +node 1311768467294899695 diff --git a/tests/test_cases/expected_kdl/hex_int.kdl b/tests/test_cases/expected_kdl/hex_int.kdl new file mode 100644 index 0000000..10e54fa --- /dev/null +++ b/tests/test_cases/expected_kdl/hex_int.kdl @@ -0,0 +1 @@ +node 1311768467294899695 diff --git a/tests/test_cases/expected_kdl/hex_int_underscores.kdl b/tests/test_cases/expected_kdl/hex_int_underscores.kdl new file mode 100644 index 0000000..78f3ce0 --- /dev/null +++ b/tests/test_cases/expected_kdl/hex_int_underscores.kdl @@ -0,0 +1 @@ +node 737894400291 diff --git a/tests/test_cases/expected_kdl/hex_leading_zero.kdl b/tests/test_cases/expected_kdl/hex_leading_zero.kdl new file mode 100644 index 0000000..d20bd7d --- /dev/null +++ b/tests/test_cases/expected_kdl/hex_leading_zero.kdl @@ -0,0 +1 @@ +node 1 diff --git a/tests/test_cases/expected_kdl/int_multiple_underscore.kdl b/tests/test_cases/expected_kdl/int_multiple_underscore.kdl new file mode 100644 index 0000000..37cf4bf --- /dev/null +++ b/tests/test_cases/expected_kdl/int_multiple_underscore.kdl @@ -0,0 +1 @@ +node 1234 diff --git a/tests/test_cases/expected_kdl/just_block_comment.kdl b/tests/test_cases/expected_kdl/just_block_comment.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/just_block_comment.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/just_child.kdl b/tests/test_cases/expected_kdl/just_child.kdl new file mode 100644 index 0000000..ee79536 --- /dev/null +++ b/tests/test_cases/expected_kdl/just_child.kdl @@ -0,0 +1,3 @@ +node { + inner_node +} diff --git a/tests/test_cases/expected_kdl/just_newline.kdl b/tests/test_cases/expected_kdl/just_newline.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/just_newline.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/just_node_id.kdl b/tests/test_cases/expected_kdl/just_node_id.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/just_node_id.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/just_space.kdl b/tests/test_cases/expected_kdl/just_space.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/just_space.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/leading_newline.kdl b/tests/test_cases/expected_kdl/leading_newline.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/leading_newline.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/leading_zero_binary.kdl b/tests/test_cases/expected_kdl/leading_zero_binary.kdl new file mode 100644 index 0000000..d20bd7d --- /dev/null +++ b/tests/test_cases/expected_kdl/leading_zero_binary.kdl @@ -0,0 +1 @@ +node 1 diff --git a/tests/test_cases/expected_kdl/leading_zero_int.kdl b/tests/test_cases/expected_kdl/leading_zero_int.kdl new file mode 100644 index 0000000..0526c15 --- /dev/null +++ b/tests/test_cases/expected_kdl/leading_zero_int.kdl @@ -0,0 +1 @@ +node 11 diff --git a/tests/test_cases/expected_kdl/leading_zero_oct.kdl b/tests/test_cases/expected_kdl/leading_zero_oct.kdl new file mode 100644 index 0000000..d20bd7d --- /dev/null +++ b/tests/test_cases/expected_kdl/leading_zero_oct.kdl @@ -0,0 +1 @@ +node 1 diff --git a/tests/test_cases/expected_kdl/multiline_comment.kdl b/tests/test_cases/expected_kdl/multiline_comment.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/multiline_comment.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/multiline_nodes.kdl b/tests/test_cases/expected_kdl/multiline_nodes.kdl new file mode 100644 index 0000000..bec6d05 --- /dev/null +++ b/tests/test_cases/expected_kdl/multiline_nodes.kdl @@ -0,0 +1 @@ +node "arg1" "arg2" diff --git a/tests/test_cases/expected_kdl/multiline_string.kdl b/tests/test_cases/expected_kdl/multiline_string.kdl new file mode 100644 index 0000000..021493e --- /dev/null +++ b/tests/test_cases/expected_kdl/multiline_string.kdl @@ -0,0 +1 @@ +node " hey\neveryone\nhow goes?\n" diff --git a/tests/test_cases/expected_kdl/negative_float.kdl b/tests/test_cases/expected_kdl/negative_float.kdl new file mode 100644 index 0000000..c6a4cc5 --- /dev/null +++ b/tests/test_cases/expected_kdl/negative_float.kdl @@ -0,0 +1 @@ +node -1.0 key=-10.0 diff --git a/tests/test_cases/expected_kdl/negative_int.kdl b/tests/test_cases/expected_kdl/negative_int.kdl new file mode 100644 index 0000000..269da03 --- /dev/null +++ b/tests/test_cases/expected_kdl/negative_int.kdl @@ -0,0 +1 @@ +node -10 prop=-15 diff --git a/tests/test_cases/expected_kdl/nested_block_comment.kdl b/tests/test_cases/expected_kdl/nested_block_comment.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/nested_block_comment.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/nested_children.kdl b/tests/test_cases/expected_kdl/nested_children.kdl new file mode 100644 index 0000000..e44720d --- /dev/null +++ b/tests/test_cases/expected_kdl/nested_children.kdl @@ -0,0 +1,5 @@ +node1 { + node2 { + node + } +} diff --git a/tests/test_cases/expected_kdl/nested_comments.kdl b/tests/test_cases/expected_kdl/nested_comments.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/nested_comments.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/nested_multiline_block_comment.kdl b/tests/test_cases/expected_kdl/nested_multiline_block_comment.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/nested_multiline_block_comment.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/newline_between_nodes.kdl b/tests/test_cases/expected_kdl/newline_between_nodes.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/expected_kdl/newline_between_nodes.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/expected_kdl/newlines_in_block_comment.kdl b/tests/test_cases/expected_kdl/newlines_in_block_comment.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/newlines_in_block_comment.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/no_decimal_exponent.kdl b/tests/test_cases/expected_kdl/no_decimal_exponent.kdl new file mode 100644 index 0000000..0592b9c --- /dev/null +++ b/tests/test_cases/expected_kdl/no_decimal_exponent.kdl @@ -0,0 +1 @@ +node 10000000000.0 diff --git a/tests/test_cases/expected_kdl/node_false.kdl b/tests/test_cases/expected_kdl/node_false.kdl new file mode 100644 index 0000000..ef60c44 --- /dev/null +++ b/tests/test_cases/expected_kdl/node_false.kdl @@ -0,0 +1 @@ +node false diff --git a/tests/test_cases/expected_kdl/node_true.kdl b/tests/test_cases/expected_kdl/node_true.kdl new file mode 100644 index 0000000..4b02a06 --- /dev/null +++ b/tests/test_cases/expected_kdl/node_true.kdl @@ -0,0 +1 @@ +node true diff --git a/tests/test_cases/expected_kdl/node_type.kdl b/tests/test_cases/expected_kdl/node_type.kdl new file mode 100644 index 0000000..c790643 --- /dev/null +++ b/tests/test_cases/expected_kdl/node_type.kdl @@ -0,0 +1 @@ +(type)node diff --git a/tests/test_cases/expected_kdl/null_arg.kdl b/tests/test_cases/expected_kdl/null_arg.kdl new file mode 100644 index 0000000..c0e6cb5 --- /dev/null +++ b/tests/test_cases/expected_kdl/null_arg.kdl @@ -0,0 +1 @@ +node null diff --git a/tests/test_cases/expected_kdl/null_prefix_in_bare_id.kdl b/tests/test_cases/expected_kdl/null_prefix_in_bare_id.kdl new file mode 100644 index 0000000..9e0cf15 --- /dev/null +++ b/tests/test_cases/expected_kdl/null_prefix_in_bare_id.kdl @@ -0,0 +1 @@ +null_id diff --git a/tests/test_cases/expected_kdl/null_prefix_in_prop_key.kdl b/tests/test_cases/expected_kdl/null_prefix_in_prop_key.kdl new file mode 100644 index 0000000..1e1472b --- /dev/null +++ b/tests/test_cases/expected_kdl/null_prefix_in_prop_key.kdl @@ -0,0 +1 @@ +node null_id=1 diff --git a/tests/test_cases/expected_kdl/null_prop.kdl b/tests/test_cases/expected_kdl/null_prop.kdl new file mode 100644 index 0000000..85ef005 --- /dev/null +++ b/tests/test_cases/expected_kdl/null_prop.kdl @@ -0,0 +1 @@ +node prop=null diff --git a/tests/test_cases/expected_kdl/numeric_arg.kdl b/tests/test_cases/expected_kdl/numeric_arg.kdl new file mode 100644 index 0000000..33bfe55 --- /dev/null +++ b/tests/test_cases/expected_kdl/numeric_arg.kdl @@ -0,0 +1 @@ +node 15.7 diff --git a/tests/test_cases/expected_kdl/numeric_prop.kdl b/tests/test_cases/expected_kdl/numeric_prop.kdl new file mode 100644 index 0000000..934ae83 --- /dev/null +++ b/tests/test_cases/expected_kdl/numeric_prop.kdl @@ -0,0 +1 @@ +node prop=10.0 diff --git a/tests/test_cases/expected_kdl/octal.kdl b/tests/test_cases/expected_kdl/octal.kdl new file mode 100644 index 0000000..225217b --- /dev/null +++ b/tests/test_cases/expected_kdl/octal.kdl @@ -0,0 +1 @@ +node 16434824 diff --git a/tests/test_cases/expected_kdl/only_cr.kdl b/tests/test_cases/expected_kdl/only_cr.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/only_cr.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/only_line_comment.kdl b/tests/test_cases/expected_kdl/only_line_comment.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/only_line_comment.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/only_line_comment_crlf.kdl b/tests/test_cases/expected_kdl/only_line_comment_crlf.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/only_line_comment_crlf.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/only_line_comment_newline.kdl b/tests/test_cases/expected_kdl/only_line_comment_newline.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/only_line_comment_newline.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/positive_int.kdl b/tests/test_cases/expected_kdl/positive_int.kdl new file mode 100644 index 0000000..5b622c0 --- /dev/null +++ b/tests/test_cases/expected_kdl/positive_int.kdl @@ -0,0 +1 @@ +node 10 diff --git a/tests/test_cases/expected_kdl/preserve_duplicate_nodes.kdl b/tests/test_cases/expected_kdl/preserve_duplicate_nodes.kdl new file mode 100644 index 0000000..3e545b1 --- /dev/null +++ b/tests/test_cases/expected_kdl/preserve_duplicate_nodes.kdl @@ -0,0 +1,2 @@ +node +node diff --git a/tests/test_cases/expected_kdl/preserve_node_order.kdl b/tests/test_cases/expected_kdl/preserve_node_order.kdl new file mode 100644 index 0000000..24c817f --- /dev/null +++ b/tests/test_cases/expected_kdl/preserve_node_order.kdl @@ -0,0 +1,3 @@ +node2 +node5 +node1 diff --git a/tests/test_cases/expected_kdl/prop_false_type.kdl b/tests/test_cases/expected_kdl/prop_false_type.kdl new file mode 100644 index 0000000..3377323 --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_false_type.kdl @@ -0,0 +1 @@ +node key=(type)false diff --git a/tests/test_cases/expected_kdl/prop_float_type.kdl b/tests/test_cases/expected_kdl/prop_float_type.kdl new file mode 100644 index 0000000..166c78b --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_float_type.kdl @@ -0,0 +1 @@ +node key=(type)25000000000.0 diff --git a/tests/test_cases/expected_kdl/prop_hex_type.kdl b/tests/test_cases/expected_kdl/prop_hex_type.kdl new file mode 100644 index 0000000..05bef6f --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_hex_type.kdl @@ -0,0 +1 @@ +node key=(type)16 diff --git a/tests/test_cases/expected_kdl/prop_null_type.kdl b/tests/test_cases/expected_kdl/prop_null_type.kdl new file mode 100644 index 0000000..bafaddc --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_null_type.kdl @@ -0,0 +1 @@ +node key=(type)null diff --git a/tests/test_cases/expected_kdl/prop_raw_string_type.kdl b/tests/test_cases/expected_kdl/prop_raw_string_type.kdl new file mode 100644 index 0000000..50e2d2c --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_raw_string_type.kdl @@ -0,0 +1 @@ +node key=(type)"str" diff --git a/tests/test_cases/expected_kdl/prop_string_type.kdl b/tests/test_cases/expected_kdl/prop_string_type.kdl new file mode 100644 index 0000000..50e2d2c --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_string_type.kdl @@ -0,0 +1 @@ +node key=(type)"str" diff --git a/tests/test_cases/expected_kdl/prop_true_type.kdl b/tests/test_cases/expected_kdl/prop_true_type.kdl new file mode 100644 index 0000000..c4eebb6 --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_true_type.kdl @@ -0,0 +1 @@ +node key=(type)true diff --git a/tests/test_cases/expected_kdl/prop_type.kdl b/tests/test_cases/expected_kdl/prop_type.kdl new file mode 100644 index 0000000..c4eebb6 --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_type.kdl @@ -0,0 +1 @@ +node key=(type)true diff --git a/tests/test_cases/expected_kdl/prop_zero_type.kdl b/tests/test_cases/expected_kdl/prop_zero_type.kdl new file mode 100644 index 0000000..ad243ed --- /dev/null +++ b/tests/test_cases/expected_kdl/prop_zero_type.kdl @@ -0,0 +1 @@ +node key=(type)0 diff --git a/tests/test_cases/expected_kdl/quoted_arg_type.kdl b/tests/test_cases/expected_kdl/quoted_arg_type.kdl new file mode 100644 index 0000000..49ffc6a --- /dev/null +++ b/tests/test_cases/expected_kdl/quoted_arg_type.kdl @@ -0,0 +1 @@ +node ("type/")10 diff --git a/tests/test_cases/expected_kdl/quoted_node_name.kdl b/tests/test_cases/expected_kdl/quoted_node_name.kdl new file mode 100644 index 0000000..672e7ff --- /dev/null +++ b/tests/test_cases/expected_kdl/quoted_node_name.kdl @@ -0,0 +1 @@ +"0node" diff --git a/tests/test_cases/expected_kdl/quoted_node_type.kdl b/tests/test_cases/expected_kdl/quoted_node_type.kdl new file mode 100644 index 0000000..c66d905 --- /dev/null +++ b/tests/test_cases/expected_kdl/quoted_node_type.kdl @@ -0,0 +1 @@ +("type/")node diff --git a/tests/test_cases/expected_kdl/quoted_numeric.kdl b/tests/test_cases/expected_kdl/quoted_numeric.kdl new file mode 100644 index 0000000..fa0ed33 --- /dev/null +++ b/tests/test_cases/expected_kdl/quoted_numeric.kdl @@ -0,0 +1 @@ +node prop="10.0" diff --git a/tests/test_cases/expected_kdl/quoted_prop_name.kdl b/tests/test_cases/expected_kdl/quoted_prop_name.kdl new file mode 100644 index 0000000..170a05a --- /dev/null +++ b/tests/test_cases/expected_kdl/quoted_prop_name.kdl @@ -0,0 +1 @@ +node "0prop"="val" diff --git a/tests/test_cases/expected_kdl/quoted_prop_type.kdl b/tests/test_cases/expected_kdl/quoted_prop_type.kdl new file mode 100644 index 0000000..0e2b920 --- /dev/null +++ b/tests/test_cases/expected_kdl/quoted_prop_type.kdl @@ -0,0 +1 @@ +node key=("type/")true diff --git a/tests/test_cases/expected_kdl/r_node.kdl b/tests/test_cases/expected_kdl/r_node.kdl new file mode 100644 index 0000000..4a98807 --- /dev/null +++ b/tests/test_cases/expected_kdl/r_node.kdl @@ -0,0 +1 @@ +r "arg" diff --git a/tests/test_cases/expected_kdl/raw_arg_type.kdl b/tests/test_cases/expected_kdl/raw_arg_type.kdl new file mode 100644 index 0000000..6d1f9bc --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_arg_type.kdl @@ -0,0 +1 @@ +node (type)true diff --git a/tests/test_cases/expected_kdl/raw_node_name.kdl b/tests/test_cases/expected_kdl/raw_node_name.kdl new file mode 100644 index 0000000..984061e --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_node_name.kdl @@ -0,0 +1 @@ +"\\node" diff --git a/tests/test_cases/expected_kdl/raw_node_type.kdl b/tests/test_cases/expected_kdl/raw_node_type.kdl new file mode 100644 index 0000000..c790643 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_node_type.kdl @@ -0,0 +1 @@ +(type)node diff --git a/tests/test_cases/expected_kdl/raw_prop_type.kdl b/tests/test_cases/expected_kdl/raw_prop_type.kdl new file mode 100644 index 0000000..c4eebb6 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_prop_type.kdl @@ -0,0 +1 @@ +node key=(type)true diff --git a/tests/test_cases/expected_kdl/raw_string_arg.kdl b/tests/test_cases/expected_kdl/raw_string_arg.kdl new file mode 100644 index 0000000..a909993 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_arg.kdl @@ -0,0 +1,3 @@ +node_1 "arg\\n" +node_2 "\"arg\\n\"and stuff" +node_3 "#\"arg\\n\"#and stuff" diff --git a/tests/test_cases/expected_kdl/raw_string_backslash.kdl b/tests/test_cases/expected_kdl/raw_string_backslash.kdl new file mode 100644 index 0000000..551cf10 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_backslash.kdl @@ -0,0 +1 @@ +node "\\n" diff --git a/tests/test_cases/expected_kdl/raw_string_hash_no_esc.kdl b/tests/test_cases/expected_kdl/raw_string_hash_no_esc.kdl new file mode 100644 index 0000000..9964729 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_hash_no_esc.kdl @@ -0,0 +1 @@ +node "#" diff --git a/tests/test_cases/expected_kdl/raw_string_just_backslash.kdl b/tests/test_cases/expected_kdl/raw_string_just_backslash.kdl new file mode 100644 index 0000000..5702080 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_just_backslash.kdl @@ -0,0 +1 @@ +node "\\" diff --git a/tests/test_cases/expected_kdl/raw_string_just_quote.kdl b/tests/test_cases/expected_kdl/raw_string_just_quote.kdl new file mode 100644 index 0000000..0a76315 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_just_quote.kdl @@ -0,0 +1 @@ +node "\"" diff --git a/tests/test_cases/expected_kdl/raw_string_multiple_hash.kdl b/tests/test_cases/expected_kdl/raw_string_multiple_hash.kdl new file mode 100644 index 0000000..1ba63d1 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_multiple_hash.kdl @@ -0,0 +1 @@ +node "\"#\"##" diff --git a/tests/test_cases/expected_kdl/raw_string_newline.kdl b/tests/test_cases/expected_kdl/raw_string_newline.kdl new file mode 100644 index 0000000..d738029 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_newline.kdl @@ -0,0 +1 @@ +node "\nhello\nworld\n" diff --git a/tests/test_cases/expected_kdl/raw_string_prop.kdl b/tests/test_cases/expected_kdl/raw_string_prop.kdl new file mode 100644 index 0000000..0762d88 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_prop.kdl @@ -0,0 +1,3 @@ +node_1 prop="arg\\n" +node_2 prop="\"arg\"\\n" +node_3 prop="#\"arg\"#\\n" diff --git a/tests/test_cases/expected_kdl/raw_string_quote.kdl b/tests/test_cases/expected_kdl/raw_string_quote.kdl new file mode 100644 index 0000000..d59edb6 --- /dev/null +++ b/tests/test_cases/expected_kdl/raw_string_quote.kdl @@ -0,0 +1 @@ +node "a\"b" diff --git a/tests/test_cases/expected_kdl/repeated_arg.kdl b/tests/test_cases/expected_kdl/repeated_arg.kdl new file mode 100644 index 0000000..849fee0 --- /dev/null +++ b/tests/test_cases/expected_kdl/repeated_arg.kdl @@ -0,0 +1 @@ +node "arg" "arg" diff --git a/tests/test_cases/expected_kdl/repeated_prop.kdl b/tests/test_cases/expected_kdl/repeated_prop.kdl new file mode 100644 index 0000000..46c9236 --- /dev/null +++ b/tests/test_cases/expected_kdl/repeated_prop.kdl @@ -0,0 +1 @@ +node prop=11 diff --git a/tests/test_cases/expected_kdl/same_args.kdl b/tests/test_cases/expected_kdl/same_args.kdl new file mode 100644 index 0000000..6b8ae13 --- /dev/null +++ b/tests/test_cases/expected_kdl/same_args.kdl @@ -0,0 +1 @@ +node "whee" "whee" diff --git a/tests/test_cases/expected_kdl/same_name_nodes.kdl b/tests/test_cases/expected_kdl/same_name_nodes.kdl new file mode 100644 index 0000000..3e545b1 --- /dev/null +++ b/tests/test_cases/expected_kdl/same_name_nodes.kdl @@ -0,0 +1,2 @@ +node +node diff --git a/tests/test_cases/expected_kdl/semicolon_after_child.kdl b/tests/test_cases/expected_kdl/semicolon_after_child.kdl new file mode 100644 index 0000000..e3346f1 --- /dev/null +++ b/tests/test_cases/expected_kdl/semicolon_after_child.kdl @@ -0,0 +1,3 @@ +node { + childnode +} diff --git a/tests/test_cases/expected_kdl/semicolon_in_child.kdl b/tests/test_cases/expected_kdl/semicolon_in_child.kdl new file mode 100644 index 0000000..9d8395e --- /dev/null +++ b/tests/test_cases/expected_kdl/semicolon_in_child.kdl @@ -0,0 +1,3 @@ +node1 { + node2 +} diff --git a/tests/test_cases/expected_kdl/semicolon_separated.kdl b/tests/test_cases/expected_kdl/semicolon_separated.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/expected_kdl/semicolon_separated.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/expected_kdl/semicolon_separated_nodes.kdl b/tests/test_cases/expected_kdl/semicolon_separated_nodes.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/expected_kdl/semicolon_separated_nodes.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/expected_kdl/semicolon_terminated.kdl b/tests/test_cases/expected_kdl/semicolon_terminated.kdl new file mode 100644 index 0000000..f50c4f2 --- /dev/null +++ b/tests/test_cases/expected_kdl/semicolon_terminated.kdl @@ -0,0 +1 @@ +node1 diff --git a/tests/test_cases/expected_kdl/single_arg.kdl b/tests/test_cases/expected_kdl/single_arg.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/single_arg.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/single_prop.kdl b/tests/test_cases/expected_kdl/single_prop.kdl new file mode 100644 index 0000000..a0d0062 --- /dev/null +++ b/tests/test_cases/expected_kdl/single_prop.kdl @@ -0,0 +1 @@ +node prop="val" diff --git a/tests/test_cases/expected_kdl/slashdash_arg_after_newline_esc.kdl b/tests/test_cases/expected_kdl/slashdash_arg_after_newline_esc.kdl new file mode 100644 index 0000000..226fd56 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_arg_after_newline_esc.kdl @@ -0,0 +1 @@ +node "arg2" diff --git a/tests/test_cases/expected_kdl/slashdash_arg_before_newline_esc.kdl b/tests/test_cases/expected_kdl/slashdash_arg_before_newline_esc.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_arg_before_newline_esc.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/slashdash_child.kdl b/tests/test_cases/expected_kdl/slashdash_child.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_child.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/slashdash_empty_child.kdl b/tests/test_cases/expected_kdl/slashdash_empty_child.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_empty_child.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/slashdash_full_node.kdl b/tests/test_cases/expected_kdl/slashdash_full_node.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_full_node.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/slashdash_in_slashdash.kdl b/tests/test_cases/expected_kdl/slashdash_in_slashdash.kdl new file mode 100644 index 0000000..6810417 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_in_slashdash.kdl @@ -0,0 +1 @@ +node2 diff --git a/tests/test_cases/expected_kdl/slashdash_negative_number.kdl b/tests/test_cases/expected_kdl/slashdash_negative_number.kdl new file mode 100644 index 0000000..b76b862 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_negative_number.kdl @@ -0,0 +1 @@ +node 2.0 diff --git a/tests/test_cases/expected_kdl/slashdash_node_in_child.kdl b/tests/test_cases/expected_kdl/slashdash_node_in_child.kdl new file mode 100644 index 0000000..f50c4f2 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_node_in_child.kdl @@ -0,0 +1 @@ +node1 diff --git a/tests/test_cases/expected_kdl/slashdash_node_with_child.kdl b/tests/test_cases/expected_kdl/slashdash_node_with_child.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_node_with_child.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/slashdash_only_node.kdl b/tests/test_cases/expected_kdl/slashdash_only_node.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_only_node.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/slashdash_only_node_with_space.kdl b/tests/test_cases/expected_kdl/slashdash_only_node_with_space.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_only_node_with_space.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/expected_kdl/slashdash_prop.kdl b/tests/test_cases/expected_kdl/slashdash_prop.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_prop.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/slashdash_raw_prop_key.kdl b/tests/test_cases/expected_kdl/slashdash_raw_prop_key.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_raw_prop_key.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/slashdash_repeated_prop.kdl b/tests/test_cases/expected_kdl/slashdash_repeated_prop.kdl new file mode 100644 index 0000000..82c6972 --- /dev/null +++ b/tests/test_cases/expected_kdl/slashdash_repeated_prop.kdl @@ -0,0 +1 @@ +node arg="correct" diff --git a/tests/test_cases/expected_kdl/string_arg.kdl b/tests/test_cases/expected_kdl/string_arg.kdl new file mode 100644 index 0000000..b3a0426 --- /dev/null +++ b/tests/test_cases/expected_kdl/string_arg.kdl @@ -0,0 +1 @@ +node "arg" diff --git a/tests/test_cases/expected_kdl/string_prop.kdl b/tests/test_cases/expected_kdl/string_prop.kdl new file mode 100644 index 0000000..a0d0062 --- /dev/null +++ b/tests/test_cases/expected_kdl/string_prop.kdl @@ -0,0 +1 @@ +node prop="val" diff --git a/tests/test_cases/expected_kdl/tab_space.kdl b/tests/test_cases/expected_kdl/tab_space.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/tab_space.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/trailing_crlf.kdl b/tests/test_cases/expected_kdl/trailing_crlf.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/expected_kdl/trailing_crlf.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/expected_kdl/trailing_underscore_hex.kdl b/tests/test_cases/expected_kdl/trailing_underscore_hex.kdl new file mode 100644 index 0000000..f426d4d --- /dev/null +++ b/tests/test_cases/expected_kdl/trailing_underscore_hex.kdl @@ -0,0 +1 @@ +node 1194684 diff --git a/tests/test_cases/expected_kdl/trailing_underscore_octal.kdl b/tests/test_cases/expected_kdl/trailing_underscore_octal.kdl new file mode 100644 index 0000000..9152a92 --- /dev/null +++ b/tests/test_cases/expected_kdl/trailing_underscore_octal.kdl @@ -0,0 +1 @@ +node 83 diff --git a/tests/test_cases/expected_kdl/true_prefix_in_bare_id.kdl b/tests/test_cases/expected_kdl/true_prefix_in_bare_id.kdl new file mode 100644 index 0000000..49c9d0d --- /dev/null +++ b/tests/test_cases/expected_kdl/true_prefix_in_bare_id.kdl @@ -0,0 +1 @@ +true_id diff --git a/tests/test_cases/expected_kdl/true_prefix_in_prop_key.kdl b/tests/test_cases/expected_kdl/true_prefix_in_prop_key.kdl new file mode 100644 index 0000000..2af7a1c --- /dev/null +++ b/tests/test_cases/expected_kdl/true_prefix_in_prop_key.kdl @@ -0,0 +1 @@ +node true_id=1 diff --git a/tests/test_cases/expected_kdl/two_nodes.kdl b/tests/test_cases/expected_kdl/two_nodes.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/expected_kdl/two_nodes.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/expected_kdl/underscore_in_float.kdl b/tests/test_cases/expected_kdl/underscore_in_float.kdl new file mode 100644 index 0000000..6aafd1c --- /dev/null +++ b/tests/test_cases/expected_kdl/underscore_in_float.kdl @@ -0,0 +1 @@ +node 11.0 diff --git a/tests/test_cases/expected_kdl/underscore_in_fraction.kdl b/tests/test_cases/expected_kdl/underscore_in_fraction.kdl new file mode 100644 index 0000000..29bb938 --- /dev/null +++ b/tests/test_cases/expected_kdl/underscore_in_fraction.kdl @@ -0,0 +1 @@ +node 1.02 diff --git a/tests/test_cases/expected_kdl/underscore_in_int.kdl b/tests/test_cases/expected_kdl/underscore_in_int.kdl new file mode 100644 index 0000000..5b622c0 --- /dev/null +++ b/tests/test_cases/expected_kdl/underscore_in_int.kdl @@ -0,0 +1 @@ +node 10 diff --git a/tests/test_cases/expected_kdl/underscore_in_octal.kdl b/tests/test_cases/expected_kdl/underscore_in_octal.kdl new file mode 100644 index 0000000..f4f6039 --- /dev/null +++ b/tests/test_cases/expected_kdl/underscore_in_octal.kdl @@ -0,0 +1 @@ +node 342391 diff --git a/tests/test_cases/expected_kdl/unusual_bare_id_chars_in_quoted_id.kdl b/tests/test_cases/expected_kdl/unusual_bare_id_chars_in_quoted_id.kdl new file mode 100644 index 0000000..d2dcd19 --- /dev/null +++ b/tests/test_cases/expected_kdl/unusual_bare_id_chars_in_quoted_id.kdl @@ -0,0 +1 @@ +foo123~!@#$%^&*.:'|?+ "weeee" diff --git a/tests/test_cases/expected_kdl/unusual_chars_in_bare_id.kdl b/tests/test_cases/expected_kdl/unusual_chars_in_bare_id.kdl new file mode 100644 index 0000000..d2dcd19 --- /dev/null +++ b/tests/test_cases/expected_kdl/unusual_chars_in_bare_id.kdl @@ -0,0 +1 @@ +foo123~!@#$%^&*.:'|?+ "weeee" diff --git a/tests/test_cases/expected_kdl/zero_arg.kdl b/tests/test_cases/expected_kdl/zero_arg.kdl new file mode 100644 index 0000000..74405b6 --- /dev/null +++ b/tests/test_cases/expected_kdl/zero_arg.kdl @@ -0,0 +1 @@ +node 0 diff --git a/tests/test_cases/expected_kdl/zero_float.kdl b/tests/test_cases/expected_kdl/zero_float.kdl new file mode 100644 index 0000000..fd5b1f1 --- /dev/null +++ b/tests/test_cases/expected_kdl/zero_float.kdl @@ -0,0 +1 @@ +node 0.0 diff --git a/tests/test_cases/expected_kdl/zero_int.kdl b/tests/test_cases/expected_kdl/zero_int.kdl new file mode 100644 index 0000000..74405b6 --- /dev/null +++ b/tests/test_cases/expected_kdl/zero_int.kdl @@ -0,0 +1 @@ +node 0 diff --git a/tests/test_cases/input/all_escapes.kdl b/tests/test_cases/input/all_escapes.kdl new file mode 100644 index 0000000..5bb1dc3 --- /dev/null +++ b/tests/test_cases/input/all_escapes.kdl @@ -0,0 +1 @@ +node "\"\\\/\b\f\n\r\t" diff --git a/tests/test_cases/input/all_node_fields.kdl b/tests/test_cases/input/all_node_fields.kdl new file mode 100644 index 0000000..fc8a9e4 --- /dev/null +++ b/tests/test_cases/input/all_node_fields.kdl @@ -0,0 +1,3 @@ +node "arg" prop="val" { + inner_node +} diff --git a/tests/test_cases/input/arg_and_prop_same_name.kdl b/tests/test_cases/input/arg_and_prop_same_name.kdl new file mode 100644 index 0000000..b830f56 --- /dev/null +++ b/tests/test_cases/input/arg_and_prop_same_name.kdl @@ -0,0 +1 @@ +node "arg" arg="val" \ No newline at end of file diff --git a/tests/test_cases/input/arg_false_type.kdl b/tests/test_cases/input/arg_false_type.kdl new file mode 100644 index 0000000..895945d --- /dev/null +++ b/tests/test_cases/input/arg_false_type.kdl @@ -0,0 +1 @@ +node (type)false diff --git a/tests/test_cases/input/arg_float_type.kdl b/tests/test_cases/input/arg_float_type.kdl new file mode 100644 index 0000000..fd6947e --- /dev/null +++ b/tests/test_cases/input/arg_float_type.kdl @@ -0,0 +1 @@ +node (type)2.5 \ No newline at end of file diff --git a/tests/test_cases/input/arg_hex_type.kdl b/tests/test_cases/input/arg_hex_type.kdl new file mode 100644 index 0000000..ec44f6c --- /dev/null +++ b/tests/test_cases/input/arg_hex_type.kdl @@ -0,0 +1 @@ +node (type)0x10 diff --git a/tests/test_cases/input/arg_null_type.kdl b/tests/test_cases/input/arg_null_type.kdl new file mode 100644 index 0000000..476c5cd --- /dev/null +++ b/tests/test_cases/input/arg_null_type.kdl @@ -0,0 +1 @@ +node (type)null diff --git a/tests/test_cases/input/arg_raw_string_type.kdl b/tests/test_cases/input/arg_raw_string_type.kdl new file mode 100644 index 0000000..2808d53 --- /dev/null +++ b/tests/test_cases/input/arg_raw_string_type.kdl @@ -0,0 +1 @@ +node (type)"str" diff --git a/tests/test_cases/input/arg_string_type.kdl b/tests/test_cases/input/arg_string_type.kdl new file mode 100644 index 0000000..1a141b2 --- /dev/null +++ b/tests/test_cases/input/arg_string_type.kdl @@ -0,0 +1 @@ +node (type)"str" \ No newline at end of file diff --git a/tests/test_cases/input/arg_true_type.kdl b/tests/test_cases/input/arg_true_type.kdl new file mode 100644 index 0000000..6d1f9bc --- /dev/null +++ b/tests/test_cases/input/arg_true_type.kdl @@ -0,0 +1 @@ +node (type)true diff --git a/tests/test_cases/input/arg_type.kdl b/tests/test_cases/input/arg_type.kdl new file mode 100644 index 0000000..a0b84cf --- /dev/null +++ b/tests/test_cases/input/arg_type.kdl @@ -0,0 +1 @@ +node (type)"arg" diff --git a/tests/test_cases/input/arg_zero_type.kdl b/tests/test_cases/input/arg_zero_type.kdl new file mode 100644 index 0000000..73b2702 --- /dev/null +++ b/tests/test_cases/input/arg_zero_type.kdl @@ -0,0 +1 @@ +node (type)0 diff --git a/tests/test_cases/input/asterisk_in_block_comment.kdl b/tests/test_cases/input/asterisk_in_block_comment.kdl new file mode 100644 index 0000000..46ec76f --- /dev/null +++ b/tests/test_cases/input/asterisk_in_block_comment.kdl @@ -0,0 +1 @@ +node /* * */ \ No newline at end of file diff --git a/tests/test_cases/input/backslash_in_bare_id.kdl b/tests/test_cases/input/backslash_in_bare_id.kdl new file mode 100644 index 0000000..5615277 --- /dev/null +++ b/tests/test_cases/input/backslash_in_bare_id.kdl @@ -0,0 +1 @@ +foo123\bar "weeee" diff --git a/tests/test_cases/input/bare_arg.kdl b/tests/test_cases/input/bare_arg.kdl new file mode 100644 index 0000000..ec2a21f --- /dev/null +++ b/tests/test_cases/input/bare_arg.kdl @@ -0,0 +1 @@ +node a \ No newline at end of file diff --git a/tests/test_cases/input/bare_emoji.kdl b/tests/test_cases/input/bare_emoji.kdl new file mode 100644 index 0000000..60707c8 --- /dev/null +++ b/tests/test_cases/input/bare_emoji.kdl @@ -0,0 +1 @@ +😁 "happy!" diff --git a/tests/test_cases/input/binary.kdl b/tests/test_cases/input/binary.kdl new file mode 100644 index 0000000..bf12920 --- /dev/null +++ b/tests/test_cases/input/binary.kdl @@ -0,0 +1 @@ +node 0b10 \ No newline at end of file diff --git a/tests/test_cases/input/binary_trailing_underscore.kdl b/tests/test_cases/input/binary_trailing_underscore.kdl new file mode 100644 index 0000000..6da7588 --- /dev/null +++ b/tests/test_cases/input/binary_trailing_underscore.kdl @@ -0,0 +1 @@ +node 0b10_ \ No newline at end of file diff --git a/tests/test_cases/input/binary_underscore.kdl b/tests/test_cases/input/binary_underscore.kdl new file mode 100644 index 0000000..c914517 --- /dev/null +++ b/tests/test_cases/input/binary_underscore.kdl @@ -0,0 +1 @@ +node 0b1_0 diff --git a/tests/test_cases/input/blank_arg_type.kdl b/tests/test_cases/input/blank_arg_type.kdl new file mode 100644 index 0000000..0b298e6 --- /dev/null +++ b/tests/test_cases/input/blank_arg_type.kdl @@ -0,0 +1 @@ +node ("")10 \ No newline at end of file diff --git a/tests/test_cases/input/blank_node_type.kdl b/tests/test_cases/input/blank_node_type.kdl new file mode 100644 index 0000000..6b064a6 --- /dev/null +++ b/tests/test_cases/input/blank_node_type.kdl @@ -0,0 +1 @@ +("")node diff --git a/tests/test_cases/input/blank_prop_type.kdl b/tests/test_cases/input/blank_prop_type.kdl new file mode 100644 index 0000000..898f90d --- /dev/null +++ b/tests/test_cases/input/blank_prop_type.kdl @@ -0,0 +1 @@ +node key=("")true \ No newline at end of file diff --git a/tests/test_cases/input/block_comment.kdl b/tests/test_cases/input/block_comment.kdl new file mode 100644 index 0000000..e6eddb9 --- /dev/null +++ b/tests/test_cases/input/block_comment.kdl @@ -0,0 +1 @@ +node /* comment */ "arg" \ No newline at end of file diff --git a/tests/test_cases/input/block_comment_after_node.kdl b/tests/test_cases/input/block_comment_after_node.kdl new file mode 100644 index 0000000..e7777ed --- /dev/null +++ b/tests/test_cases/input/block_comment_after_node.kdl @@ -0,0 +1 @@ +node /* hey */ "arg" diff --git a/tests/test_cases/input/block_comment_before_node.kdl b/tests/test_cases/input/block_comment_before_node.kdl new file mode 100644 index 0000000..5ad653e --- /dev/null +++ b/tests/test_cases/input/block_comment_before_node.kdl @@ -0,0 +1 @@ +/* hey */ node \ No newline at end of file diff --git a/tests/test_cases/input/block_comment_before_node_no_space.kdl b/tests/test_cases/input/block_comment_before_node_no_space.kdl new file mode 100644 index 0000000..1221234 --- /dev/null +++ b/tests/test_cases/input/block_comment_before_node_no_space.kdl @@ -0,0 +1 @@ +/* hey*/node diff --git a/tests/test_cases/input/block_comment_newline.kdl b/tests/test_cases/input/block_comment_newline.kdl new file mode 100644 index 0000000..14ac75d --- /dev/null +++ b/tests/test_cases/input/block_comment_newline.kdl @@ -0,0 +1 @@ +/* hey */ diff --git a/tests/test_cases/input/boolean_arg.kdl b/tests/test_cases/input/boolean_arg.kdl new file mode 100644 index 0000000..f099893 --- /dev/null +++ b/tests/test_cases/input/boolean_arg.kdl @@ -0,0 +1 @@ +node false true \ No newline at end of file diff --git a/tests/test_cases/input/boolean_prop.kdl b/tests/test_cases/input/boolean_prop.kdl new file mode 100644 index 0000000..61e3111 --- /dev/null +++ b/tests/test_cases/input/boolean_prop.kdl @@ -0,0 +1 @@ +node prop1=true prop2=false \ No newline at end of file diff --git a/tests/test_cases/input/brackets_in_bare_id.kdl b/tests/test_cases/input/brackets_in_bare_id.kdl new file mode 100644 index 0000000..b0d39c5 --- /dev/null +++ b/tests/test_cases/input/brackets_in_bare_id.kdl @@ -0,0 +1 @@ +foo123{bar}foo "weeee" diff --git a/tests/test_cases/input/chevrons_in_bare_id.kdl b/tests/test_cases/input/chevrons_in_bare_id.kdl new file mode 100644 index 0000000..4b6610e --- /dev/null +++ b/tests/test_cases/input/chevrons_in_bare_id.kdl @@ -0,0 +1 @@ +foo123foo "weeee" diff --git a/tests/test_cases/input/comma_in_bare_id.kdl b/tests/test_cases/input/comma_in_bare_id.kdl new file mode 100644 index 0000000..656df91 --- /dev/null +++ b/tests/test_cases/input/comma_in_bare_id.kdl @@ -0,0 +1 @@ +foo123,bar "weeee" diff --git a/tests/test_cases/input/comment_after_arg_type.kdl b/tests/test_cases/input/comment_after_arg_type.kdl new file mode 100644 index 0000000..f88b7c1 --- /dev/null +++ b/tests/test_cases/input/comment_after_arg_type.kdl @@ -0,0 +1 @@ +node (type)/*huh*/10 diff --git a/tests/test_cases/input/comment_after_node_type.kdl b/tests/test_cases/input/comment_after_node_type.kdl new file mode 100644 index 0000000..55ab980 --- /dev/null +++ b/tests/test_cases/input/comment_after_node_type.kdl @@ -0,0 +1 @@ +(type)/*huh*/node diff --git a/tests/test_cases/input/comment_after_prop_type.kdl b/tests/test_cases/input/comment_after_prop_type.kdl new file mode 100644 index 0000000..c9b1858 --- /dev/null +++ b/tests/test_cases/input/comment_after_prop_type.kdl @@ -0,0 +1 @@ +node key=(type)/*huh*/10 diff --git a/tests/test_cases/input/comment_in_arg_type.kdl b/tests/test_cases/input/comment_in_arg_type.kdl new file mode 100644 index 0000000..39742ac --- /dev/null +++ b/tests/test_cases/input/comment_in_arg_type.kdl @@ -0,0 +1 @@ +node (type/*huh*/)10 diff --git a/tests/test_cases/input/comment_in_node_type.kdl b/tests/test_cases/input/comment_in_node_type.kdl new file mode 100644 index 0000000..8cda2e5 --- /dev/null +++ b/tests/test_cases/input/comment_in_node_type.kdl @@ -0,0 +1 @@ +(type/*huh*/)node diff --git a/tests/test_cases/input/comment_in_prop_type.kdl b/tests/test_cases/input/comment_in_prop_type.kdl new file mode 100644 index 0000000..10adb3b --- /dev/null +++ b/tests/test_cases/input/comment_in_prop_type.kdl @@ -0,0 +1 @@ +node key=(type/*huh*/)10 diff --git a/tests/test_cases/input/commented_arg.kdl b/tests/test_cases/input/commented_arg.kdl new file mode 100644 index 0000000..e389cd2 --- /dev/null +++ b/tests/test_cases/input/commented_arg.kdl @@ -0,0 +1 @@ +node /- "arg1" "arg2" \ No newline at end of file diff --git a/tests/test_cases/input/commented_child.kdl b/tests/test_cases/input/commented_child.kdl new file mode 100644 index 0000000..da29663 --- /dev/null +++ b/tests/test_cases/input/commented_child.kdl @@ -0,0 +1,3 @@ +node "arg" /- { + inner_node +} diff --git a/tests/test_cases/input/commented_line.kdl b/tests/test_cases/input/commented_line.kdl new file mode 100644 index 0000000..b438cd5 --- /dev/null +++ b/tests/test_cases/input/commented_line.kdl @@ -0,0 +1,2 @@ +// node_1 +node_2 diff --git a/tests/test_cases/input/commented_node.kdl b/tests/test_cases/input/commented_node.kdl new file mode 100644 index 0000000..c9e5d12 --- /dev/null +++ b/tests/test_cases/input/commented_node.kdl @@ -0,0 +1,2 @@ +/- node_1 +node_2 diff --git a/tests/test_cases/input/commented_prop.kdl b/tests/test_cases/input/commented_prop.kdl new file mode 100644 index 0000000..acedc83 --- /dev/null +++ b/tests/test_cases/input/commented_prop.kdl @@ -0,0 +1 @@ +node /- prop="val" "arg" \ No newline at end of file diff --git a/tests/test_cases/input/crlf_between_nodes.kdl b/tests/test_cases/input/crlf_between_nodes.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/input/crlf_between_nodes.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/input/dash_dash.kdl b/tests/test_cases/input/dash_dash.kdl new file mode 100644 index 0000000..759ddc5 --- /dev/null +++ b/tests/test_cases/input/dash_dash.kdl @@ -0,0 +1 @@ +node -- \ No newline at end of file diff --git a/tests/test_cases/input/dot_but_no_fraction.kdl b/tests/test_cases/input/dot_but_no_fraction.kdl new file mode 100644 index 0000000..48553fc --- /dev/null +++ b/tests/test_cases/input/dot_but_no_fraction.kdl @@ -0,0 +1 @@ +node 1. \ No newline at end of file diff --git a/tests/test_cases/input/dot_but_no_fraction_before_exponent.kdl b/tests/test_cases/input/dot_but_no_fraction_before_exponent.kdl new file mode 100644 index 0000000..8fb8fb8 --- /dev/null +++ b/tests/test_cases/input/dot_but_no_fraction_before_exponent.kdl @@ -0,0 +1 @@ +node 1.e7 \ No newline at end of file diff --git a/tests/test_cases/input/dot_in_exponent.kdl b/tests/test_cases/input/dot_in_exponent.kdl new file mode 100644 index 0000000..fab0d78 --- /dev/null +++ b/tests/test_cases/input/dot_in_exponent.kdl @@ -0,0 +1 @@ +node 1.0.0 \ No newline at end of file diff --git a/tests/test_cases/input/dot_zero.kdl b/tests/test_cases/input/dot_zero.kdl new file mode 100644 index 0000000..e8c0592 --- /dev/null +++ b/tests/test_cases/input/dot_zero.kdl @@ -0,0 +1 @@ +node .0 \ No newline at end of file diff --git a/tests/test_cases/input/emoji.kdl b/tests/test_cases/input/emoji.kdl new file mode 100644 index 0000000..3ed56e2 --- /dev/null +++ b/tests/test_cases/input/emoji.kdl @@ -0,0 +1 @@ +node "😀" diff --git a/tests/test_cases/input/empty.kdl b/tests/test_cases/input/empty.kdl new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_cases/input/empty_arg_type.kdl b/tests/test_cases/input/empty_arg_type.kdl new file mode 100644 index 0000000..bf22b6d --- /dev/null +++ b/tests/test_cases/input/empty_arg_type.kdl @@ -0,0 +1 @@ +node ()10 diff --git a/tests/test_cases/input/empty_child.kdl b/tests/test_cases/input/empty_child.kdl new file mode 100644 index 0000000..a166b33 --- /dev/null +++ b/tests/test_cases/input/empty_child.kdl @@ -0,0 +1,2 @@ +node { +} diff --git a/tests/test_cases/input/empty_child_different_lines.kdl b/tests/test_cases/input/empty_child_different_lines.kdl new file mode 100644 index 0000000..a166b33 --- /dev/null +++ b/tests/test_cases/input/empty_child_different_lines.kdl @@ -0,0 +1,2 @@ +node { +} diff --git a/tests/test_cases/input/empty_child_same_line.kdl b/tests/test_cases/input/empty_child_same_line.kdl new file mode 100644 index 0000000..efba1b1 --- /dev/null +++ b/tests/test_cases/input/empty_child_same_line.kdl @@ -0,0 +1 @@ +node {} \ No newline at end of file diff --git a/tests/test_cases/input/empty_child_whitespace.kdl b/tests/test_cases/input/empty_child_whitespace.kdl new file mode 100644 index 0000000..ca9eee3 --- /dev/null +++ b/tests/test_cases/input/empty_child_whitespace.kdl @@ -0,0 +1,3 @@ +node { + + } diff --git a/tests/test_cases/input/empty_node_type.kdl b/tests/test_cases/input/empty_node_type.kdl new file mode 100644 index 0000000..e4163c0 --- /dev/null +++ b/tests/test_cases/input/empty_node_type.kdl @@ -0,0 +1 @@ +()node diff --git a/tests/test_cases/input/empty_prop_type.kdl b/tests/test_cases/input/empty_prop_type.kdl new file mode 100644 index 0000000..0515094 --- /dev/null +++ b/tests/test_cases/input/empty_prop_type.kdl @@ -0,0 +1 @@ +node key=()false diff --git a/tests/test_cases/input/empty_quoted_node_id.kdl b/tests/test_cases/input/empty_quoted_node_id.kdl new file mode 100644 index 0000000..2aeb594 --- /dev/null +++ b/tests/test_cases/input/empty_quoted_node_id.kdl @@ -0,0 +1 @@ +"" "arg" \ No newline at end of file diff --git a/tests/test_cases/input/empty_quoted_prop_key.kdl b/tests/test_cases/input/empty_quoted_prop_key.kdl new file mode 100644 index 0000000..e6e1310 --- /dev/null +++ b/tests/test_cases/input/empty_quoted_prop_key.kdl @@ -0,0 +1 @@ +node ""="empty" diff --git a/tests/test_cases/input/empty_string_arg.kdl b/tests/test_cases/input/empty_string_arg.kdl new file mode 100644 index 0000000..8ade134 --- /dev/null +++ b/tests/test_cases/input/empty_string_arg.kdl @@ -0,0 +1 @@ +node "" diff --git a/tests/test_cases/input/esc_newline_in_string.kdl b/tests/test_cases/input/esc_newline_in_string.kdl new file mode 100644 index 0000000..393ee37 --- /dev/null +++ b/tests/test_cases/input/esc_newline_in_string.kdl @@ -0,0 +1 @@ +node "hello\nworld" \ No newline at end of file diff --git a/tests/test_cases/input/esc_unicode_in_string.kdl b/tests/test_cases/input/esc_unicode_in_string.kdl new file mode 100644 index 0000000..285ed9c --- /dev/null +++ b/tests/test_cases/input/esc_unicode_in_string.kdl @@ -0,0 +1 @@ +node "hello\u{0a}world" diff --git a/tests/test_cases/input/escline.kdl b/tests/test_cases/input/escline.kdl new file mode 100644 index 0000000..9868dd2 --- /dev/null +++ b/tests/test_cases/input/escline.kdl @@ -0,0 +1,2 @@ +node \ + "arg" diff --git a/tests/test_cases/input/escline_comment_node.kdl b/tests/test_cases/input/escline_comment_node.kdl new file mode 100644 index 0000000..8cfdf4f --- /dev/null +++ b/tests/test_cases/input/escline_comment_node.kdl @@ -0,0 +1,3 @@ +node1 + \// hey + node2 diff --git a/tests/test_cases/input/escline_line_comment.kdl b/tests/test_cases/input/escline_line_comment.kdl new file mode 100644 index 0000000..588161b --- /dev/null +++ b/tests/test_cases/input/escline_line_comment.kdl @@ -0,0 +1,4 @@ +node \ // comment + "arg" \// comment + "arg2 +" diff --git a/tests/test_cases/input/escline_node.kdl b/tests/test_cases/input/escline_node.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/input/escline_node.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/input/false_prefix_in_bare_id.kdl b/tests/test_cases/input/false_prefix_in_bare_id.kdl new file mode 100644 index 0000000..cd962c4 --- /dev/null +++ b/tests/test_cases/input/false_prefix_in_bare_id.kdl @@ -0,0 +1 @@ +false_id diff --git a/tests/test_cases/input/false_prefix_in_prop_key.kdl b/tests/test_cases/input/false_prefix_in_prop_key.kdl new file mode 100644 index 0000000..2d29843 --- /dev/null +++ b/tests/test_cases/input/false_prefix_in_prop_key.kdl @@ -0,0 +1 @@ +node false_id=1 diff --git a/tests/test_cases/input/false_prop_key.kdl b/tests/test_cases/input/false_prop_key.kdl new file mode 100644 index 0000000..a032c0b --- /dev/null +++ b/tests/test_cases/input/false_prop_key.kdl @@ -0,0 +1 @@ +node false=1 diff --git a/tests/test_cases/input/hex.kdl b/tests/test_cases/input/hex.kdl new file mode 100644 index 0000000..890ceaf --- /dev/null +++ b/tests/test_cases/input/hex.kdl @@ -0,0 +1 @@ +node 0x1234567890abcdef diff --git a/tests/test_cases/input/hex_int.kdl b/tests/test_cases/input/hex_int.kdl new file mode 100644 index 0000000..28e2597 --- /dev/null +++ b/tests/test_cases/input/hex_int.kdl @@ -0,0 +1 @@ +node 0x1234567890ABCDEF diff --git a/tests/test_cases/input/hex_int_underscores.kdl b/tests/test_cases/input/hex_int_underscores.kdl new file mode 100644 index 0000000..8b7bd68 --- /dev/null +++ b/tests/test_cases/input/hex_int_underscores.kdl @@ -0,0 +1 @@ +node 0xABC_def_0123 \ No newline at end of file diff --git a/tests/test_cases/input/hex_leading_zero.kdl b/tests/test_cases/input/hex_leading_zero.kdl new file mode 100644 index 0000000..b2c98d0 --- /dev/null +++ b/tests/test_cases/input/hex_leading_zero.kdl @@ -0,0 +1 @@ +node 0x01 \ No newline at end of file diff --git a/tests/test_cases/input/illegal_char_in_binary.kdl b/tests/test_cases/input/illegal_char_in_binary.kdl new file mode 100644 index 0000000..1f4bd50 --- /dev/null +++ b/tests/test_cases/input/illegal_char_in_binary.kdl @@ -0,0 +1 @@ +node 0bx01 diff --git a/tests/test_cases/input/illegal_char_in_hex.kdl b/tests/test_cases/input/illegal_char_in_hex.kdl new file mode 100644 index 0000000..b55e1a6 --- /dev/null +++ b/tests/test_cases/input/illegal_char_in_hex.kdl @@ -0,0 +1 @@ +node 0x10g10 \ No newline at end of file diff --git a/tests/test_cases/input/illegal_char_in_octal.kdl b/tests/test_cases/input/illegal_char_in_octal.kdl new file mode 100644 index 0000000..4e36196 --- /dev/null +++ b/tests/test_cases/input/illegal_char_in_octal.kdl @@ -0,0 +1 @@ +node 0o45678 \ No newline at end of file diff --git a/tests/test_cases/input/int_multiple_underscore.kdl b/tests/test_cases/input/int_multiple_underscore.kdl new file mode 100644 index 0000000..04ded62 --- /dev/null +++ b/tests/test_cases/input/int_multiple_underscore.kdl @@ -0,0 +1 @@ +node 1_2_3_4 \ No newline at end of file diff --git a/tests/test_cases/input/just_block_comment.kdl b/tests/test_cases/input/just_block_comment.kdl new file mode 100644 index 0000000..4015df6 --- /dev/null +++ b/tests/test_cases/input/just_block_comment.kdl @@ -0,0 +1 @@ +/* hey */ \ No newline at end of file diff --git a/tests/test_cases/input/just_child.kdl b/tests/test_cases/input/just_child.kdl new file mode 100644 index 0000000..ee79536 --- /dev/null +++ b/tests/test_cases/input/just_child.kdl @@ -0,0 +1,3 @@ +node { + inner_node +} diff --git a/tests/test_cases/input/just_newline.kdl b/tests/test_cases/input/just_newline.kdl new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/test_cases/input/just_newline.kdl @@ -0,0 +1 @@ + diff --git a/tests/test_cases/input/just_node_id.kdl b/tests/test_cases/input/just_node_id.kdl new file mode 100644 index 0000000..32b6e49 --- /dev/null +++ b/tests/test_cases/input/just_node_id.kdl @@ -0,0 +1 @@ +node \ No newline at end of file diff --git a/tests/test_cases/input/just_space.kdl b/tests/test_cases/input/just_space.kdl new file mode 100644 index 0000000..0519ecb --- /dev/null +++ b/tests/test_cases/input/just_space.kdl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tests/test_cases/input/just_space_in_arg_type.kdl b/tests/test_cases/input/just_space_in_arg_type.kdl new file mode 100644 index 0000000..38c9217 --- /dev/null +++ b/tests/test_cases/input/just_space_in_arg_type.kdl @@ -0,0 +1 @@ +node ( )false diff --git a/tests/test_cases/input/just_space_in_node_type.kdl b/tests/test_cases/input/just_space_in_node_type.kdl new file mode 100644 index 0000000..8fb5d89 --- /dev/null +++ b/tests/test_cases/input/just_space_in_node_type.kdl @@ -0,0 +1 @@ +( )node diff --git a/tests/test_cases/input/just_space_in_prop_type.kdl b/tests/test_cases/input/just_space_in_prop_type.kdl new file mode 100644 index 0000000..a00603c --- /dev/null +++ b/tests/test_cases/input/just_space_in_prop_type.kdl @@ -0,0 +1 @@ +node key=()0x10 diff --git a/tests/test_cases/input/just_type_no_arg.kdl b/tests/test_cases/input/just_type_no_arg.kdl new file mode 100644 index 0000000..a36c881 --- /dev/null +++ b/tests/test_cases/input/just_type_no_arg.kdl @@ -0,0 +1 @@ +node (type) diff --git a/tests/test_cases/input/just_type_no_node_id.kdl b/tests/test_cases/input/just_type_no_node_id.kdl new file mode 100644 index 0000000..9b03c44 --- /dev/null +++ b/tests/test_cases/input/just_type_no_node_id.kdl @@ -0,0 +1 @@ +(type) diff --git a/tests/test_cases/input/just_type_no_prop.kdl b/tests/test_cases/input/just_type_no_prop.kdl new file mode 100644 index 0000000..eab7fc6 --- /dev/null +++ b/tests/test_cases/input/just_type_no_prop.kdl @@ -0,0 +1 @@ +node key=(type) diff --git a/tests/test_cases/input/leading_newline.kdl b/tests/test_cases/input/leading_newline.kdl new file mode 100644 index 0000000..bf12fe6 --- /dev/null +++ b/tests/test_cases/input/leading_newline.kdl @@ -0,0 +1,2 @@ + +node diff --git a/tests/test_cases/input/leading_zero_binary.kdl b/tests/test_cases/input/leading_zero_binary.kdl new file mode 100644 index 0000000..fa8209d --- /dev/null +++ b/tests/test_cases/input/leading_zero_binary.kdl @@ -0,0 +1 @@ +node 0b01 diff --git a/tests/test_cases/input/leading_zero_int.kdl b/tests/test_cases/input/leading_zero_int.kdl new file mode 100644 index 0000000..b4e520a --- /dev/null +++ b/tests/test_cases/input/leading_zero_int.kdl @@ -0,0 +1 @@ +node 011 diff --git a/tests/test_cases/input/leading_zero_oct.kdl b/tests/test_cases/input/leading_zero_oct.kdl new file mode 100644 index 0000000..d0eb382 --- /dev/null +++ b/tests/test_cases/input/leading_zero_oct.kdl @@ -0,0 +1 @@ +node 0o01 diff --git a/tests/test_cases/input/multiline_comment.kdl b/tests/test_cases/input/multiline_comment.kdl new file mode 100644 index 0000000..b9dab39 --- /dev/null +++ b/tests/test_cases/input/multiline_comment.kdl @@ -0,0 +1,4 @@ +node /* +some +comments +*/ "arg" diff --git a/tests/test_cases/input/multiline_nodes.kdl b/tests/test_cases/input/multiline_nodes.kdl new file mode 100644 index 0000000..9bf4bfd --- /dev/null +++ b/tests/test_cases/input/multiline_nodes.kdl @@ -0,0 +1,3 @@ +node \ + "arg1" \// comment + "arg2" diff --git a/tests/test_cases/input/multiline_string.kdl b/tests/test_cases/input/multiline_string.kdl new file mode 100644 index 0000000..a437c1d --- /dev/null +++ b/tests/test_cases/input/multiline_string.kdl @@ -0,0 +1,4 @@ +node " hey +everyone +how goes? +" diff --git a/tests/test_cases/input/multiple_dots_in_float.kdl b/tests/test_cases/input/multiple_dots_in_float.kdl new file mode 100644 index 0000000..fab0d78 --- /dev/null +++ b/tests/test_cases/input/multiple_dots_in_float.kdl @@ -0,0 +1 @@ +node 1.0.0 \ No newline at end of file diff --git a/tests/test_cases/input/multiple_dots_in_float_before_exponent.kdl b/tests/test_cases/input/multiple_dots_in_float_before_exponent.kdl new file mode 100644 index 0000000..434af05 --- /dev/null +++ b/tests/test_cases/input/multiple_dots_in_float_before_exponent.kdl @@ -0,0 +1 @@ +node 1.0.0e7 \ No newline at end of file diff --git a/tests/test_cases/input/multiple_es_in_float.kdl b/tests/test_cases/input/multiple_es_in_float.kdl new file mode 100644 index 0000000..6506c5c --- /dev/null +++ b/tests/test_cases/input/multiple_es_in_float.kdl @@ -0,0 +1 @@ +node 1.0E10e10 diff --git a/tests/test_cases/input/multiple_x_in_hex.kdl b/tests/test_cases/input/multiple_x_in_hex.kdl new file mode 100644 index 0000000..013d805 --- /dev/null +++ b/tests/test_cases/input/multiple_x_in_hex.kdl @@ -0,0 +1 @@ +node 0xx10 \ No newline at end of file diff --git a/tests/test_cases/input/negative_exponent.kdl b/tests/test_cases/input/negative_exponent.kdl new file mode 100644 index 0000000..6790669 --- /dev/null +++ b/tests/test_cases/input/negative_exponent.kdl @@ -0,0 +1 @@ +node 1.0e-10 \ No newline at end of file diff --git a/tests/test_cases/input/negative_float.kdl b/tests/test_cases/input/negative_float.kdl new file mode 100644 index 0000000..5536e1f --- /dev/null +++ b/tests/test_cases/input/negative_float.kdl @@ -0,0 +1 @@ +node -1.0 key=-10.0 \ No newline at end of file diff --git a/tests/test_cases/input/negative_int.kdl b/tests/test_cases/input/negative_int.kdl new file mode 100644 index 0000000..c71a208 --- /dev/null +++ b/tests/test_cases/input/negative_int.kdl @@ -0,0 +1 @@ +node -10 prop=-15 \ No newline at end of file diff --git a/tests/test_cases/input/nested_block_comment.kdl b/tests/test_cases/input/nested_block_comment.kdl new file mode 100644 index 0000000..d7f765c --- /dev/null +++ b/tests/test_cases/input/nested_block_comment.kdl @@ -0,0 +1 @@ +node /* hi /* there */ everyone */ "arg" \ No newline at end of file diff --git a/tests/test_cases/input/nested_children.kdl b/tests/test_cases/input/nested_children.kdl new file mode 100644 index 0000000..e44720d --- /dev/null +++ b/tests/test_cases/input/nested_children.kdl @@ -0,0 +1,5 @@ +node1 { + node2 { + node + } +} diff --git a/tests/test_cases/input/nested_comments.kdl b/tests/test_cases/input/nested_comments.kdl new file mode 100644 index 0000000..8b3aad6 --- /dev/null +++ b/tests/test_cases/input/nested_comments.kdl @@ -0,0 +1 @@ +node /*/* nested */*/ "arg" \ No newline at end of file diff --git a/tests/test_cases/input/nested_multiline_block_comment.kdl b/tests/test_cases/input/nested_multiline_block_comment.kdl new file mode 100644 index 0000000..1d1c654 --- /dev/null +++ b/tests/test_cases/input/nested_multiline_block_comment.kdl @@ -0,0 +1,6 @@ +node /* +hey /* +how's +*/ + it going + */ "arg" diff --git a/tests/test_cases/input/newline_between_nodes.kdl b/tests/test_cases/input/newline_between_nodes.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/input/newline_between_nodes.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/input/newlines_in_block_comment.kdl b/tests/test_cases/input/newlines_in_block_comment.kdl new file mode 100644 index 0000000..f46c3d5 --- /dev/null +++ b/tests/test_cases/input/newlines_in_block_comment.kdl @@ -0,0 +1,3 @@ +node /* hey so +I was thinking +about newts */ "arg" diff --git a/tests/test_cases/input/no_decimal_exponent.kdl b/tests/test_cases/input/no_decimal_exponent.kdl new file mode 100644 index 0000000..6dc6c6a --- /dev/null +++ b/tests/test_cases/input/no_decimal_exponent.kdl @@ -0,0 +1 @@ +node 1e10 \ No newline at end of file diff --git a/tests/test_cases/input/no_digits_in_hex.kdl b/tests/test_cases/input/no_digits_in_hex.kdl new file mode 100644 index 0000000..700e453 --- /dev/null +++ b/tests/test_cases/input/no_digits_in_hex.kdl @@ -0,0 +1 @@ +node 0x \ No newline at end of file diff --git a/tests/test_cases/input/node_false.kdl b/tests/test_cases/input/node_false.kdl new file mode 100644 index 0000000..ef60c44 --- /dev/null +++ b/tests/test_cases/input/node_false.kdl @@ -0,0 +1 @@ +node false diff --git a/tests/test_cases/input/node_true.kdl b/tests/test_cases/input/node_true.kdl new file mode 100644 index 0000000..4b02a06 --- /dev/null +++ b/tests/test_cases/input/node_true.kdl @@ -0,0 +1 @@ +node true diff --git a/tests/test_cases/input/node_type.kdl b/tests/test_cases/input/node_type.kdl new file mode 100644 index 0000000..72b265d --- /dev/null +++ b/tests/test_cases/input/node_type.kdl @@ -0,0 +1 @@ +(type)node \ No newline at end of file diff --git a/tests/test_cases/input/null_arg.kdl b/tests/test_cases/input/null_arg.kdl new file mode 100644 index 0000000..a5ce001 --- /dev/null +++ b/tests/test_cases/input/null_arg.kdl @@ -0,0 +1 @@ +node null \ No newline at end of file diff --git a/tests/test_cases/input/null_prefix_in_bare_id.kdl b/tests/test_cases/input/null_prefix_in_bare_id.kdl new file mode 100644 index 0000000..9e0cf15 --- /dev/null +++ b/tests/test_cases/input/null_prefix_in_bare_id.kdl @@ -0,0 +1 @@ +null_id diff --git a/tests/test_cases/input/null_prefix_in_prop_key.kdl b/tests/test_cases/input/null_prefix_in_prop_key.kdl new file mode 100644 index 0000000..1e1472b --- /dev/null +++ b/tests/test_cases/input/null_prefix_in_prop_key.kdl @@ -0,0 +1 @@ +node null_id=1 diff --git a/tests/test_cases/input/null_prop.kdl b/tests/test_cases/input/null_prop.kdl new file mode 100644 index 0000000..847256f --- /dev/null +++ b/tests/test_cases/input/null_prop.kdl @@ -0,0 +1 @@ +node prop=null \ No newline at end of file diff --git a/tests/test_cases/input/null_prop_key.kdl b/tests/test_cases/input/null_prop_key.kdl new file mode 100644 index 0000000..6896d42 --- /dev/null +++ b/tests/test_cases/input/null_prop_key.kdl @@ -0,0 +1 @@ +node null=1 diff --git a/tests/test_cases/input/numeric_arg.kdl b/tests/test_cases/input/numeric_arg.kdl new file mode 100644 index 0000000..23a6fbe --- /dev/null +++ b/tests/test_cases/input/numeric_arg.kdl @@ -0,0 +1 @@ +node 15.7 \ No newline at end of file diff --git a/tests/test_cases/input/numeric_prop.kdl b/tests/test_cases/input/numeric_prop.kdl new file mode 100644 index 0000000..0cf22bf --- /dev/null +++ b/tests/test_cases/input/numeric_prop.kdl @@ -0,0 +1 @@ +node prop=10.0 \ No newline at end of file diff --git a/tests/test_cases/input/octal.kdl b/tests/test_cases/input/octal.kdl new file mode 100644 index 0000000..9674d51 --- /dev/null +++ b/tests/test_cases/input/octal.kdl @@ -0,0 +1 @@ +node 0o76543210 \ No newline at end of file diff --git a/tests/test_cases/input/only_cr.kdl b/tests/test_cases/input/only_cr.kdl new file mode 100644 index 0000000..139597f --- /dev/null +++ b/tests/test_cases/input/only_cr.kdl @@ -0,0 +1,2 @@ + + diff --git a/tests/test_cases/input/only_line_comment.kdl b/tests/test_cases/input/only_line_comment.kdl new file mode 100644 index 0000000..edc7a22 --- /dev/null +++ b/tests/test_cases/input/only_line_comment.kdl @@ -0,0 +1 @@ +// hi \ No newline at end of file diff --git a/tests/test_cases/input/only_line_comment_crlf.kdl b/tests/test_cases/input/only_line_comment_crlf.kdl new file mode 100644 index 0000000..fef83a9 --- /dev/null +++ b/tests/test_cases/input/only_line_comment_crlf.kdl @@ -0,0 +1 @@ +// comment diff --git a/tests/test_cases/input/only_line_comment_newline.kdl b/tests/test_cases/input/only_line_comment_newline.kdl new file mode 100644 index 0000000..faba1e1 --- /dev/null +++ b/tests/test_cases/input/only_line_comment_newline.kdl @@ -0,0 +1 @@ +// hiiii diff --git a/tests/test_cases/input/parens_in_bare_id.kdl b/tests/test_cases/input/parens_in_bare_id.kdl new file mode 100644 index 0000000..92459d8 --- /dev/null +++ b/tests/test_cases/input/parens_in_bare_id.kdl @@ -0,0 +1 @@ +foo123(bar)foo "weeee" diff --git a/tests/test_cases/input/parse_all_arg_types.kdl b/tests/test_cases/input/parse_all_arg_types.kdl new file mode 100644 index 0000000..30b9072 --- /dev/null +++ b/tests/test_cases/input/parse_all_arg_types.kdl @@ -0,0 +1 @@ +node 1 1.0 1.0e10 1.0e-10 0x01 0o07 0b10 "arg" r"arg\\" true false null \ No newline at end of file diff --git a/tests/test_cases/input/positive_exponent.kdl b/tests/test_cases/input/positive_exponent.kdl new file mode 100644 index 0000000..1eaa4b8 --- /dev/null +++ b/tests/test_cases/input/positive_exponent.kdl @@ -0,0 +1 @@ +node 1.0e+10 \ No newline at end of file diff --git a/tests/test_cases/input/positive_int.kdl b/tests/test_cases/input/positive_int.kdl new file mode 100644 index 0000000..d57df8a --- /dev/null +++ b/tests/test_cases/input/positive_int.kdl @@ -0,0 +1 @@ +node +10 \ No newline at end of file diff --git a/tests/test_cases/input/preserve_duplicate_nodes.kdl b/tests/test_cases/input/preserve_duplicate_nodes.kdl new file mode 100644 index 0000000..3e545b1 --- /dev/null +++ b/tests/test_cases/input/preserve_duplicate_nodes.kdl @@ -0,0 +1,2 @@ +node +node diff --git a/tests/test_cases/input/preserve_node_order.kdl b/tests/test_cases/input/preserve_node_order.kdl new file mode 100644 index 0000000..24c817f --- /dev/null +++ b/tests/test_cases/input/preserve_node_order.kdl @@ -0,0 +1,3 @@ +node2 +node5 +node1 diff --git a/tests/test_cases/input/prop_false_type.kdl b/tests/test_cases/input/prop_false_type.kdl new file mode 100644 index 0000000..3377323 --- /dev/null +++ b/tests/test_cases/input/prop_false_type.kdl @@ -0,0 +1 @@ +node key=(type)false diff --git a/tests/test_cases/input/prop_float_type.kdl b/tests/test_cases/input/prop_float_type.kdl new file mode 100644 index 0000000..c1c2095 --- /dev/null +++ b/tests/test_cases/input/prop_float_type.kdl @@ -0,0 +1 @@ +node key=(type)2.5E10 diff --git a/tests/test_cases/input/prop_hex_type.kdl b/tests/test_cases/input/prop_hex_type.kdl new file mode 100644 index 0000000..d819d6a --- /dev/null +++ b/tests/test_cases/input/prop_hex_type.kdl @@ -0,0 +1 @@ +node key=(type)0x10 diff --git a/tests/test_cases/input/prop_null_type.kdl b/tests/test_cases/input/prop_null_type.kdl new file mode 100644 index 0000000..bafaddc --- /dev/null +++ b/tests/test_cases/input/prop_null_type.kdl @@ -0,0 +1 @@ +node key=(type)null diff --git a/tests/test_cases/input/prop_raw_string_type.kdl b/tests/test_cases/input/prop_raw_string_type.kdl new file mode 100644 index 0000000..a038cfa --- /dev/null +++ b/tests/test_cases/input/prop_raw_string_type.kdl @@ -0,0 +1 @@ +node key=(type)r"str" diff --git a/tests/test_cases/input/prop_string_type.kdl b/tests/test_cases/input/prop_string_type.kdl new file mode 100644 index 0000000..50e2d2c --- /dev/null +++ b/tests/test_cases/input/prop_string_type.kdl @@ -0,0 +1 @@ +node key=(type)"str" diff --git a/tests/test_cases/input/prop_true_type.kdl b/tests/test_cases/input/prop_true_type.kdl new file mode 100644 index 0000000..c4eebb6 --- /dev/null +++ b/tests/test_cases/input/prop_true_type.kdl @@ -0,0 +1 @@ +node key=(type)true diff --git a/tests/test_cases/input/prop_type.kdl b/tests/test_cases/input/prop_type.kdl new file mode 100644 index 0000000..d69294f --- /dev/null +++ b/tests/test_cases/input/prop_type.kdl @@ -0,0 +1 @@ +node key=(type)true \ No newline at end of file diff --git a/tests/test_cases/input/prop_zero_type.kdl b/tests/test_cases/input/prop_zero_type.kdl new file mode 100644 index 0000000..ad243ed --- /dev/null +++ b/tests/test_cases/input/prop_zero_type.kdl @@ -0,0 +1 @@ +node key=(type)0 diff --git a/tests/test_cases/input/question_mark_at_start_of_int.kdl b/tests/test_cases/input/question_mark_at_start_of_int.kdl new file mode 100644 index 0000000..ba82916 --- /dev/null +++ b/tests/test_cases/input/question_mark_at_start_of_int.kdl @@ -0,0 +1 @@ +node ?10 \ No newline at end of file diff --git a/tests/test_cases/input/question_mark_before_number.kdl b/tests/test_cases/input/question_mark_before_number.kdl new file mode 100644 index 0000000..532ef22 --- /dev/null +++ b/tests/test_cases/input/question_mark_before_number.kdl @@ -0,0 +1 @@ +node ?15 \ No newline at end of file diff --git a/tests/test_cases/input/quote_in_bare_id.kdl b/tests/test_cases/input/quote_in_bare_id.kdl new file mode 100644 index 0000000..405f763 --- /dev/null +++ b/tests/test_cases/input/quote_in_bare_id.kdl @@ -0,0 +1 @@ +foo123"bar "weeee" diff --git a/tests/test_cases/input/quoted_arg_type.kdl b/tests/test_cases/input/quoted_arg_type.kdl new file mode 100644 index 0000000..95c94c1 --- /dev/null +++ b/tests/test_cases/input/quoted_arg_type.kdl @@ -0,0 +1 @@ +node ("type/")10 \ No newline at end of file diff --git a/tests/test_cases/input/quoted_node_name.kdl b/tests/test_cases/input/quoted_node_name.kdl new file mode 100644 index 0000000..e76d593 --- /dev/null +++ b/tests/test_cases/input/quoted_node_name.kdl @@ -0,0 +1 @@ +"0node" \ No newline at end of file diff --git a/tests/test_cases/input/quoted_node_type.kdl b/tests/test_cases/input/quoted_node_type.kdl new file mode 100644 index 0000000..c66d905 --- /dev/null +++ b/tests/test_cases/input/quoted_node_type.kdl @@ -0,0 +1 @@ +("type/")node diff --git a/tests/test_cases/input/quoted_numeric.kdl b/tests/test_cases/input/quoted_numeric.kdl new file mode 100644 index 0000000..5939268 --- /dev/null +++ b/tests/test_cases/input/quoted_numeric.kdl @@ -0,0 +1 @@ +node prop="10.0" \ No newline at end of file diff --git a/tests/test_cases/input/quoted_prop_name.kdl b/tests/test_cases/input/quoted_prop_name.kdl new file mode 100644 index 0000000..73ec6dd --- /dev/null +++ b/tests/test_cases/input/quoted_prop_name.kdl @@ -0,0 +1 @@ +node "0prop"="val" \ No newline at end of file diff --git a/tests/test_cases/input/quoted_prop_type.kdl b/tests/test_cases/input/quoted_prop_type.kdl new file mode 100644 index 0000000..0e2b920 --- /dev/null +++ b/tests/test_cases/input/quoted_prop_type.kdl @@ -0,0 +1 @@ +node key=("type/")true diff --git a/tests/test_cases/input/r_node.kdl b/tests/test_cases/input/r_node.kdl new file mode 100644 index 0000000..4a98807 --- /dev/null +++ b/tests/test_cases/input/r_node.kdl @@ -0,0 +1 @@ +r "arg" diff --git a/tests/test_cases/input/raw_arg_type.kdl b/tests/test_cases/input/raw_arg_type.kdl new file mode 100644 index 0000000..c5739b1 --- /dev/null +++ b/tests/test_cases/input/raw_arg_type.kdl @@ -0,0 +1 @@ +node (type)true \ No newline at end of file diff --git a/tests/test_cases/input/raw_node_name.kdl b/tests/test_cases/input/raw_node_name.kdl new file mode 100644 index 0000000..0d38371 --- /dev/null +++ b/tests/test_cases/input/raw_node_name.kdl @@ -0,0 +1 @@ +r"\node" \ No newline at end of file diff --git a/tests/test_cases/input/raw_node_type.kdl b/tests/test_cases/input/raw_node_type.kdl new file mode 100644 index 0000000..72b265d --- /dev/null +++ b/tests/test_cases/input/raw_node_type.kdl @@ -0,0 +1 @@ +(type)node \ No newline at end of file diff --git a/tests/test_cases/input/raw_prop_type.kdl b/tests/test_cases/input/raw_prop_type.kdl new file mode 100644 index 0000000..d69294f --- /dev/null +++ b/tests/test_cases/input/raw_prop_type.kdl @@ -0,0 +1 @@ +node key=(type)true \ No newline at end of file diff --git a/tests/test_cases/input/raw_string_arg.kdl b/tests/test_cases/input/raw_string_arg.kdl new file mode 100644 index 0000000..3c07898 --- /dev/null +++ b/tests/test_cases/input/raw_string_arg.kdl @@ -0,0 +1,3 @@ +node_1 r"arg\n" +node_2 r#""arg\n"and stuff"# +node_3 r##"#"arg\n"#and stuff"## diff --git a/tests/test_cases/input/raw_string_backslash.kdl b/tests/test_cases/input/raw_string_backslash.kdl new file mode 100644 index 0000000..0f7ca45 --- /dev/null +++ b/tests/test_cases/input/raw_string_backslash.kdl @@ -0,0 +1 @@ +node r"\n" diff --git a/tests/test_cases/input/raw_string_hash_no_esc.kdl b/tests/test_cases/input/raw_string_hash_no_esc.kdl new file mode 100644 index 0000000..c8fa3c4 --- /dev/null +++ b/tests/test_cases/input/raw_string_hash_no_esc.kdl @@ -0,0 +1 @@ +node r"#" diff --git a/tests/test_cases/input/raw_string_just_backslash.kdl b/tests/test_cases/input/raw_string_just_backslash.kdl new file mode 100644 index 0000000..9aefa73 --- /dev/null +++ b/tests/test_cases/input/raw_string_just_backslash.kdl @@ -0,0 +1 @@ +node r"\" diff --git a/tests/test_cases/input/raw_string_just_quote.kdl b/tests/test_cases/input/raw_string_just_quote.kdl new file mode 100644 index 0000000..b8333ca --- /dev/null +++ b/tests/test_cases/input/raw_string_just_quote.kdl @@ -0,0 +1 @@ +node r#"""# diff --git a/tests/test_cases/input/raw_string_multiple_hash.kdl b/tests/test_cases/input/raw_string_multiple_hash.kdl new file mode 100644 index 0000000..e6d054c --- /dev/null +++ b/tests/test_cases/input/raw_string_multiple_hash.kdl @@ -0,0 +1 @@ +node r###""#"##"### diff --git a/tests/test_cases/input/raw_string_newline.kdl b/tests/test_cases/input/raw_string_newline.kdl new file mode 100644 index 0000000..ef39d3c --- /dev/null +++ b/tests/test_cases/input/raw_string_newline.kdl @@ -0,0 +1,4 @@ +node r" +hello +world +" diff --git a/tests/test_cases/input/raw_string_prop.kdl b/tests/test_cases/input/raw_string_prop.kdl new file mode 100644 index 0000000..850ed42 --- /dev/null +++ b/tests/test_cases/input/raw_string_prop.kdl @@ -0,0 +1,3 @@ +node_1 prop=r"arg\n" +node_2 prop=r#""arg"\n"# +node_3 prop=r##"#"arg"#\n"## diff --git a/tests/test_cases/input/raw_string_quote.kdl b/tests/test_cases/input/raw_string_quote.kdl new file mode 100644 index 0000000..cd7419c --- /dev/null +++ b/tests/test_cases/input/raw_string_quote.kdl @@ -0,0 +1 @@ +node r#"a"b"# \ No newline at end of file diff --git a/tests/test_cases/input/repeated_arg.kdl b/tests/test_cases/input/repeated_arg.kdl new file mode 100644 index 0000000..beab120 --- /dev/null +++ b/tests/test_cases/input/repeated_arg.kdl @@ -0,0 +1 @@ +node "arg" "arg" \ No newline at end of file diff --git a/tests/test_cases/input/repeated_prop.kdl b/tests/test_cases/input/repeated_prop.kdl new file mode 100644 index 0000000..ac42834 --- /dev/null +++ b/tests/test_cases/input/repeated_prop.kdl @@ -0,0 +1 @@ +node prop=10 prop=11 \ No newline at end of file diff --git a/tests/test_cases/input/same_args.kdl b/tests/test_cases/input/same_args.kdl new file mode 100644 index 0000000..c412de8 --- /dev/null +++ b/tests/test_cases/input/same_args.kdl @@ -0,0 +1 @@ +node "whee" "whee" \ No newline at end of file diff --git a/tests/test_cases/input/same_name_nodes.kdl b/tests/test_cases/input/same_name_nodes.kdl new file mode 100644 index 0000000..3e545b1 --- /dev/null +++ b/tests/test_cases/input/same_name_nodes.kdl @@ -0,0 +1,2 @@ +node +node diff --git a/tests/test_cases/input/sci_notation_large.kdl b/tests/test_cases/input/sci_notation_large.kdl new file mode 100644 index 0000000..e8385f6 --- /dev/null +++ b/tests/test_cases/input/sci_notation_large.kdl @@ -0,0 +1 @@ +node prop=1.23E+1000 \ No newline at end of file diff --git a/tests/test_cases/input/sci_notation_small.kdl b/tests/test_cases/input/sci_notation_small.kdl new file mode 100644 index 0000000..300c7d8 --- /dev/null +++ b/tests/test_cases/input/sci_notation_small.kdl @@ -0,0 +1 @@ +node prop=1.23E-1000 \ No newline at end of file diff --git a/tests/test_cases/input/semicolon_after_child.kdl b/tests/test_cases/input/semicolon_after_child.kdl new file mode 100644 index 0000000..81f2634 --- /dev/null +++ b/tests/test_cases/input/semicolon_after_child.kdl @@ -0,0 +1,3 @@ +node { + childnode +}; diff --git a/tests/test_cases/input/semicolon_in_child.kdl b/tests/test_cases/input/semicolon_in_child.kdl new file mode 100644 index 0000000..fa3e748 --- /dev/null +++ b/tests/test_cases/input/semicolon_in_child.kdl @@ -0,0 +1,3 @@ +node1 { + node2; +} diff --git a/tests/test_cases/input/semicolon_separated.kdl b/tests/test_cases/input/semicolon_separated.kdl new file mode 100644 index 0000000..3324f79 --- /dev/null +++ b/tests/test_cases/input/semicolon_separated.kdl @@ -0,0 +1 @@ +node1;node2 \ No newline at end of file diff --git a/tests/test_cases/input/semicolon_separated_nodes.kdl b/tests/test_cases/input/semicolon_separated_nodes.kdl new file mode 100644 index 0000000..3450f49 --- /dev/null +++ b/tests/test_cases/input/semicolon_separated_nodes.kdl @@ -0,0 +1 @@ +node1; node2; \ No newline at end of file diff --git a/tests/test_cases/input/semicolon_terminated.kdl b/tests/test_cases/input/semicolon_terminated.kdl new file mode 100644 index 0000000..c8b9d2d --- /dev/null +++ b/tests/test_cases/input/semicolon_terminated.kdl @@ -0,0 +1 @@ +node1; \ No newline at end of file diff --git a/tests/test_cases/input/single_arg.kdl b/tests/test_cases/input/single_arg.kdl new file mode 100644 index 0000000..e5161d1 --- /dev/null +++ b/tests/test_cases/input/single_arg.kdl @@ -0,0 +1 @@ +node "arg" \ No newline at end of file diff --git a/tests/test_cases/input/single_prop.kdl b/tests/test_cases/input/single_prop.kdl new file mode 100644 index 0000000..4c29c14 --- /dev/null +++ b/tests/test_cases/input/single_prop.kdl @@ -0,0 +1 @@ +node prop="val" \ No newline at end of file diff --git a/tests/test_cases/input/slash_in_bare_id.kdl b/tests/test_cases/input/slash_in_bare_id.kdl new file mode 100644 index 0000000..1139c88 --- /dev/null +++ b/tests/test_cases/input/slash_in_bare_id.kdl @@ -0,0 +1 @@ +foo123/bar "weeee" diff --git a/tests/test_cases/input/slashdash_arg_after_newline_esc.kdl b/tests/test_cases/input/slashdash_arg_after_newline_esc.kdl new file mode 100644 index 0000000..059b3e1 --- /dev/null +++ b/tests/test_cases/input/slashdash_arg_after_newline_esc.kdl @@ -0,0 +1,2 @@ +node \ + /- "arg" "arg2" diff --git a/tests/test_cases/input/slashdash_arg_before_newline_esc.kdl b/tests/test_cases/input/slashdash_arg_before_newline_esc.kdl new file mode 100644 index 0000000..f58e4a7 --- /dev/null +++ b/tests/test_cases/input/slashdash_arg_before_newline_esc.kdl @@ -0,0 +1,2 @@ +node /- \ + "arg" diff --git a/tests/test_cases/input/slashdash_child.kdl b/tests/test_cases/input/slashdash_child.kdl new file mode 100644 index 0000000..70fb1e9 --- /dev/null +++ b/tests/test_cases/input/slashdash_child.kdl @@ -0,0 +1,3 @@ +node /- { + node2 +} diff --git a/tests/test_cases/input/slashdash_empty_child.kdl b/tests/test_cases/input/slashdash_empty_child.kdl new file mode 100644 index 0000000..644c21b --- /dev/null +++ b/tests/test_cases/input/slashdash_empty_child.kdl @@ -0,0 +1,2 @@ +node /- { +} diff --git a/tests/test_cases/input/slashdash_full_node.kdl b/tests/test_cases/input/slashdash_full_node.kdl new file mode 100644 index 0000000..3ca9ac5 --- /dev/null +++ b/tests/test_cases/input/slashdash_full_node.kdl @@ -0,0 +1,2 @@ +/- node 1.0 "a" b="b +" diff --git a/tests/test_cases/input/slashdash_in_slashdash.kdl b/tests/test_cases/input/slashdash_in_slashdash.kdl new file mode 100644 index 0000000..141f098 --- /dev/null +++ b/tests/test_cases/input/slashdash_in_slashdash.kdl @@ -0,0 +1,2 @@ +/- node1 /- 1.0 +node2 diff --git a/tests/test_cases/input/slashdash_negative_number.kdl b/tests/test_cases/input/slashdash_negative_number.kdl new file mode 100644 index 0000000..241de28 --- /dev/null +++ b/tests/test_cases/input/slashdash_negative_number.kdl @@ -0,0 +1 @@ +node /--1.0 2.0 \ No newline at end of file diff --git a/tests/test_cases/input/slashdash_node_in_child.kdl b/tests/test_cases/input/slashdash_node_in_child.kdl new file mode 100644 index 0000000..fce03d4 --- /dev/null +++ b/tests/test_cases/input/slashdash_node_in_child.kdl @@ -0,0 +1,3 @@ +node1 { + /- node2 +} diff --git a/tests/test_cases/input/slashdash_node_with_child.kdl b/tests/test_cases/input/slashdash_node_with_child.kdl new file mode 100644 index 0000000..0486213 --- /dev/null +++ b/tests/test_cases/input/slashdash_node_with_child.kdl @@ -0,0 +1,3 @@ +/- node { + node2 +} diff --git a/tests/test_cases/input/slashdash_only_node.kdl b/tests/test_cases/input/slashdash_only_node.kdl new file mode 100644 index 0000000..d404630 --- /dev/null +++ b/tests/test_cases/input/slashdash_only_node.kdl @@ -0,0 +1 @@ +/-node diff --git a/tests/test_cases/input/slashdash_only_node_with_space.kdl b/tests/test_cases/input/slashdash_only_node_with_space.kdl new file mode 100644 index 0000000..ab2af84 --- /dev/null +++ b/tests/test_cases/input/slashdash_only_node_with_space.kdl @@ -0,0 +1 @@ +/- node \ No newline at end of file diff --git a/tests/test_cases/input/slashdash_prop.kdl b/tests/test_cases/input/slashdash_prop.kdl new file mode 100644 index 0000000..3d7b806 --- /dev/null +++ b/tests/test_cases/input/slashdash_prop.kdl @@ -0,0 +1 @@ +node /- key="value" "arg" diff --git a/tests/test_cases/input/slashdash_raw_prop_key.kdl b/tests/test_cases/input/slashdash_raw_prop_key.kdl new file mode 100644 index 0000000..c9ad5ad --- /dev/null +++ b/tests/test_cases/input/slashdash_raw_prop_key.kdl @@ -0,0 +1 @@ +node /- key="value" diff --git a/tests/test_cases/input/slashdash_repeated_prop.kdl b/tests/test_cases/input/slashdash_repeated_prop.kdl new file mode 100644 index 0000000..b427175 --- /dev/null +++ b/tests/test_cases/input/slashdash_repeated_prop.kdl @@ -0,0 +1 @@ +node arg="correct" /- arg="wrong" diff --git a/tests/test_cases/input/space_after_arg_type.kdl b/tests/test_cases/input/space_after_arg_type.kdl new file mode 100644 index 0000000..2fe3698 --- /dev/null +++ b/tests/test_cases/input/space_after_arg_type.kdl @@ -0,0 +1 @@ +node (type) 10 diff --git a/tests/test_cases/input/space_after_node_type.kdl b/tests/test_cases/input/space_after_node_type.kdl new file mode 100644 index 0000000..f401065 --- /dev/null +++ b/tests/test_cases/input/space_after_node_type.kdl @@ -0,0 +1 @@ +(type) node diff --git a/tests/test_cases/input/space_after_prop_type.kdl b/tests/test_cases/input/space_after_prop_type.kdl new file mode 100644 index 0000000..a891dfd --- /dev/null +++ b/tests/test_cases/input/space_after_prop_type.kdl @@ -0,0 +1 @@ +node key=(type) false diff --git a/tests/test_cases/input/space_in_arg_type.kdl b/tests/test_cases/input/space_in_arg_type.kdl new file mode 100644 index 0000000..2f9ca24 --- /dev/null +++ b/tests/test_cases/input/space_in_arg_type.kdl @@ -0,0 +1 @@ +node (type )false diff --git a/tests/test_cases/input/space_in_node_type.kdl b/tests/test_cases/input/space_in_node_type.kdl new file mode 100644 index 0000000..929365b --- /dev/null +++ b/tests/test_cases/input/space_in_node_type.kdl @@ -0,0 +1 @@ +( type)node diff --git a/tests/test_cases/input/space_in_prop_type.kdl b/tests/test_cases/input/space_in_prop_type.kdl new file mode 100644 index 0000000..4e9c750 --- /dev/null +++ b/tests/test_cases/input/space_in_prop_type.kdl @@ -0,0 +1 @@ +node key=(type )false diff --git a/tests/test_cases/input/square_bracket_in_bare_id.kdl b/tests/test_cases/input/square_bracket_in_bare_id.kdl new file mode 100644 index 0000000..2dd54e9 --- /dev/null +++ b/tests/test_cases/input/square_bracket_in_bare_id.kdl @@ -0,0 +1 @@ +foo123[bar]foo "weeee" diff --git a/tests/test_cases/input/string_arg.kdl b/tests/test_cases/input/string_arg.kdl new file mode 100644 index 0000000..e5161d1 --- /dev/null +++ b/tests/test_cases/input/string_arg.kdl @@ -0,0 +1 @@ +node "arg" \ No newline at end of file diff --git a/tests/test_cases/input/string_prop.kdl b/tests/test_cases/input/string_prop.kdl new file mode 100644 index 0000000..4c29c14 --- /dev/null +++ b/tests/test_cases/input/string_prop.kdl @@ -0,0 +1 @@ +node prop="val" \ No newline at end of file diff --git a/tests/test_cases/input/tab_space.kdl b/tests/test_cases/input/tab_space.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/input/tab_space.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/input/trailing_crlf.kdl b/tests/test_cases/input/trailing_crlf.kdl new file mode 100644 index 0000000..64f5a0a --- /dev/null +++ b/tests/test_cases/input/trailing_crlf.kdl @@ -0,0 +1 @@ +node diff --git a/tests/test_cases/input/trailing_underscore_hex.kdl b/tests/test_cases/input/trailing_underscore_hex.kdl new file mode 100644 index 0000000..bdf65bc --- /dev/null +++ b/tests/test_cases/input/trailing_underscore_hex.kdl @@ -0,0 +1 @@ +node 0x123abc_ \ No newline at end of file diff --git a/tests/test_cases/input/trailing_underscore_octal.kdl b/tests/test_cases/input/trailing_underscore_octal.kdl new file mode 100644 index 0000000..1d27c18 --- /dev/null +++ b/tests/test_cases/input/trailing_underscore_octal.kdl @@ -0,0 +1 @@ +node 0o123_ diff --git a/tests/test_cases/input/true_prefix_in_bare_id.kdl b/tests/test_cases/input/true_prefix_in_bare_id.kdl new file mode 100644 index 0000000..49c9d0d --- /dev/null +++ b/tests/test_cases/input/true_prefix_in_bare_id.kdl @@ -0,0 +1 @@ +true_id diff --git a/tests/test_cases/input/true_prefix_in_prop_key.kdl b/tests/test_cases/input/true_prefix_in_prop_key.kdl new file mode 100644 index 0000000..2af7a1c --- /dev/null +++ b/tests/test_cases/input/true_prefix_in_prop_key.kdl @@ -0,0 +1 @@ +node true_id=1 diff --git a/tests/test_cases/input/true_prop_key.kdl b/tests/test_cases/input/true_prop_key.kdl new file mode 100644 index 0000000..e88c36f --- /dev/null +++ b/tests/test_cases/input/true_prop_key.kdl @@ -0,0 +1 @@ +node true=1 diff --git a/tests/test_cases/input/two_nodes.kdl b/tests/test_cases/input/two_nodes.kdl new file mode 100644 index 0000000..1c5b5f3 --- /dev/null +++ b/tests/test_cases/input/two_nodes.kdl @@ -0,0 +1,2 @@ +node1 +node2 diff --git a/tests/test_cases/input/type_before_prop_key.kdl b/tests/test_cases/input/type_before_prop_key.kdl new file mode 100644 index 0000000..1b19b0d --- /dev/null +++ b/tests/test_cases/input/type_before_prop_key.kdl @@ -0,0 +1 @@ +node (type)key=10 diff --git a/tests/test_cases/input/unbalanced_raw_hashes.kdl b/tests/test_cases/input/unbalanced_raw_hashes.kdl new file mode 100644 index 0000000..7deb72f --- /dev/null +++ b/tests/test_cases/input/unbalanced_raw_hashes.kdl @@ -0,0 +1 @@ +node r##"foo"# diff --git a/tests/test_cases/input/underscore_at_start_of_fraction.kdl b/tests/test_cases/input/underscore_at_start_of_fraction.kdl new file mode 100644 index 0000000..30fb7cc --- /dev/null +++ b/tests/test_cases/input/underscore_at_start_of_fraction.kdl @@ -0,0 +1 @@ +node 1._7 \ No newline at end of file diff --git a/tests/test_cases/input/underscore_at_start_of_hex.kdl b/tests/test_cases/input/underscore_at_start_of_hex.kdl new file mode 100644 index 0000000..2de0c48 --- /dev/null +++ b/tests/test_cases/input/underscore_at_start_of_hex.kdl @@ -0,0 +1 @@ +node 0x_10 \ No newline at end of file diff --git a/tests/test_cases/input/underscore_at_start_of_int.kdl b/tests/test_cases/input/underscore_at_start_of_int.kdl new file mode 100644 index 0000000..b854b60 --- /dev/null +++ b/tests/test_cases/input/underscore_at_start_of_int.kdl @@ -0,0 +1 @@ +node _15 \ No newline at end of file diff --git a/tests/test_cases/input/underscore_before_number.kdl b/tests/test_cases/input/underscore_before_number.kdl new file mode 100644 index 0000000..788656b --- /dev/null +++ b/tests/test_cases/input/underscore_before_number.kdl @@ -0,0 +1 @@ +node _15 diff --git a/tests/test_cases/input/underscore_in_exponent.kdl b/tests/test_cases/input/underscore_in_exponent.kdl new file mode 100644 index 0000000..329c736 --- /dev/null +++ b/tests/test_cases/input/underscore_in_exponent.kdl @@ -0,0 +1 @@ +node 1.0e-10_0 diff --git a/tests/test_cases/input/underscore_in_float.kdl b/tests/test_cases/input/underscore_in_float.kdl new file mode 100644 index 0000000..f039b6a --- /dev/null +++ b/tests/test_cases/input/underscore_in_float.kdl @@ -0,0 +1 @@ +node 1_1.0 diff --git a/tests/test_cases/input/underscore_in_fraction.kdl b/tests/test_cases/input/underscore_in_fraction.kdl new file mode 100644 index 0000000..b1a091a --- /dev/null +++ b/tests/test_cases/input/underscore_in_fraction.kdl @@ -0,0 +1 @@ +node 1.0_2 \ No newline at end of file diff --git a/tests/test_cases/input/underscore_in_int.kdl b/tests/test_cases/input/underscore_in_int.kdl new file mode 100644 index 0000000..19250d3 --- /dev/null +++ b/tests/test_cases/input/underscore_in_int.kdl @@ -0,0 +1 @@ +node 1_0 diff --git a/tests/test_cases/input/underscore_in_octal.kdl b/tests/test_cases/input/underscore_in_octal.kdl new file mode 100644 index 0000000..8a57ec1 --- /dev/null +++ b/tests/test_cases/input/underscore_in_octal.kdl @@ -0,0 +1 @@ +node 0o012_3456_7 \ No newline at end of file diff --git a/tests/test_cases/input/unusual_bare_id_chars_in_quoted_id.kdl b/tests/test_cases/input/unusual_bare_id_chars_in_quoted_id.kdl new file mode 100644 index 0000000..e37de20 --- /dev/null +++ b/tests/test_cases/input/unusual_bare_id_chars_in_quoted_id.kdl @@ -0,0 +1 @@ +"foo123~!@#$%^&*.:'|?+" "weeee" \ No newline at end of file diff --git a/tests/test_cases/input/unusual_chars_in_bare_id.kdl b/tests/test_cases/input/unusual_chars_in_bare_id.kdl new file mode 100644 index 0000000..d2dcd19 --- /dev/null +++ b/tests/test_cases/input/unusual_chars_in_bare_id.kdl @@ -0,0 +1 @@ +foo123~!@#$%^&*.:'|?+ "weeee" diff --git a/tests/test_cases/input/zero_arg.kdl b/tests/test_cases/input/zero_arg.kdl new file mode 100644 index 0000000..74405b6 --- /dev/null +++ b/tests/test_cases/input/zero_arg.kdl @@ -0,0 +1 @@ +node 0 diff --git a/tests/test_cases/input/zero_float.kdl b/tests/test_cases/input/zero_float.kdl new file mode 100644 index 0000000..fd5b1f1 --- /dev/null +++ b/tests/test_cases/input/zero_float.kdl @@ -0,0 +1 @@ +node 0.0 diff --git a/tests/test_cases/input/zero_int.kdl b/tests/test_cases/input/zero_int.kdl new file mode 100644 index 0000000..74405b6 --- /dev/null +++ b/tests/test_cases/input/zero_int.kdl @@ -0,0 +1 @@ +node 0