Files
rapidyaml/test/test_suite/test_suite_parts.cpp
2024-06-08 12:09:35 +01:00

203 lines
13 KiB
C++

#include "./test_suite_parts.hpp"
namespace c4 {
namespace yml {
// g++-5 does not like creating a csubstr directly from the literal.
// so we use this macro (undefined at the end) to make the
// declarations less verbose:
#define _(testcase, reason) AllowedFailure{csubstr(testcase), csubstr(reason)}
// To see the test case contents, refer to this URL:
// https://github.com/yaml/yaml-test-suite/tree/master/src
constexpr const AllowedFailure allowed_failures[] = {
//-------------------------------------------------------------------------
// SECTION 1. Known issues, TODO
//
// These tests are temporarily skipped, and cover issues that must be fixed.
// errors that fail to materialize
_("3HFZ-error" , "should not accept scalar after ..."),
_("4EJS-error" , "should not accept tabs as indendation in a mapping"),
_("5TRB-error" , "should not accept document-end marker in double quoted string"),
_("5U3A-error" , "should not accept opening a sequence on same line as map key"),
_("7LBH-error" , "should not accept multiline double quoted implicit keys"),
_("9C9N-error" , "should not accept non-indented flow sequence"),
_("9MQT_01-error" , "should not accept scalars after ..."),
_("C2SP-error" , "should not accept flow sequence with terminating ] on the next line"),
_("CVW2-error" , "should not accept flow sequence with comment after ,"),
_("CXX2-error" , "should not accept mapping with anchor on document start line"),
_("D49Q-error" , "should not accept multiline single quoted implicit keys"),
_("DK4H-error" , "should not accept implicit key followed by newline"),
_("DK95_01-error" , "should not accept leading tabs in double quoted multiline scalar"),
_("DK95_06-error" , "should not accept tab indentation"),
_("G5U8-error" , "should not accept [-, -]"),
_("H7TQ-error" , "should not accept extra words after directive"),
_("JKF3-error" , "should not accept multiline unindented double quoted scalar"),
_("N782-error" , "TBD"),
_("QB6E-error" , "should not accept indented multiline quoted scalar"),
_("QLJ7-error" , "tag directives should apply only to the next doc (?)"),
_("RXY3-error" , "should not accept document-end marker in single quoted string"),
_("S4GJ-error" , "should not accept text after block scalar indicator"),
_("S98Z-error" , "should not accept block scalar with more spaces than first content line"),
_("SY6V-error" , "TBD"),
_("VJP3_00-error" , "should not accept flow collections over many lines"),
_("X4QW-error" , "should not accept comment without whitespace after block scalar indicator"),
_("Y79Y_003-error" , "should not accept leading tabs in seq elmt"),
_("Y79Y_004-error" , "should not accept tab after -"),
_("Y79Y_005-error" , "TBD"),
_("Y79Y_006-error" , "should not accept tab after ?"),
_("Y79Y_007-error" , "tabs tokens"),
_("Y79Y_008-error" , "TBD"),
_("Y79Y_009-error" , "should not accept tab after ?"),
_("YJV2-error" , "should not accept [-]"),
_("ZCZ6-error" , "should not accept invalid mapping in plain single line value"),
_("ZL4Z-error" , "TBD"),
_("ZXT5-error" , "TBD"),
//-------------------------------------------------------------------------
// SECTION 2. Deliberate ryml limitations.
//
// These tests are skipped because they cover parts of YAML that
// are deliberately not implemented by ryml.
#ifndef RYML_WITH_TAB_TOKENS
// -<tab> or :<tab> are supported only when the above macro is defined
_("6BCT-in_yaml" , "tabs tokens"),
_("A2M4-in_yaml" , "tabs tokens"),
_("DC7X-in_yaml" , "tabs tokens"),
_("DK95_00-in_yaml" , "tabs tokens"),
_("DK95_04-in_yaml" , "tabs tokens"),
_("J3BT-in_yaml" , "tabs tokens"),
_("K54U-in_yaml" , "tabs tokens"),
_("Y79Y_010-in_yaml" , "tabs tokens"),
#endif
// container keys are deliberately not supported by the ryml tree.
// But they ARE supported by the parse engine. So they are dealt
// with separately using the event parser. See below.
//-------------------------------------------------------------------------
// SECTION 3. Problems with the test suite spec. (or our
// understanding of it?)
// malformed json in the test spec
_("35KP-in_json" , "malformed JSON from multiple documents"),
_("5TYM-in_json" , "malformed JSON from multiple documents"),
_("6XDY-in_json" , "malformed JSON from multiple documents"),
_("6WLZ-in_json" , "malformed JSON from multiple documents"),
_("6ZKB-in_json" , "malformed JSON from multiple documents"),
_("7Z25-in_json" , "malformed JSON from multiple documents"),
_("9DXL-in_json" , "malformed JSON from multiple documents"),
_("9KAX-in_json" , "malformed JSON from multiple documents"),
_("9WXW-in_json" , "malformed JSON from multiple documents"),
_("JHB9-in_json" , "malformed JSON from multiple documents"),
_("KSS4-in_json" , "malformed JSON from multiple documents"),
_("L383-in_json" , "malformed JSON from multiple documents"),
_("M7A3-in_json" , "malformed JSON from multiple documents"),
_("PUW8-in_json" , "malformed JSON from multiple documents"),
_("RZT7-in_json" , "malformed JSON from multiple documents"),
_("U9NS-in_json" , "malformed JSON from multiple documents"),
_("UT92-in_json" , "malformed JSON from multiple documents"),
_("W4TN-in_json" , "malformed JSON from multiple documents"),
// malformed test spec?
_("4ABK-out_yaml-events" , "out-yaml contains null, while in-yaml and events contain empty scalars"),
_("4WA9-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("652Z-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("6CA3-emit_yaml" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("6FWR-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("6WPF-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("9TFX-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("B3HG-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_00-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_02-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_03-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_04-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_05-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_06-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_07-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("DK95_08-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("EX5H-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("EXG3-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("L24T_00-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("L24T_01-emit_yaml-events", "out-yaml test spec is missing a --- document token, which is required in the events"),
_("M6YH-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("Q8AD-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("T26H-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("T4YY-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("T5N4-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
_("VJP3_01-out_yaml-events" , "out-yaml test spec is missing a --- document token, which is required in the events"),
};
constexpr const AllowedFailure container_key_cases[] = {
// these cases have container keys, and cannot be parsed into the
// ryml tree. However, they CAN be parsed by the ryml parse engine.
// Therefore the tests are enabled if they only use the YAML event
// emitter based on the parse engine.
_("4FJ6-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("4FJ6-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("6BFJ-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("6BFJ-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("6PBE-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("6PBE-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("6PBE-emit_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("9MMW-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("9MMW-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("KK5P-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("KK5P-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("KZN9-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("KZN9-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("LX3P-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("LX3P-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("M2N8_00-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("M2N8_00-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("M2N8_01-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("M2N8_01-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("M5DY-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("M5DY-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("Q9WF-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("Q9WF-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("RZP5-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("RZP5-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("SBG9-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("SBG9-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("V9D5-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("V9D5-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("X38W-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("X38W-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("XW4D-in_yaml" , "only scalar keys allowed (keys cannot be containers)"),
_("XW4D-out_yaml" , "only scalar keys allowed (keys cannot be containers)"),
};
cspan<AllowedFailure> g_allowed_failures = allowed_failures;
cspan<AllowedFailure> g_container_key_cases = container_key_cases;
AllowedFailure is_failure_expected(csubstr casename)
{
RYML_CHECK(casename.not_empty());
for(AllowedFailure const& af : g_allowed_failures)
if(af.test_name == casename || casename.begins_with(af.test_name))
return af;
return {};
}
AllowedFailure case_has_container_keys(csubstr casename)
{
RYML_CHECK(casename.not_empty());
for(AllowedFailure const& af : g_container_key_cases)
if(af.test_name == casename || casename.begins_with(af.test_name))
return af;
return {};
}
} // namespace c4
} // namespace yml