From f050e7e4a17ef2e221ca000a544042c33c9541fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kundr=C3=A1t?= Date: Thu, 13 Mar 2025 19:21:26 +0100 Subject: [PATCH 14/18] fix DataNode::insertSibling() return value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Organization: Wires When such an insert happens, the C library returns the node which is now the first sibling among all of the siblings of the node which was used as a reference during the insert. Our API was also documented this way, but we were not doing that. Reported-by: Irfan Bug: https://github.com/CESNET/libyang-cpp/issues/29 Change-Id: Id7f84a31e50212d6e2cbce9ab03a351a3721f767 Signed-off-by: Mattias Walström --- src/DataNode.cpp | 2 +- tests/data_node.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/DataNode.cpp b/src/DataNode.cpp index 84591e5..b899b18 100644 --- a/src/DataNode.cpp +++ b/src/DataNode.cpp @@ -711,7 +711,7 @@ DataNode DataNode::insertSibling(DataNode toInsert) lyd_insert_sibling(this->m_node, toInsert.m_node, &firstSibling); }, toInsert.parent() ? OperationScope::JustThisNode : OperationScope::AffectsFollowingSiblings, m_refs); - return DataNode{m_node, m_refs}; + return DataNode{firstSibling, m_refs}; } /** diff --git a/tests/data_node.cpp b/tests/data_node.cpp index 14470dd..b6ee455 100644 --- a/tests/data_node.cpp +++ b/tests/data_node.cpp @@ -973,6 +973,13 @@ TEST_CASE("Data Node manipulation") REQUIRE(getNumberOrder() == expected); } + DOCTEST_SUBCASE("DataNode::insertSibling") + { + auto node = ctx.newPath("/example-schema:leafUInt8", "10"); + REQUIRE(node.insertSibling(ctx.newPath("/example-schema:leafUInt16", "10")).path() == "/example-schema:leafUInt8"); + REQUIRE(node.insertSibling(ctx.newPath("/example-schema:dummy", "10")).path() == "/example-schema:dummy"); + } + DOCTEST_SUBCASE("DataNode::duplicate") { auto root = ctx.parseData(data2, libyang::DataFormat::JSON); -- 2.43.0