From b4963ab0fa0a3bc48d607252f4c9f4f1730203cc Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Sat, 10 Sep 2011 23:31:12 -0500 Subject: [PATCH] Added a few simple node tests, and the sequence one doesn't pass (let's work now) --- src/node/detail/node_data.cpp | 14 +++++++++++++- test/new-api/nodetests.cpp | 24 ++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/node/detail/node_data.cpp b/src/node/detail/node_data.cpp index ff3791d..ae7e056 100644 --- a/src/node/detail/node_data.cpp +++ b/src/node/detail/node_data.cpp @@ -105,14 +105,26 @@ namespace YAML // sequence void node_data::append(node& node, shared_memory_holder /* pMemory */) { + if(m_type == NodeType::Undefined || m_type == NodeType::Null) { + m_type = NodeType::Sequence; + m_sequence.clear(); + } + if(m_type != NodeType::Sequence) throw std::runtime_error("Can't append to a non-sequence node"); m_sequence.push_back(&node); } - void node_data::insert(node& key, node& value, shared_memory_holder /* pMemory */) + void node_data::insert(node& key, node& value, shared_memory_holder pMemory) { + if(m_type == NodeType::Undefined || m_type == NodeType::Null) { + m_type = NodeType::Map; + m_map.clear(); + } else if(m_type == NodeType::Sequence) { + convert_sequence_to_map(pMemory); + } + if(m_type != NodeType::Map) throw std::runtime_error("Can't insert into a non-map node"); diff --git a/test/new-api/nodetests.cpp b/test/new-api/nodetests.cpp index 8016455..7c5b330 100644 --- a/test/new-api/nodetests.cpp +++ b/test/new-api/nodetests.cpp @@ -25,6 +25,28 @@ namespace Test YAML_ASSERT(node.as() == "Hello, World!"); return true; } + + TEST IntScalar() + { + YAML::Node node = YAML::Node(15); + YAML_ASSERT(node.Type() == YAML::NodeType::Scalar); + YAML_ASSERT(node.as() == 15); + return true; + } + + TEST SimpleSequence() + { + YAML::Node node; + node.append(10); + node.append("foo"); + node.append("monkey"); + YAML_ASSERT(node.Type() == YAML::NodeType::Sequence); + YAML_ASSERT(node.size() == 3); + YAML_ASSERT(node[0].as() == 10); + YAML_ASSERT(node[1].as() == "foo"); + YAML_ASSERT(node[1].as() == "monkey"); + return true; + } } void RunNodeTest(TEST (*test)(), const std::string& name, int& passed, int& total) { @@ -50,6 +72,8 @@ namespace Test int total = 0; RunNodeTest(&Node::SimpleScalar, "simple scalar", passed, total); + RunNodeTest(&Node::IntScalar, "int scalar", passed, total); + RunNodeTest(&Node::SimpleSequence, "simple sequence", passed, total); std::cout << "Node tests: " << passed << "/" << total << " passed\n"; return passed == total;