diff --git a/test/new-api/nodetests.cpp b/test/new-api/nodetests.cpp index 3c6a1ac..d86b402 100644 --- a/test/new-api/nodetests.cpp +++ b/test/new-api/nodetests.cpp @@ -188,6 +188,52 @@ namespace Test YAML_ASSERT(node.size() == 2); return true; } + + TEST SelfReferenceSequence() + { + YAML::Node node; + node[0] = node; + YAML_ASSERT(node.Type() == YAML::NodeType::Sequence); + YAML_ASSERT(node.size() == 1); + YAML_ASSERT(node[0] == node); + YAML_ASSERT(node[0][0] == node); + YAML_ASSERT(node[0][0] == node[0]); + return true; + } + + TEST ValueSelfReferenceMap() + { + YAML::Node node; + node["key"] = node; + YAML_ASSERT(node.Type() == YAML::NodeType::Map); + YAML_ASSERT(node.size() == 1); + YAML_ASSERT(node["key"] == node); + YAML_ASSERT(node["key"]["key"] == node); + YAML_ASSERT(node["key"]["key"] == node["key"]); + return true; + } + + TEST KeySelfReferenceMap() + { + YAML::Node node; + node[node] = "value"; + YAML_ASSERT(node.Type() == YAML::NodeType::Map); + YAML_ASSERT(node.size() == 1); + YAML_ASSERT(node[node].as() == "value"); + return true; + } + + TEST SelfReferenceMap() + { + YAML::Node node; + node[node] = node; + YAML_ASSERT(node.Type() == YAML::NodeType::Map); + YAML_ASSERT(node.size() == 1); + YAML_ASSERT(node[node] == node); + YAML_ASSERT(node[node][node] == node); + YAML_ASSERT(node[node][node] == node[node]); + return true; + } } void RunNodeTest(TEST (*test)(), const std::string& name, int& passed, int& total) { @@ -225,6 +271,10 @@ namespace Test RunNodeTest(&Node::StdMap, "std::map", passed, total); RunNodeTest(&Node::SimpleAlias, "simple alias", passed, total); RunNodeTest(&Node::AliasAsKey, "alias as key", passed, total); + RunNodeTest(&Node::SelfReferenceSequence, "self reference sequence", passed, total); + RunNodeTest(&Node::ValueSelfReferenceMap, "value self reference map", passed, total); + RunNodeTest(&Node::KeySelfReferenceMap, "key self reference map", passed, total); + RunNodeTest(&Node::SelfReferenceMap, "self reference map", passed, total); std::cout << "Node tests: " << passed << "/" << total << " passed\n"; return passed == total;