From 3d2888cc8a45da2f420454ad728cdfad01a3d54f Mon Sep 17 00:00:00 2001 From: Reini Urban Date: Fri, 1 Nov 2024 13:29:36 +0100 Subject: [PATCH] missing keys should throw InvalidNode, not BadConversion Fixes GH #1274 --- include/yaml-cpp/node/impl.h | 6 ++++-- test/node/node_test.cpp | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/yaml-cpp/node/impl.h b/include/yaml-cpp/node/impl.h index 150a6cf..f5d622b 100644 --- a/include/yaml-cpp/node/impl.h +++ b/include/yaml-cpp/node/impl.h @@ -124,8 +124,8 @@ struct as_if { const Node& node; T operator()() const { - if (!node.m_pNode) - throw TypedBadConversion(node.Mark()); + if (!node.m_pNode) // no fallback + throw InvalidNode(node.m_invalidKey); T t; if (convert::decode(node, t)) @@ -140,6 +140,8 @@ struct as_if { const Node& node; std::string operator()() const { + if (node.Type() == NodeType::Undefined) // no fallback + throw InvalidNode(node.m_invalidKey); if (node.Type() == NodeType::Null) return "null"; if (node.Type() != NodeType::Scalar) diff --git a/test/node/node_test.cpp b/test/node/node_test.cpp index b444455..a9c47b7 100644 --- a/test/node/node_test.cpp +++ b/test/node/node_test.cpp @@ -191,6 +191,14 @@ TEST(NodeTest, MapElementRemoval) { EXPECT_TRUE(!node["foo"]); } +TEST(NodeTest, MissingKey) { + Node node; + node["foo"] = "value"; + EXPECT_TRUE(!node["bar"]); + EXPECT_EQ(NodeType::Undefined, node["bar"].Type()); + EXPECT_THROW(node["bar"].as(), InvalidNode); +} + TEST(NodeTest, MapIntegerElementRemoval) { Node node; node[1] = "hello";