From ab4f686a0098a25f6d2da2c67746aad1426a200c Mon Sep 17 00:00:00 2001 From: Joao Paulo Magalhaes Date: Sat, 22 Feb 2025 14:48:09 +0000 Subject: [PATCH] fix missing tag for flow seqs --- changelog/current.md | 4 ++ src/c4/yml/parse_engine.def.hpp | 1 + test/test_parse_engine_5_tag.cpp | 104 +++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) diff --git a/changelog/current.md b/changelog/current.md index e69de29bb..e81e4f38e 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 c46d62c62..25d26f2ac 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 540deaf27..8f0ac5bb1 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