mirror of
https://github.com/jbeder/yaml-cpp.git
synced 2025-09-09 04:41:16 +00:00
Add flow/block style setting on Nodes
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
#include "yaml-cpp/emitter.h"
|
||||
#include "yaml-cpp/node/emit.h"
|
||||
#include "yaml-cpp/node/node.h"
|
||||
#include "yaml-cpp/node/impl.h"
|
||||
#include "yaml-cpp/node/convert.h"
|
||||
@@ -9,19 +11,19 @@
|
||||
namespace YAML {
|
||||
namespace {
|
||||
TEST(NodeTest, SimpleScalar) {
|
||||
YAML::Node node = YAML::Node("Hello, World!");
|
||||
Node node = Node("Hello, World!");
|
||||
EXPECT_TRUE(node.IsScalar());
|
||||
EXPECT_EQ("Hello, World!", node.as<std::string>());
|
||||
}
|
||||
|
||||
TEST(NodeTest, IntScalar) {
|
||||
YAML::Node node = YAML::Node(15);
|
||||
Node node = Node(15);
|
||||
EXPECT_TRUE(node.IsScalar());
|
||||
EXPECT_EQ(15, node.as<int>());
|
||||
}
|
||||
|
||||
TEST(NodeTest, SimpleAppendSequence) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node.push_back(10);
|
||||
node.push_back("foo");
|
||||
node.push_back("monkey");
|
||||
@@ -34,7 +36,7 @@ TEST(NodeTest, SimpleAppendSequence) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, SimpleAssignSequence) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node[0] = 10;
|
||||
node[1] = "foo";
|
||||
node[2] = "monkey";
|
||||
@@ -47,7 +49,7 @@ TEST(NodeTest, SimpleAssignSequence) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, SimpleMap) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["key"] = "value";
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
EXPECT_EQ("value", node["key"].as<std::string>());
|
||||
@@ -55,7 +57,7 @@ TEST(NodeTest, SimpleMap) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, MapWithUndefinedValues) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["key"] = "value";
|
||||
node["undefined"];
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
@@ -68,7 +70,7 @@ TEST(NodeTest, MapWithUndefinedValues) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, MapIteratorWithUndefinedValues) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["key"] = "value";
|
||||
node["undefined"];
|
||||
|
||||
@@ -79,7 +81,7 @@ TEST(NodeTest, MapIteratorWithUndefinedValues) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, SimpleSubkeys) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["device"]["udid"] = "12345";
|
||||
node["device"]["name"] = "iPhone";
|
||||
node["device"]["os"] = "4.0";
|
||||
@@ -99,7 +101,7 @@ TEST(NodeTest, StdVector) {
|
||||
primes.push_back(11);
|
||||
primes.push_back(13);
|
||||
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["primes"] = primes;
|
||||
EXPECT_EQ(primes, node["primes"].as<std::vector<int> >());
|
||||
}
|
||||
@@ -113,7 +115,7 @@ TEST(NodeTest, StdList) {
|
||||
primes.push_back(11);
|
||||
primes.push_back(13);
|
||||
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["primes"] = primes;
|
||||
EXPECT_EQ(primes, node["primes"].as<std::list<int> >());
|
||||
}
|
||||
@@ -126,7 +128,7 @@ TEST(NodeTest, StdMap) {
|
||||
squares[3] = 9;
|
||||
squares[4] = 16;
|
||||
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["squares"] = squares;
|
||||
std::map<int, int> actualSquares = node["squares"].as<std::map<int, int> >();
|
||||
EXPECT_EQ(squares, actualSquares);
|
||||
@@ -137,7 +139,7 @@ TEST(NodeTest, StdPair) {
|
||||
p.first = 5;
|
||||
p.second = "five";
|
||||
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["pair"] = p;
|
||||
std::pair<int, std::string> actualP =
|
||||
node["pair"].as<std::pair<int, std::string> >();
|
||||
@@ -145,7 +147,7 @@ TEST(NodeTest, StdPair) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, SimpleAlias) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["foo"] = "value";
|
||||
node["bar"] = node["foo"];
|
||||
EXPECT_EQ("value", node["foo"].as<std::string>());
|
||||
@@ -155,9 +157,9 @@ TEST(NodeTest, SimpleAlias) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, AliasAsKey) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["foo"] = "value";
|
||||
YAML::Node value = node["foo"];
|
||||
Node value = node["foo"];
|
||||
node[value] = "foo";
|
||||
EXPECT_EQ("value", node["foo"].as<std::string>());
|
||||
EXPECT_EQ("foo", node[value].as<std::string>());
|
||||
@@ -166,7 +168,7 @@ TEST(NodeTest, AliasAsKey) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, SelfReferenceSequence) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node[0] = node;
|
||||
EXPECT_TRUE(node.IsSequence());
|
||||
EXPECT_EQ(1, node.size());
|
||||
@@ -176,7 +178,7 @@ TEST(NodeTest, SelfReferenceSequence) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, ValueSelfReferenceMap) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["key"] = node;
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
EXPECT_EQ(1, node.size());
|
||||
@@ -186,7 +188,7 @@ TEST(NodeTest, ValueSelfReferenceMap) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, KeySelfReferenceMap) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node[node] = "value";
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
EXPECT_EQ(1, node.size());
|
||||
@@ -194,7 +196,7 @@ TEST(NodeTest, KeySelfReferenceMap) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, SelfReferenceMap) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node[node] = node;
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
EXPECT_EQ(1, node.size());
|
||||
@@ -204,8 +206,8 @@ TEST(NodeTest, SelfReferenceMap) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, TempMapVariable) {
|
||||
YAML::Node node;
|
||||
YAML::Node tmp = node["key"];
|
||||
Node node;
|
||||
Node tmp = node["key"];
|
||||
tmp = "value";
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
EXPECT_EQ(1, node.size());
|
||||
@@ -213,8 +215,8 @@ TEST(NodeTest, TempMapVariable) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, TempMapVariableAlias) {
|
||||
YAML::Node node;
|
||||
YAML::Node tmp = node["key"];
|
||||
Node node;
|
||||
Node tmp = node["key"];
|
||||
tmp = node["other"];
|
||||
node["other"] = "value";
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
@@ -225,7 +227,7 @@ TEST(NodeTest, TempMapVariableAlias) {
|
||||
}
|
||||
|
||||
TEST(NodeTest, Bool) {
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node[true] = false;
|
||||
EXPECT_TRUE(node.IsMap());
|
||||
EXPECT_EQ(false, node[true].as<bool>());
|
||||
@@ -235,7 +237,7 @@ TEST(NodeTest, AutoBoolConversion) {
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable : 4800)
|
||||
#endif
|
||||
YAML::Node node;
|
||||
Node node;
|
||||
node["foo"] = "bar";
|
||||
EXPECT_TRUE(static_cast<bool>(node["foo"]));
|
||||
EXPECT_TRUE(!node["monkey"]);
|
||||
@@ -244,12 +246,12 @@ TEST(NodeTest, AutoBoolConversion) {
|
||||
|
||||
TEST(NodeTest, FloatingPrecision) {
|
||||
const double x = 0.123456789;
|
||||
YAML::Node node = YAML::Node(x);
|
||||
Node node = Node(x);
|
||||
EXPECT_EQ(x, node.as<double>());
|
||||
}
|
||||
|
||||
TEST(NodeTest, SpaceChar) {
|
||||
YAML::Node node = YAML::Node(' ');
|
||||
Node node = Node(' ');
|
||||
EXPECT_EQ(' ', node.as<char>());
|
||||
}
|
||||
|
||||
@@ -258,5 +260,126 @@ TEST(NodeTest, CloneNull) {
|
||||
Node clone = Clone(node);
|
||||
EXPECT_EQ(NodeType::Null, clone.Type());
|
||||
}
|
||||
|
||||
TEST(NodeTest, DefaultNodeStyle) {
|
||||
Node node;
|
||||
EXPECT_EQ(EmitterStyle::Default, node.Style());
|
||||
}
|
||||
|
||||
class NodeEmitterTest : public ::testing::Test {
|
||||
protected:
|
||||
void ExpectOutput(const std::string& output, const Node& node) {
|
||||
Emitter emitter;
|
||||
emitter << node;
|
||||
ASSERT_TRUE(emitter.good());
|
||||
EXPECT_EQ(output, emitter.c_str());
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(NodeEmitterTest, SimpleFlowSeqNode) {
|
||||
Node node;
|
||||
node.SetStyle(EmitterStyle::Flow);
|
||||
node.push_back(1.01);
|
||||
node.push_back(2.01);
|
||||
node.push_back(3.01);
|
||||
|
||||
ExpectOutput("[1.01, 2.01, 3.01]", node);
|
||||
}
|
||||
|
||||
TEST_F(NodeEmitterTest, NestFlowSeqNode) {
|
||||
Node node, cell0, cell1;
|
||||
|
||||
cell0.push_back(1.01);
|
||||
cell0.push_back(2.01);
|
||||
cell0.push_back(3.01);
|
||||
|
||||
cell1.push_back(4.01);
|
||||
cell1.push_back(5.01);
|
||||
cell1.push_back(6.01);
|
||||
|
||||
node.SetStyle(EmitterStyle::Flow);
|
||||
node.push_back(cell0);
|
||||
node.push_back(cell1);
|
||||
|
||||
ExpectOutput("[[1.01, 2.01, 3.01], [4.01, 5.01, 6.01]]", node);
|
||||
}
|
||||
|
||||
TEST_F(NodeEmitterTest, MixBlockFlowSeqNode) {
|
||||
Node node, cell0, cell1;
|
||||
|
||||
cell0.SetStyle(EmitterStyle::Flow);
|
||||
cell0.push_back(1.01);
|
||||
cell0.push_back(2.01);
|
||||
cell0.push_back(3.01);
|
||||
|
||||
cell1.push_back(4.01);
|
||||
cell1.push_back(5.01);
|
||||
cell1.push_back(6.01);
|
||||
|
||||
node.SetStyle(EmitterStyle::Block);
|
||||
node.push_back(cell0);
|
||||
node.push_back(cell1);
|
||||
|
||||
ExpectOutput("- [1.01, 2.01, 3.01]\n-\n - 4.01\n - 5.01\n - 6.01", node);
|
||||
}
|
||||
|
||||
TEST_F(NodeEmitterTest, NestBlockFlowMapListNode) {
|
||||
Node node, mapNode, blockNode;
|
||||
|
||||
node.push_back(1.01);
|
||||
node.push_back(2.01);
|
||||
node.push_back(3.01);
|
||||
|
||||
mapNode.SetStyle(EmitterStyle::Flow);
|
||||
mapNode["position"] = node;
|
||||
|
||||
blockNode.push_back(1.01);
|
||||
blockNode.push_back(mapNode);
|
||||
|
||||
ExpectOutput("- 1.01\n- {position: [1.01, 2.01, 3.01]}", blockNode);
|
||||
}
|
||||
|
||||
TEST_F(NodeEmitterTest, NestBlockMixMapListNode) {
|
||||
Node node, mapNode, blockNode;
|
||||
|
||||
node.push_back(1.01);
|
||||
node.push_back(2.01);
|
||||
node.push_back(3.01);
|
||||
|
||||
mapNode.SetStyle(EmitterStyle::Flow);
|
||||
mapNode["position"] = node;
|
||||
|
||||
blockNode["scalar"] = 1.01;
|
||||
blockNode["object"] = mapNode;
|
||||
|
||||
ExpectOutput("scalar: 1.01\nobject: {position: [1.01, 2.01, 3.01]}",
|
||||
blockNode);
|
||||
}
|
||||
|
||||
TEST_F(NodeEmitterTest, NestBlockMapListNode) {
|
||||
Node node, mapNode;
|
||||
|
||||
node.push_back(1.01);
|
||||
node.push_back(2.01);
|
||||
node.push_back(3.01);
|
||||
|
||||
mapNode.SetStyle(EmitterStyle::Block);
|
||||
mapNode["position"] = node;
|
||||
|
||||
ExpectOutput("position:\n - 1.01\n - 2.01\n - 3.01", mapNode);
|
||||
}
|
||||
|
||||
TEST_F(NodeEmitterTest, NestFlowMapListNode) {
|
||||
Node node, mapNode;
|
||||
|
||||
node.push_back(1.01);
|
||||
node.push_back(2.01);
|
||||
node.push_back(3.01);
|
||||
|
||||
mapNode.SetStyle(EmitterStyle::Flow);
|
||||
mapNode["position"] = node;
|
||||
|
||||
ExpectOutput("{position: [1.01, 2.01, 3.01]}", mapNode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user