diff --git a/changelog/current.md b/changelog/current.md index e69de29b..e81e4f38 100644 --- a/changelog/current.md +++ b/changelog/current.md @@ -0,0 +1,4 @@ + +## Fixes + +- [PR#501](https://github.com/biojppm/rapidyaml/pull/501): fix missing tag in `- !!seq []` diff --git a/src/c4/yml/parse_engine.def.hpp b/src/c4/yml/parse_engine.def.hpp index c46d62c6..25d26f2a 100644 --- a/src/c4/yml/parse_engine.def.hpp +++ b/src/c4/yml/parse_engine.def.hpp @@ -5801,6 +5801,7 @@ void ParseEngine::_handle_seq_block() { _c4dbgp("seqblck[RVAL]: start child seqflow"); addrem_flags(RNXT, RVAL); + _handle_annotations_before_blck_val_scalar(); m_evt_handler->begin_seq_val_flow(); addrem_flags(FLOW|RVAL, BLCK|RNXT); _line_progressed(1); diff --git a/test/test_parse_engine_5_tag.cpp b/test/test_parse_engine_5_tag.cpp index 540deaf2..8f0ac5bb 100644 --- a/test/test_parse_engine_5_tag.cpp +++ b/test/test_parse_engine_5_tag.cpp @@ -517,6 +517,110 @@ ENGINE_TEST_ERR(DirectiveMultipleYAML_3, "---\n" "bar") + +//----------------------------------------------------------------------------- + +ENGINE_TEST(TagEmptySeq0, + ("!!seq []\n", "!!seq []"), + "+STR\n+DOC\n+SEQ [] \n-SEQ\n-DOC\n-STR\n") +{ + ___(ps.begin_stream()); + ___(ps.begin_doc()); + ___(ps.set_val_tag("!!seq")); + ___(ps.begin_seq_val_flow()); + ___(ps.end_seq()); + ___(ps.end_doc()); + ___(ps.end_stream()); +} + +ENGINE_TEST(TagEmptySeq1, + ("" + "- !!seq []\n" + ""), + "+STR\n+DOC\n+SEQ\n+SEQ [] \n-SEQ\n-SEQ\n-DOC\n-STR\n") +{ + ___(ps.begin_stream()); + ___(ps.begin_doc()); + ___(ps.begin_seq_val_block()); + ___(ps.set_val_tag("!!seq")); + ___(ps.begin_seq_val_flow()); + ___(ps.end_seq()); + ___(ps.end_seq()); + ___(ps.end_doc()); + ___(ps.end_stream()); +} + +ENGINE_TEST(TagEmptySeq2, + ("" + "!!seq\n" + "- !!seq []\n" + ""), + "+STR\n+DOC\n+SEQ \n+SEQ [] \n-SEQ\n-SEQ\n-DOC\n-STR\n") +{ + ___(ps.begin_stream()); + ___(ps.begin_doc()); + ___(ps.set_val_tag("!!seq")); + ___(ps.begin_seq_val_block()); + ___(ps.set_val_tag("!!seq")); + ___(ps.begin_seq_val_flow()); + ___(ps.end_seq()); + ___(ps.end_seq()); + ___(ps.end_doc()); + ___(ps.end_stream()); +} + + +//----------------------------------------------------------------------------- + +ENGINE_TEST(TagEmptyMap0, + ("!!map {}\n", "!!map {}"), + "+STR\n+DOC\n+MAP {} \n-MAP\n-DOC\n-STR\n") +{ + ___(ps.begin_stream()); + ___(ps.begin_doc()); + ___(ps.set_val_tag("!!map")); + ___(ps.begin_map_val_flow()); + ___(ps.end_map()); + ___(ps.end_doc()); + ___(ps.end_stream()); +} + +ENGINE_TEST(TagEmptyMap1, + ("" + "- !!map {}\n" + ""), + "+STR\n+DOC\n+SEQ\n+MAP {} \n-MAP\n-SEQ\n-DOC\n-STR\n") +{ + ___(ps.begin_stream()); + ___(ps.begin_doc()); + ___(ps.begin_seq_val_block()); + ___(ps.set_val_tag("!!map")); + ___(ps.begin_map_val_flow()); + ___(ps.end_map()); + ___(ps.end_seq()); + ___(ps.end_doc()); + ___(ps.end_stream()); +} + +ENGINE_TEST(TagEmptyMap2, + ("" + "!!seq\n" + "- !!map {}\n" + ""), + "+STR\n+DOC\n+SEQ \n+MAP {} \n-MAP\n-SEQ\n-DOC\n-STR\n") +{ + ___(ps.begin_stream()); + ___(ps.begin_doc()); + ___(ps.set_val_tag("!!seq")); + ___(ps.begin_seq_val_block()); + ___(ps.set_val_tag("!!map")); + ___(ps.begin_map_val_flow()); + ___(ps.end_map()); + ___(ps.end_seq()); + ___(ps.end_doc()); + ___(ps.end_stream()); +} + } // namespace yml } // namespace c4