From 29ae90e9f548a2e1451dfd94cde735ee42c5df5c Mon Sep 17 00:00:00 2001 From: "Tab Atkins Jr." Date: Fri, 6 Dec 2024 15:06:28 -0800 Subject: [PATCH] Indicate expected-fail tests with a _fail suffix. Fixes #365 (#418) * Indicate expected-fail tests with a _fail suffix. Fixes #365 * Update the README with directions for formatting failing tests * Add a lint for failing and orphaned tests. --- .github/workflows/lint-tests.yml | 25 +++++++++++++ .github/workflows/lint-tests/lint.py | 35 +++++++++++++++++++ tests/README.md | 8 +++-- ...ot.kdl => bare_ident_numeric_dot_fail.kdl} | 0 ...umeric.kdl => bare_ident_numeric_fail.kdl} | 0 ...n.kdl => bare_ident_numeric_sign_fail.kdl} | 0 .../{bom_later.kdl => bom_later_fail.kdl} | 0 ...re_id.kdl => brackets_in_bare_id_fail.kdl} | 0 ..._but_no_fraction_before_exponent_fail.kdl} | 0 ...ction.kdl => dot_but_no_fraction_fail.kdl} | 0 ..._exponent.kdl => dot_in_exponent_fail.kdl} | 0 .../input/{dot_zero.kdl => dot_zero_fail.kdl} | 0 ...y_arg_type.kdl => empty_arg_type_fail.kdl} | 0 ...node_type.kdl => empty_node_type_fail.kdl} | 0 ...prop_type.kdl => empty_prop_type_fail.kdl} | 0 ....kdl => err_backslash_in_bare_id_fail.kdl} | 0 ...e_prop_key.kdl => false_prop_key_fail.kdl} | 0 ...ord_identifier_strings_error.kdl_fail.kdl} | 0 .../{hash_in_id.kdl => hash_in_id_fail.kdl} | 0 ...ry.kdl => illegal_char_in_binary_fail.kdl} | 0 ...n_hex.kdl => illegal_char_in_hex_fail.kdl} | 0 ...tal.kdl => illegal_char_in_octal_fail.kdl} | 0 ...pe.kdl => just_space_in_arg_type_fail.kdl} | 0 ...e.kdl => just_space_in_node_type_fail.kdl} | 0 ...e.kdl => just_space_in_prop_type_fail.kdl} | 0 ...e_no_arg.kdl => just_type_no_arg_fail.kdl} | 0 ...e_id.kdl => just_type_no_node_id_fail.kdl} | 0 ...no_prop.kdl => just_type_no_prop_fail.kdl} | 0 ..._matching_prefix_character_error_fail.kdl} | 0 ..._non_matching_prefix_count_error_fail.kdl} | 0 ...iline_raw_string_single_line_err_fail.kdl} | 0 ...line_raw_string_single_quote_err_fail.kdl} | 0 ..._matching_prefix_character_error_fail.kdl} | 0 ..._non_matching_prefix_count_error_fail.kdl} | 0 ...multiline_string_single_line_err_fail.kdl} | 0 ...ultiline_string_single_quote_err_fail.kdl} | 0 ...le_dots_in_float_before_exponent_fail.kdl} | 0 ...at.kdl => multiple_dots_in_float_fail.kdl} | 0 ...loat.kdl => multiple_es_in_float_fail.kdl} | 0 ..._in_hex.kdl => multiple_x_in_hex_fail.kdl} | 0 ...s_in_hex.kdl => no_digits_in_hex_fail.kdl} | 0 ...er_digit.kdl => no_integer_digit_fail.kdl} | 0 ..._escape.kdl => no_solidus_escape_fail.kdl} | 0 ...ll_prop_key.kdl => null_prop_key_fail.kdl} | 0 ...bare_id.kdl => parens_in_bare_id_fail.kdl} | 0 ..._bare_id.kdl => quote_in_bare_id_fail.kdl} | 0 ..._bare_id.kdl => slash_in_bare_id_fail.kdl} | 0 ...ash_child_block_before_entry_err_fail.kdl} | 0 ...kdl => square_bracket_in_bare_id_fail.kdl} | 0 ...ue_prop_key.kdl => true_prop_key_fail.kdl} | 0 ..._key.kdl => type_before_prop_key_fail.kdl} | 0 ...hes.kdl => unbalanced_raw_hashes_fail.kdl} | 0 ... underscore_at_start_of_fraction_fail.kdl} | 0 ...dl => underscore_at_start_of_hex_fail.kdl} | 0 ...ode_delete.kdl => unicode_delete_fail.kdl} | 0 .../{unicode_fsi.kdl => unicode_fsi_fail.kdl} | 0 .../{unicode_lre.kdl => unicode_lre_fail.kdl} | 0 .../{unicode_lri.kdl => unicode_lri_fail.kdl} | 0 .../{unicode_lrm.kdl => unicode_lrm_fail.kdl} | 0 .../{unicode_lro.kdl => unicode_lro_fail.kdl} | 0 .../{unicode_pdf.kdl => unicode_pdf_fail.kdl} | 0 .../{unicode_pdi.kdl => unicode_pdi_fail.kdl} | 0 .../{unicode_rle.kdl => unicode_rle_fail.kdl} | 0 .../{unicode_rli.kdl => unicode_rli_fail.kdl} | 0 .../{unicode_rlm.kdl => unicode_rlm_fail.kdl} | 0 .../{unicode_rlo.kdl => unicode_rlo_fail.kdl} | 0 ...r_0x20.kdl => unicode_under_0x20_fail.kdl} | 0 ...e.kdl => unterminated_empty_node_fail.kdl} | 0 68 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 .github/workflows/lint-tests.yml create mode 100644 .github/workflows/lint-tests/lint.py rename tests/test_cases/input/{bare_ident_numeric_dot.kdl => bare_ident_numeric_dot_fail.kdl} (100%) rename tests/test_cases/input/{bare_ident_numeric.kdl => bare_ident_numeric_fail.kdl} (100%) rename tests/test_cases/input/{bare_ident_numeric_sign.kdl => bare_ident_numeric_sign_fail.kdl} (100%) rename tests/test_cases/input/{bom_later.kdl => bom_later_fail.kdl} (100%) rename tests/test_cases/input/{brackets_in_bare_id.kdl => brackets_in_bare_id_fail.kdl} (100%) rename tests/test_cases/input/{dot_but_no_fraction_before_exponent.kdl => dot_but_no_fraction_before_exponent_fail.kdl} (100%) rename tests/test_cases/input/{dot_but_no_fraction.kdl => dot_but_no_fraction_fail.kdl} (100%) rename tests/test_cases/input/{dot_in_exponent.kdl => dot_in_exponent_fail.kdl} (100%) rename tests/test_cases/input/{dot_zero.kdl => dot_zero_fail.kdl} (100%) rename tests/test_cases/input/{empty_arg_type.kdl => empty_arg_type_fail.kdl} (100%) rename tests/test_cases/input/{empty_node_type.kdl => empty_node_type_fail.kdl} (100%) rename tests/test_cases/input/{empty_prop_type.kdl => empty_prop_type_fail.kdl} (100%) rename tests/test_cases/input/{err_backslash_in_bare_id.kdl => err_backslash_in_bare_id_fail.kdl} (100%) rename tests/test_cases/input/{false_prop_key.kdl => false_prop_key_fail.kdl} (100%) rename tests/test_cases/input/{floating_point_keyword_identifier_strings_error.kdl.kdl => floating_point_keyword_identifier_strings_error.kdl_fail.kdl} (100%) rename tests/test_cases/input/{hash_in_id.kdl => hash_in_id_fail.kdl} (100%) rename tests/test_cases/input/{illegal_char_in_binary.kdl => illegal_char_in_binary_fail.kdl} (100%) rename tests/test_cases/input/{illegal_char_in_hex.kdl => illegal_char_in_hex_fail.kdl} (100%) rename tests/test_cases/input/{illegal_char_in_octal.kdl => illegal_char_in_octal_fail.kdl} (100%) rename tests/test_cases/input/{just_space_in_arg_type.kdl => just_space_in_arg_type_fail.kdl} (100%) rename tests/test_cases/input/{just_space_in_node_type.kdl => just_space_in_node_type_fail.kdl} (100%) rename tests/test_cases/input/{just_space_in_prop_type.kdl => just_space_in_prop_type_fail.kdl} (100%) rename tests/test_cases/input/{just_type_no_arg.kdl => just_type_no_arg_fail.kdl} (100%) rename tests/test_cases/input/{just_type_no_node_id.kdl => just_type_no_node_id_fail.kdl} (100%) rename tests/test_cases/input/{just_type_no_prop.kdl => just_type_no_prop_fail.kdl} (100%) rename tests/test_cases/input/{multiline_raw_string_non_matching_prefix_character_error.kdl => multiline_raw_string_non_matching_prefix_character_error_fail.kdl} (100%) rename tests/test_cases/input/{multiline_raw_string_non_matching_prefix_count_error.kdl => multiline_raw_string_non_matching_prefix_count_error_fail.kdl} (100%) rename tests/test_cases/input/{multiline_raw_string_single_line_err.kdl => multiline_raw_string_single_line_err_fail.kdl} (100%) rename tests/test_cases/input/{multiline_raw_string_single_quote_err.kdl => multiline_raw_string_single_quote_err_fail.kdl} (100%) rename tests/test_cases/input/{multiline_string_non_matching_prefix_character_error.kdl => multiline_string_non_matching_prefix_character_error_fail.kdl} (100%) rename tests/test_cases/input/{multiline_string_non_matching_prefix_count_error.kdl => multiline_string_non_matching_prefix_count_error_fail.kdl} (100%) rename tests/test_cases/input/{multiline_string_single_line_err.kdl => multiline_string_single_line_err_fail.kdl} (100%) rename tests/test_cases/input/{multiline_string_single_quote_err.kdl => multiline_string_single_quote_err_fail.kdl} (100%) rename tests/test_cases/input/{multiple_dots_in_float_before_exponent.kdl => multiple_dots_in_float_before_exponent_fail.kdl} (100%) rename tests/test_cases/input/{multiple_dots_in_float.kdl => multiple_dots_in_float_fail.kdl} (100%) rename tests/test_cases/input/{multiple_es_in_float.kdl => multiple_es_in_float_fail.kdl} (100%) rename tests/test_cases/input/{multiple_x_in_hex.kdl => multiple_x_in_hex_fail.kdl} (100%) rename tests/test_cases/input/{no_digits_in_hex.kdl => no_digits_in_hex_fail.kdl} (100%) rename tests/test_cases/input/{no_integer_digit.kdl => no_integer_digit_fail.kdl} (100%) rename tests/test_cases/input/{no_solidus_escape.kdl => no_solidus_escape_fail.kdl} (100%) rename tests/test_cases/input/{null_prop_key.kdl => null_prop_key_fail.kdl} (100%) rename tests/test_cases/input/{parens_in_bare_id.kdl => parens_in_bare_id_fail.kdl} (100%) rename tests/test_cases/input/{quote_in_bare_id.kdl => quote_in_bare_id_fail.kdl} (100%) rename tests/test_cases/input/{slash_in_bare_id.kdl => slash_in_bare_id_fail.kdl} (100%) rename tests/test_cases/input/{slashdash_child_block_before_entry_err.kdl => slashdash_child_block_before_entry_err_fail.kdl} (100%) rename tests/test_cases/input/{square_bracket_in_bare_id.kdl => square_bracket_in_bare_id_fail.kdl} (100%) rename tests/test_cases/input/{true_prop_key.kdl => true_prop_key_fail.kdl} (100%) rename tests/test_cases/input/{type_before_prop_key.kdl => type_before_prop_key_fail.kdl} (100%) rename tests/test_cases/input/{unbalanced_raw_hashes.kdl => unbalanced_raw_hashes_fail.kdl} (100%) rename tests/test_cases/input/{underscore_at_start_of_fraction.kdl => underscore_at_start_of_fraction_fail.kdl} (100%) rename tests/test_cases/input/{underscore_at_start_of_hex.kdl => underscore_at_start_of_hex_fail.kdl} (100%) rename tests/test_cases/input/{unicode_delete.kdl => unicode_delete_fail.kdl} (100%) rename tests/test_cases/input/{unicode_fsi.kdl => unicode_fsi_fail.kdl} (100%) rename tests/test_cases/input/{unicode_lre.kdl => unicode_lre_fail.kdl} (100%) rename tests/test_cases/input/{unicode_lri.kdl => unicode_lri_fail.kdl} (100%) rename tests/test_cases/input/{unicode_lrm.kdl => unicode_lrm_fail.kdl} (100%) rename tests/test_cases/input/{unicode_lro.kdl => unicode_lro_fail.kdl} (100%) rename tests/test_cases/input/{unicode_pdf.kdl => unicode_pdf_fail.kdl} (100%) rename tests/test_cases/input/{unicode_pdi.kdl => unicode_pdi_fail.kdl} (100%) rename tests/test_cases/input/{unicode_rle.kdl => unicode_rle_fail.kdl} (100%) rename tests/test_cases/input/{unicode_rli.kdl => unicode_rli_fail.kdl} (100%) rename tests/test_cases/input/{unicode_rlm.kdl => unicode_rlm_fail.kdl} (100%) rename tests/test_cases/input/{unicode_rlo.kdl => unicode_rlo_fail.kdl} (100%) rename tests/test_cases/input/{unicode_under_0x20.kdl => unicode_under_0x20_fail.kdl} (100%) rename tests/test_cases/input/{unterminated_empty_node.kdl => unterminated_empty_node_fail.kdl} (100%) diff --git a/.github/workflows/lint-tests.yml b/.github/workflows/lint-tests.yml new file mode 100644 index 0000000..3005211 --- /dev/null +++ b/.github/workflows/lint-tests.yml @@ -0,0 +1,25 @@ +name: Lint the test files + +on: + push: + paths: + - "tests/**" + pull_request: + paths: + - "tests/**" + workflow_dispatch: {} + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Verify failing tests and orphaned tests + run: | + cd tests/test_cases + python ../../.github/workflows/lint-tests/lint.py \ No newline at end of file diff --git a/.github/workflows/lint-tests/lint.py b/.github/workflows/lint-tests/lint.py new file mode 100644 index 0000000..d23f6dc --- /dev/null +++ b/.github/workflows/lint-tests/lint.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +import os +import sys +import typing + +def findTestFiles(path) -> typing.Generator[str, None, None]: + for root, _, filenames in os.walk(path): + for filename in filenames: + yield os.path.join(root, filename) + +# strip the leading folder name, so they can be directly compared +inputFiles = set(x[len("input")+1:] for x in findTestFiles("input")) +validFiles = set(x[len("expected_kdl")+1:] for x in findTestFiles("expected_kdl")) + +invalidFiles = inputFiles - validFiles +orphanedFiles = validFiles - inputFiles + +SUCCESS = True + +if orphanedFiles: + SUCCESS = False + print("ERROR: There are outputs in /expected_kdl without corresponding tests in /input:\n" + "\n".join([" "+x for x in orphanedFiles])) + +misnamedFiles: list[str] = [] +for filepath in invalidFiles: + basepath, ext = os.path.splitext(filepath) + if not basepath.endswith("_fail"): + misnamedFiles.append(filepath) +if misnamedFiles: + SUCCESS = False + print("ERROR: There are tests in /input without corresponding outputs in /expected_kdl, but they don't have a _fail suffix:\n" + "\n".join([" "+x for x in misnamedFiles])) + +if not SUCCESS: + sys.exit(1) \ No newline at end of file diff --git a/tests/README.md b/tests/README.md index 0ddfea0..848aeb0 100644 --- a/tests/README.md +++ b/tests/README.md @@ -2,9 +2,11 @@ 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. +output after being run through the parser and printed out again. + +If a testcase is intended to fail parsing, +the `input` file _MUST_ have a `_fail` suffix, +and there must be no corresponding file in `expected_kdl`. ## Translation Rules diff --git a/tests/test_cases/input/bare_ident_numeric_dot.kdl b/tests/test_cases/input/bare_ident_numeric_dot_fail.kdl similarity index 100% rename from tests/test_cases/input/bare_ident_numeric_dot.kdl rename to tests/test_cases/input/bare_ident_numeric_dot_fail.kdl diff --git a/tests/test_cases/input/bare_ident_numeric.kdl b/tests/test_cases/input/bare_ident_numeric_fail.kdl similarity index 100% rename from tests/test_cases/input/bare_ident_numeric.kdl rename to tests/test_cases/input/bare_ident_numeric_fail.kdl diff --git a/tests/test_cases/input/bare_ident_numeric_sign.kdl b/tests/test_cases/input/bare_ident_numeric_sign_fail.kdl similarity index 100% rename from tests/test_cases/input/bare_ident_numeric_sign.kdl rename to tests/test_cases/input/bare_ident_numeric_sign_fail.kdl diff --git a/tests/test_cases/input/bom_later.kdl b/tests/test_cases/input/bom_later_fail.kdl similarity index 100% rename from tests/test_cases/input/bom_later.kdl rename to tests/test_cases/input/bom_later_fail.kdl diff --git a/tests/test_cases/input/brackets_in_bare_id.kdl b/tests/test_cases/input/brackets_in_bare_id_fail.kdl similarity index 100% rename from tests/test_cases/input/brackets_in_bare_id.kdl rename to tests/test_cases/input/brackets_in_bare_id_fail.kdl 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_fail.kdl similarity index 100% rename from tests/test_cases/input/dot_but_no_fraction_before_exponent.kdl rename to tests/test_cases/input/dot_but_no_fraction_before_exponent_fail.kdl diff --git a/tests/test_cases/input/dot_but_no_fraction.kdl b/tests/test_cases/input/dot_but_no_fraction_fail.kdl similarity index 100% rename from tests/test_cases/input/dot_but_no_fraction.kdl rename to tests/test_cases/input/dot_but_no_fraction_fail.kdl diff --git a/tests/test_cases/input/dot_in_exponent.kdl b/tests/test_cases/input/dot_in_exponent_fail.kdl similarity index 100% rename from tests/test_cases/input/dot_in_exponent.kdl rename to tests/test_cases/input/dot_in_exponent_fail.kdl diff --git a/tests/test_cases/input/dot_zero.kdl b/tests/test_cases/input/dot_zero_fail.kdl similarity index 100% rename from tests/test_cases/input/dot_zero.kdl rename to tests/test_cases/input/dot_zero_fail.kdl diff --git a/tests/test_cases/input/empty_arg_type.kdl b/tests/test_cases/input/empty_arg_type_fail.kdl similarity index 100% rename from tests/test_cases/input/empty_arg_type.kdl rename to tests/test_cases/input/empty_arg_type_fail.kdl diff --git a/tests/test_cases/input/empty_node_type.kdl b/tests/test_cases/input/empty_node_type_fail.kdl similarity index 100% rename from tests/test_cases/input/empty_node_type.kdl rename to tests/test_cases/input/empty_node_type_fail.kdl diff --git a/tests/test_cases/input/empty_prop_type.kdl b/tests/test_cases/input/empty_prop_type_fail.kdl similarity index 100% rename from tests/test_cases/input/empty_prop_type.kdl rename to tests/test_cases/input/empty_prop_type_fail.kdl diff --git a/tests/test_cases/input/err_backslash_in_bare_id.kdl b/tests/test_cases/input/err_backslash_in_bare_id_fail.kdl similarity index 100% rename from tests/test_cases/input/err_backslash_in_bare_id.kdl rename to tests/test_cases/input/err_backslash_in_bare_id_fail.kdl diff --git a/tests/test_cases/input/false_prop_key.kdl b/tests/test_cases/input/false_prop_key_fail.kdl similarity index 100% rename from tests/test_cases/input/false_prop_key.kdl rename to tests/test_cases/input/false_prop_key_fail.kdl diff --git a/tests/test_cases/input/floating_point_keyword_identifier_strings_error.kdl.kdl b/tests/test_cases/input/floating_point_keyword_identifier_strings_error.kdl_fail.kdl similarity index 100% rename from tests/test_cases/input/floating_point_keyword_identifier_strings_error.kdl.kdl rename to tests/test_cases/input/floating_point_keyword_identifier_strings_error.kdl_fail.kdl diff --git a/tests/test_cases/input/hash_in_id.kdl b/tests/test_cases/input/hash_in_id_fail.kdl similarity index 100% rename from tests/test_cases/input/hash_in_id.kdl rename to tests/test_cases/input/hash_in_id_fail.kdl diff --git a/tests/test_cases/input/illegal_char_in_binary.kdl b/tests/test_cases/input/illegal_char_in_binary_fail.kdl similarity index 100% rename from tests/test_cases/input/illegal_char_in_binary.kdl rename to tests/test_cases/input/illegal_char_in_binary_fail.kdl diff --git a/tests/test_cases/input/illegal_char_in_hex.kdl b/tests/test_cases/input/illegal_char_in_hex_fail.kdl similarity index 100% rename from tests/test_cases/input/illegal_char_in_hex.kdl rename to tests/test_cases/input/illegal_char_in_hex_fail.kdl diff --git a/tests/test_cases/input/illegal_char_in_octal.kdl b/tests/test_cases/input/illegal_char_in_octal_fail.kdl similarity index 100% rename from tests/test_cases/input/illegal_char_in_octal.kdl rename to tests/test_cases/input/illegal_char_in_octal_fail.kdl diff --git a/tests/test_cases/input/just_space_in_arg_type.kdl b/tests/test_cases/input/just_space_in_arg_type_fail.kdl similarity index 100% rename from tests/test_cases/input/just_space_in_arg_type.kdl rename to tests/test_cases/input/just_space_in_arg_type_fail.kdl diff --git a/tests/test_cases/input/just_space_in_node_type.kdl b/tests/test_cases/input/just_space_in_node_type_fail.kdl similarity index 100% rename from tests/test_cases/input/just_space_in_node_type.kdl rename to tests/test_cases/input/just_space_in_node_type_fail.kdl diff --git a/tests/test_cases/input/just_space_in_prop_type.kdl b/tests/test_cases/input/just_space_in_prop_type_fail.kdl similarity index 100% rename from tests/test_cases/input/just_space_in_prop_type.kdl rename to tests/test_cases/input/just_space_in_prop_type_fail.kdl diff --git a/tests/test_cases/input/just_type_no_arg.kdl b/tests/test_cases/input/just_type_no_arg_fail.kdl similarity index 100% rename from tests/test_cases/input/just_type_no_arg.kdl rename to tests/test_cases/input/just_type_no_arg_fail.kdl diff --git a/tests/test_cases/input/just_type_no_node_id.kdl b/tests/test_cases/input/just_type_no_node_id_fail.kdl similarity index 100% rename from tests/test_cases/input/just_type_no_node_id.kdl rename to tests/test_cases/input/just_type_no_node_id_fail.kdl diff --git a/tests/test_cases/input/just_type_no_prop.kdl b/tests/test_cases/input/just_type_no_prop_fail.kdl similarity index 100% rename from tests/test_cases/input/just_type_no_prop.kdl rename to tests/test_cases/input/just_type_no_prop_fail.kdl diff --git a/tests/test_cases/input/multiline_raw_string_non_matching_prefix_character_error.kdl b/tests/test_cases/input/multiline_raw_string_non_matching_prefix_character_error_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_raw_string_non_matching_prefix_character_error.kdl rename to tests/test_cases/input/multiline_raw_string_non_matching_prefix_character_error_fail.kdl diff --git a/tests/test_cases/input/multiline_raw_string_non_matching_prefix_count_error.kdl b/tests/test_cases/input/multiline_raw_string_non_matching_prefix_count_error_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_raw_string_non_matching_prefix_count_error.kdl rename to tests/test_cases/input/multiline_raw_string_non_matching_prefix_count_error_fail.kdl diff --git a/tests/test_cases/input/multiline_raw_string_single_line_err.kdl b/tests/test_cases/input/multiline_raw_string_single_line_err_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_raw_string_single_line_err.kdl rename to tests/test_cases/input/multiline_raw_string_single_line_err_fail.kdl diff --git a/tests/test_cases/input/multiline_raw_string_single_quote_err.kdl b/tests/test_cases/input/multiline_raw_string_single_quote_err_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_raw_string_single_quote_err.kdl rename to tests/test_cases/input/multiline_raw_string_single_quote_err_fail.kdl diff --git a/tests/test_cases/input/multiline_string_non_matching_prefix_character_error.kdl b/tests/test_cases/input/multiline_string_non_matching_prefix_character_error_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_string_non_matching_prefix_character_error.kdl rename to tests/test_cases/input/multiline_string_non_matching_prefix_character_error_fail.kdl diff --git a/tests/test_cases/input/multiline_string_non_matching_prefix_count_error.kdl b/tests/test_cases/input/multiline_string_non_matching_prefix_count_error_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_string_non_matching_prefix_count_error.kdl rename to tests/test_cases/input/multiline_string_non_matching_prefix_count_error_fail.kdl diff --git a/tests/test_cases/input/multiline_string_single_line_err.kdl b/tests/test_cases/input/multiline_string_single_line_err_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_string_single_line_err.kdl rename to tests/test_cases/input/multiline_string_single_line_err_fail.kdl diff --git a/tests/test_cases/input/multiline_string_single_quote_err.kdl b/tests/test_cases/input/multiline_string_single_quote_err_fail.kdl similarity index 100% rename from tests/test_cases/input/multiline_string_single_quote_err.kdl rename to tests/test_cases/input/multiline_string_single_quote_err_fail.kdl 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_fail.kdl similarity index 100% rename from tests/test_cases/input/multiple_dots_in_float_before_exponent.kdl rename to tests/test_cases/input/multiple_dots_in_float_before_exponent_fail.kdl diff --git a/tests/test_cases/input/multiple_dots_in_float.kdl b/tests/test_cases/input/multiple_dots_in_float_fail.kdl similarity index 100% rename from tests/test_cases/input/multiple_dots_in_float.kdl rename to tests/test_cases/input/multiple_dots_in_float_fail.kdl diff --git a/tests/test_cases/input/multiple_es_in_float.kdl b/tests/test_cases/input/multiple_es_in_float_fail.kdl similarity index 100% rename from tests/test_cases/input/multiple_es_in_float.kdl rename to tests/test_cases/input/multiple_es_in_float_fail.kdl diff --git a/tests/test_cases/input/multiple_x_in_hex.kdl b/tests/test_cases/input/multiple_x_in_hex_fail.kdl similarity index 100% rename from tests/test_cases/input/multiple_x_in_hex.kdl rename to tests/test_cases/input/multiple_x_in_hex_fail.kdl diff --git a/tests/test_cases/input/no_digits_in_hex.kdl b/tests/test_cases/input/no_digits_in_hex_fail.kdl similarity index 100% rename from tests/test_cases/input/no_digits_in_hex.kdl rename to tests/test_cases/input/no_digits_in_hex_fail.kdl diff --git a/tests/test_cases/input/no_integer_digit.kdl b/tests/test_cases/input/no_integer_digit_fail.kdl similarity index 100% rename from tests/test_cases/input/no_integer_digit.kdl rename to tests/test_cases/input/no_integer_digit_fail.kdl diff --git a/tests/test_cases/input/no_solidus_escape.kdl b/tests/test_cases/input/no_solidus_escape_fail.kdl similarity index 100% rename from tests/test_cases/input/no_solidus_escape.kdl rename to tests/test_cases/input/no_solidus_escape_fail.kdl diff --git a/tests/test_cases/input/null_prop_key.kdl b/tests/test_cases/input/null_prop_key_fail.kdl similarity index 100% rename from tests/test_cases/input/null_prop_key.kdl rename to tests/test_cases/input/null_prop_key_fail.kdl diff --git a/tests/test_cases/input/parens_in_bare_id.kdl b/tests/test_cases/input/parens_in_bare_id_fail.kdl similarity index 100% rename from tests/test_cases/input/parens_in_bare_id.kdl rename to tests/test_cases/input/parens_in_bare_id_fail.kdl diff --git a/tests/test_cases/input/quote_in_bare_id.kdl b/tests/test_cases/input/quote_in_bare_id_fail.kdl similarity index 100% rename from tests/test_cases/input/quote_in_bare_id.kdl rename to tests/test_cases/input/quote_in_bare_id_fail.kdl diff --git a/tests/test_cases/input/slash_in_bare_id.kdl b/tests/test_cases/input/slash_in_bare_id_fail.kdl similarity index 100% rename from tests/test_cases/input/slash_in_bare_id.kdl rename to tests/test_cases/input/slash_in_bare_id_fail.kdl diff --git a/tests/test_cases/input/slashdash_child_block_before_entry_err.kdl b/tests/test_cases/input/slashdash_child_block_before_entry_err_fail.kdl similarity index 100% rename from tests/test_cases/input/slashdash_child_block_before_entry_err.kdl rename to tests/test_cases/input/slashdash_child_block_before_entry_err_fail.kdl diff --git a/tests/test_cases/input/square_bracket_in_bare_id.kdl b/tests/test_cases/input/square_bracket_in_bare_id_fail.kdl similarity index 100% rename from tests/test_cases/input/square_bracket_in_bare_id.kdl rename to tests/test_cases/input/square_bracket_in_bare_id_fail.kdl diff --git a/tests/test_cases/input/true_prop_key.kdl b/tests/test_cases/input/true_prop_key_fail.kdl similarity index 100% rename from tests/test_cases/input/true_prop_key.kdl rename to tests/test_cases/input/true_prop_key_fail.kdl diff --git a/tests/test_cases/input/type_before_prop_key.kdl b/tests/test_cases/input/type_before_prop_key_fail.kdl similarity index 100% rename from tests/test_cases/input/type_before_prop_key.kdl rename to tests/test_cases/input/type_before_prop_key_fail.kdl diff --git a/tests/test_cases/input/unbalanced_raw_hashes.kdl b/tests/test_cases/input/unbalanced_raw_hashes_fail.kdl similarity index 100% rename from tests/test_cases/input/unbalanced_raw_hashes.kdl rename to tests/test_cases/input/unbalanced_raw_hashes_fail.kdl diff --git a/tests/test_cases/input/underscore_at_start_of_fraction.kdl b/tests/test_cases/input/underscore_at_start_of_fraction_fail.kdl similarity index 100% rename from tests/test_cases/input/underscore_at_start_of_fraction.kdl rename to tests/test_cases/input/underscore_at_start_of_fraction_fail.kdl diff --git a/tests/test_cases/input/underscore_at_start_of_hex.kdl b/tests/test_cases/input/underscore_at_start_of_hex_fail.kdl similarity index 100% rename from tests/test_cases/input/underscore_at_start_of_hex.kdl rename to tests/test_cases/input/underscore_at_start_of_hex_fail.kdl diff --git a/tests/test_cases/input/unicode_delete.kdl b/tests/test_cases/input/unicode_delete_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_delete.kdl rename to tests/test_cases/input/unicode_delete_fail.kdl diff --git a/tests/test_cases/input/unicode_fsi.kdl b/tests/test_cases/input/unicode_fsi_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_fsi.kdl rename to tests/test_cases/input/unicode_fsi_fail.kdl diff --git a/tests/test_cases/input/unicode_lre.kdl b/tests/test_cases/input/unicode_lre_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_lre.kdl rename to tests/test_cases/input/unicode_lre_fail.kdl diff --git a/tests/test_cases/input/unicode_lri.kdl b/tests/test_cases/input/unicode_lri_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_lri.kdl rename to tests/test_cases/input/unicode_lri_fail.kdl diff --git a/tests/test_cases/input/unicode_lrm.kdl b/tests/test_cases/input/unicode_lrm_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_lrm.kdl rename to tests/test_cases/input/unicode_lrm_fail.kdl diff --git a/tests/test_cases/input/unicode_lro.kdl b/tests/test_cases/input/unicode_lro_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_lro.kdl rename to tests/test_cases/input/unicode_lro_fail.kdl diff --git a/tests/test_cases/input/unicode_pdf.kdl b/tests/test_cases/input/unicode_pdf_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_pdf.kdl rename to tests/test_cases/input/unicode_pdf_fail.kdl diff --git a/tests/test_cases/input/unicode_pdi.kdl b/tests/test_cases/input/unicode_pdi_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_pdi.kdl rename to tests/test_cases/input/unicode_pdi_fail.kdl diff --git a/tests/test_cases/input/unicode_rle.kdl b/tests/test_cases/input/unicode_rle_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_rle.kdl rename to tests/test_cases/input/unicode_rle_fail.kdl diff --git a/tests/test_cases/input/unicode_rli.kdl b/tests/test_cases/input/unicode_rli_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_rli.kdl rename to tests/test_cases/input/unicode_rli_fail.kdl diff --git a/tests/test_cases/input/unicode_rlm.kdl b/tests/test_cases/input/unicode_rlm_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_rlm.kdl rename to tests/test_cases/input/unicode_rlm_fail.kdl diff --git a/tests/test_cases/input/unicode_rlo.kdl b/tests/test_cases/input/unicode_rlo_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_rlo.kdl rename to tests/test_cases/input/unicode_rlo_fail.kdl diff --git a/tests/test_cases/input/unicode_under_0x20.kdl b/tests/test_cases/input/unicode_under_0x20_fail.kdl similarity index 100% rename from tests/test_cases/input/unicode_under_0x20.kdl rename to tests/test_cases/input/unicode_under_0x20_fail.kdl diff --git a/tests/test_cases/input/unterminated_empty_node.kdl b/tests/test_cases/input/unterminated_empty_node_fail.kdl similarity index 100% rename from tests/test_cases/input/unterminated_empty_node.kdl rename to tests/test_cases/input/unterminated_empty_node_fail.kdl