Fix operator bool() exception on zombie node

This commit is contained in:
Jesse Beder
2015-03-29 14:31:22 -05:00
parent 67e37d000a
commit 25b2ed0787
3 changed files with 12 additions and 4 deletions

View File

@@ -60,8 +60,9 @@ inline void Node::EnsureNodeExists() const {
}
inline bool Node::IsDefined() const {
if (!m_isValid)
throw InvalidNode();
if (!m_isValid) {
return false;
}
return m_pNode ? m_pNode->is_defined() : true;
}

View File

@@ -181,8 +181,8 @@ TEST(LoadNodeTest, DereferenceIteratorError) {
EXPECT_THROW(node.begin()->first.as<int>(), InvalidNode);
EXPECT_EQ(true, (*node.begin()).IsMap());
EXPECT_EQ(true, node.begin()->IsMap());
EXPECT_THROW((*node.begin()->begin()).IsDefined(), InvalidNode);
EXPECT_THROW(node.begin()->begin()->IsDefined(), InvalidNode);
EXPECT_THROW((*node.begin()->begin()).Type(), InvalidNode);
EXPECT_THROW(node.begin()->begin()->Type(), InvalidNode);
}
TEST(NodeTest, EmitEmptyNode) {

View File

@@ -281,6 +281,13 @@ TEST(NodeTest, DefaultNodeStyle) {
EXPECT_EQ(EmitterStyle::Default, node.Style());
}
TEST(NodeTest, AccessNonexistentKeyOnConstNode) {
YAML::Node node;
node["3"] = "4";
const YAML::Node& other = node;
ASSERT_FALSE(other["5"]);
}
class NodeEmitterTest : public ::testing::Test {
protected:
void ExpectOutput(const std::string& output, const Node& node) {