Added IsNull, IsScalar, IsSequence, IsMap functions, so you don't have to query Type()

This commit is contained in:
Jesse Beder 2011-09-13 14:10:27 -05:00
parent 69af9b420a
commit 3a88c4b4a1
3 changed files with 34 additions and 30 deletions

View File

@ -29,6 +29,10 @@ namespace YAML
~Node();
NodeType::value Type() const;
bool IsNull() const { return Type() == NodeType::Null; }
bool IsScalar() const { return Type() == NodeType::Scalar; }
bool IsSequence() const { return Type() == NodeType::Sequence; }
bool IsMap() const { return Type() == NodeType::Map; }
// access
template<typename T> const T as() const;

View File

@ -21,7 +21,7 @@ namespace Test
TEST SimpleScalar()
{
YAML::Node node = YAML::Node("Hello, World!");
YAML_ASSERT(node.Type() == YAML::NodeType::Scalar);
YAML_ASSERT(node.IsScalar());
YAML_ASSERT(node.as<std::string>() == "Hello, World!");
return true;
}
@ -29,7 +29,7 @@ namespace Test
TEST IntScalar()
{
YAML::Node node = YAML::Node(15);
YAML_ASSERT(node.Type() == YAML::NodeType::Scalar);
YAML_ASSERT(node.IsScalar());
YAML_ASSERT(node.as<int>() == 15);
return true;
}
@ -40,12 +40,12 @@ namespace Test
node.append(10);
node.append("foo");
node.append("monkey");
YAML_ASSERT(node.Type() == YAML::NodeType::Sequence);
YAML_ASSERT(node.IsSequence());
YAML_ASSERT(node.size() == 3);
YAML_ASSERT(node[0].as<int>() == 10);
YAML_ASSERT(node[1].as<std::string>() == "foo");
YAML_ASSERT(node[2].as<std::string>() == "monkey");
YAML_ASSERT(node.Type() == YAML::NodeType::Sequence);
YAML_ASSERT(node.IsSequence());
return true;
}
@ -55,12 +55,12 @@ namespace Test
node[0] = 10;
node[1] = "foo";
node[2] = "monkey";
YAML_ASSERT(node.Type() == YAML::NodeType::Sequence);
YAML_ASSERT(node.IsSequence());
YAML_ASSERT(node.size() == 3);
YAML_ASSERT(node[0].as<int>() == 10);
YAML_ASSERT(node[1].as<std::string>() == "foo");
YAML_ASSERT(node[2].as<std::string>() == "monkey");
YAML_ASSERT(node.Type() == YAML::NodeType::Sequence);
YAML_ASSERT(node.IsSequence());
return true;
}
@ -68,7 +68,7 @@ namespace Test
{
YAML::Node node;
node["key"] = "value";
YAML_ASSERT(node.Type() == YAML::NodeType::Map);
YAML_ASSERT(node.IsMap());
YAML_ASSERT(node["key"].as<std::string>() == "value");
YAML_ASSERT(node.size() == 1);
return true;
@ -79,7 +79,7 @@ namespace Test
YAML::Node node;
node["key"] = "value";
node["undefined"];
YAML_ASSERT(node.Type() == YAML::NodeType::Map);
YAML_ASSERT(node.IsMap());
YAML_ASSERT(node["key"].as<std::string>() == "value");
YAML_ASSERT(node.size() == 1);
@ -193,7 +193,7 @@ namespace Test
{
YAML::Node node;
node[0] = node;
YAML_ASSERT(node.Type() == YAML::NodeType::Sequence);
YAML_ASSERT(node.IsSequence());
YAML_ASSERT(node.size() == 1);
YAML_ASSERT(node[0] == node);
YAML_ASSERT(node[0][0] == node);
@ -205,7 +205,7 @@ namespace Test
{
YAML::Node node;
node["key"] = node;
YAML_ASSERT(node.Type() == YAML::NodeType::Map);
YAML_ASSERT(node.IsMap());
YAML_ASSERT(node.size() == 1);
YAML_ASSERT(node["key"] == node);
YAML_ASSERT(node["key"]["key"] == node);
@ -217,7 +217,7 @@ namespace Test
{
YAML::Node node;
node[node] = "value";
YAML_ASSERT(node.Type() == YAML::NodeType::Map);
YAML_ASSERT(node.IsMap());
YAML_ASSERT(node.size() == 1);
YAML_ASSERT(node[node].as<std::string>() == "value");
return true;
@ -227,7 +227,7 @@ namespace Test
{
YAML::Node node;
node[node] = node;
YAML_ASSERT(node.Type() == YAML::NodeType::Map);
YAML_ASSERT(node.IsMap());
YAML_ASSERT(node.size() == 1);
YAML_ASSERT(node[node] == node);
YAML_ASSERT(node[node][node] == node);
@ -240,7 +240,7 @@ namespace Test
YAML::Node node;
YAML::Node tmp = node["key"];
tmp = "value";
YAML_ASSERT(node.Type() == YAML::NodeType::Map);
YAML_ASSERT(node.IsMap());
YAML_ASSERT(node.size() == 1);
YAML_ASSERT(node["key"].as<std::string>() == "value");
return true;
@ -252,7 +252,7 @@ namespace Test
YAML::Node tmp = node["key"];
tmp = node["other"];
node["other"] = "value";
YAML_ASSERT(node.Type() == YAML::NodeType::Map);
YAML_ASSERT(node.IsMap());
YAML_ASSERT(node.size() == 2);
YAML_ASSERT(node["key"].as<std::string>() == "value");
YAML_ASSERT(node["other"].as<std::string>() == "value");

View File

@ -11,7 +11,7 @@ namespace Test
// 2.1
TEST SeqScalars() {
YAML::Node doc = YAML::Parse(ex2_1);
YAML_ASSERT(doc.Type() == YAML::NodeType::Sequence);
YAML_ASSERT(doc.IsSequence());
YAML_ASSERT(doc.size() == 3);
YAML_ASSERT(doc[0].as<std::string>() == "Mark McGwire");
YAML_ASSERT(doc[1].as<std::string>() == "Sammy Sosa");
@ -22,7 +22,7 @@ namespace Test
// 2.2
TEST MappingScalarsToScalars() {
YAML::Node doc = YAML::Parse(ex2_2);
YAML_ASSERT(doc.Type() == YAML::NodeType::Map);
YAML_ASSERT(doc.IsMap());
YAML_ASSERT(doc.size() == 3);
YAML_ASSERT(doc["hr"].as<std::string>() == "65");
YAML_ASSERT(doc["avg"].as<std::string>() == "0.278");
@ -33,7 +33,7 @@ namespace Test
// 2.3
TEST MappingScalarsToSequences() {
YAML::Node doc = YAML::Parse(ex2_3);
YAML_ASSERT(doc.Type() == YAML::NodeType::Map);
YAML_ASSERT(doc.IsMap());
YAML_ASSERT(doc.size() == 2);
YAML_ASSERT(doc["american"].size() == 3);
YAML_ASSERT(doc["american"][0].as<std::string>() == "Boston Red Sox");
@ -285,9 +285,9 @@ namespace Test
YAML::Node doc = YAML::Parse(ex2_25);
YAML_ASSERT(doc.Tag() == "tag:yaml.org,2002:set");
YAML_ASSERT(doc.size() == 3);
YAML_ASSERT(doc["Mark McGwire"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["Sammy Sosa"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["Ken Griffey"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["Mark McGwire"].IsNull());
YAML_ASSERT(doc["Sammy Sosa"].IsNull());
YAML_ASSERT(doc["Ken Griffey"].IsNull());
return true;
}
@ -379,7 +379,7 @@ namespace Test
// 5.5
TEST CommentIndicator() {
YAML::Node doc = YAML::Parse(ex5_5);
YAML_ASSERT(doc.Type() == YAML::NodeType::Null);
YAML_ASSERT(doc.IsNull());
return true;
}
@ -539,7 +539,7 @@ namespace Test
// 6.10
TEST CommentLines() {
YAML::Node doc = YAML::Parse(ex6_10);
YAML_ASSERT(doc.Type() == YAML::NodeType::Null);
YAML_ASSERT(doc.IsNull());
return true;
}
@ -658,7 +658,7 @@ namespace Test
TEST CompletelyEmptyNodes() {
YAML::Node doc = YAML::Parse(ex7_3);
YAML_ASSERT(doc.size() == 2);
YAML_ASSERT(doc["foo"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["foo"].IsNull());
YAML_ASSERT(doc[YAML::Null].as<std::string>() == "bar");
return true;
}
@ -792,7 +792,7 @@ namespace Test
YAML_ASSERT(doc.size() == 3);
YAML_ASSERT(doc["explicit"].as<std::string>() == "entry");
YAML_ASSERT(doc["implicit"].as<std::string>() == "entry");
YAML_ASSERT(doc[YAML::Null].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc[YAML::Null].IsNull());
return true;
}
@ -801,8 +801,8 @@ namespace Test
YAML::Node doc = YAML::Parse(ex7_17);
YAML_ASSERT(doc.size() == 4);
YAML_ASSERT(doc["unquoted"].as<std::string>() == "separate");
YAML_ASSERT(doc["http://foo.com"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["omitted value"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["http://foo.com"].IsNull());
YAML_ASSERT(doc["omitted value"].IsNull());
YAML_ASSERT(doc[YAML::Null].as<std::string>() == "omitted key");
return true;
}
@ -813,7 +813,7 @@ namespace Test
YAML_ASSERT(doc.size() == 3);
YAML_ASSERT(doc["adjacent"].as<std::string>() == "value");
YAML_ASSERT(doc["readable"].as<std::string>() == "value");
YAML_ASSERT(doc["empty"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["empty"].IsNull());
return true;
}
@ -1051,7 +1051,7 @@ namespace Test
TEST BlockSequenceEntryTypes() {
YAML::Node doc = YAML::Parse(ex8_15);
YAML_ASSERT(doc.size() == 4);
YAML_ASSERT(doc[0].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc[0].IsNull());
YAML_ASSERT(doc[1].as<std::string>() == "block node\n");
YAML_ASSERT(doc[2].size() == 2);
YAML_ASSERT(doc[2][0].as<std::string>() == "one");
@ -1074,7 +1074,7 @@ namespace Test
TEST ExplicitBlockMappingEntries() {
YAML::Node doc = YAML::Parse(ex8_17);
YAML_ASSERT(doc.size() == 2);
YAML_ASSERT(doc["explicit key"].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc["explicit key"].IsNull());
YAML_ASSERT(doc["block key\n"].size() == 2);
YAML_ASSERT(doc["block key\n"][0].as<std::string>() == "one");
YAML_ASSERT(doc["block key\n"][1].as<std::string>() == "two");
@ -1086,7 +1086,7 @@ namespace Test
YAML::Node doc = YAML::Parse(ex8_18);
YAML_ASSERT(doc.size() == 3);
YAML_ASSERT(doc["plain key"].as<std::string>() == "in-line value");
YAML_ASSERT(doc[YAML::Null].Type() == YAML::NodeType::Null);
YAML_ASSERT(doc[YAML::Null].IsNull());
YAML_ASSERT(doc["quoted key"].size() == 1);
YAML_ASSERT(doc["quoted key"][0].as<std::string>() == "entry");
return true;