JayBeams  0.1
Another project to have fun coding.
ut_merge_yaml.cpp
Go to the documentation of this file.
1 #include <jb/merge_yaml.hpp>
2 #include <boost/test/unit_test.hpp>
3 
4 #include <string>
5 
6 /**
7  * @test Verify merging of two maps.
8  */
9 BOOST_AUTO_TEST_CASE(merge_yaml_map) {
10  YAML::Node source = YAML::Load("{a: 1, b: 2}");
11  YAML::Node target = YAML::Load("{a: 3, c: 4}");
12  jb::yaml::merge_node(target, source);
13 
14  BOOST_CHECK_EQUAL(target["a"].as<std::string>(), "1");
15  BOOST_CHECK_EQUAL(target["b"].as<std::string>(), "2");
16  BOOST_CHECK_EQUAL(target["c"].as<std::string>(), "4");
17 }
18 
19 /**
20  * @test Verify merging of two sequences.
21  */
22 BOOST_AUTO_TEST_CASE(merge_yaml_sequences) {
23  YAML::Node source = YAML::Load("[11, 22, 33, 44]");
24  YAML::Node ss = YAML::Load("[0, 1]");
25  jb::yaml::merge_node(ss, source);
26 
27  auto actual = ss.as<std::vector<int>>();
28  std::vector<int> expected({11, 22, 33, 44});
29  BOOST_CHECK_EQUAL_COLLECTIONS(
30  actual.begin(), actual.end(), expected.begin(), expected.end());
31 
32  YAML::Node ls = YAML::Load("[0, 1, 2, 3, 4, 5]");
33  jb::yaml::merge_node(ls, source);
34 
35  actual = ls.as<std::vector<int>>();
36  expected.assign({11, 22, 33, 44, 4, 5});
37  BOOST_CHECK_EQUAL_COLLECTIONS(
38  actual.begin(), actual.end(), expected.begin(), expected.end());
39 }
40 
41 /**
42  * @test Verify merging of sequences of maps
43  */
44 BOOST_AUTO_TEST_CASE(merge_yaml_sequences_of_maps) {
45  YAML::Node source = YAML::Load("[{a: 1}, {b: 2}, {a: 3, b: 3}, {c: 4}]");
46  YAML::Node target = YAML::Load("[{}, {a: 11}, {c: 3}]");
47  jb::yaml::merge_node(target, source);
48 
49  BOOST_REQUIRE_EQUAL(target.size(), 4);
50  BOOST_CHECK_EQUAL(target[0]["a"].as<int>(), 1);
51  BOOST_CHECK(not target[0]["b"].IsDefined());
52 
53  BOOST_CHECK_EQUAL(target[1]["a"].as<int>(), 11);
54  BOOST_CHECK_EQUAL(target[1]["b"].as<int>(), 2);
55 
56  BOOST_CHECK_EQUAL(target[2]["a"].as<int>(), 3);
57  BOOST_CHECK_EQUAL(target[2]["b"].as<int>(), 3);
58  BOOST_CHECK_EQUAL(target[2]["c"].as<int>(), 3);
59 
60  BOOST_CHECK(not target[3]["a"].IsDefined());
61  BOOST_CHECK_EQUAL(target[3]["c"].as<int>(), 4);
62 }
63 
64 /**
65  * @test Verify merging of two nested maps.
66  */
67 BOOST_AUTO_TEST_CASE(merge_yaml_nested) {
68  YAML::Node source = YAML::Load("{l0: {a: 1, b: 2}, l1: [1,2,3]}");
69  YAML::Node target = YAML::Load("{l0: {a: 3, c: 4}, l2: [0,0]}");
70  jb::yaml::merge_node(target, source);
71 
72  BOOST_CHECK_EQUAL(target["l0"]["a"].as<std::string>(), "1");
73  BOOST_CHECK_EQUAL(target["l0"]["b"].as<std::string>(), "2");
74  BOOST_CHECK_EQUAL(target["l0"]["c"].as<std::string>(), "4");
75  BOOST_CHECK_EQUAL(target["l1"][0].as<int>(), 1);
76  BOOST_CHECK_EQUAL(target["l1"][1].as<int>(), 2);
77  BOOST_CHECK_EQUAL(target["l1"][2].as<int>(), 3);
78 }
79 
80 /**
81  * @test Verify merging of invalid nodes throws the right thing.
82  */
83 BOOST_AUTO_TEST_CASE(merge_yaml_invalid_source) {
84  YAML::Node target = YAML::Load("{a: 3, c: 4}");
85 
86  BOOST_CHECK_THROW(
87  jb::yaml::merge_node(target, YAML::Node()), std::runtime_error);
88 
89  BOOST_CHECK_THROW(
90  jb::yaml::merge_node(target, YAML::Load("{a: 1}")["b"]),
91  std::runtime_error);
92 }
BOOST_AUTO_TEST_CASE(merge_yaml_map)
void merge_node(YAML::Node target, YAML::Node const &source)
Merge two YAML nodes.
Definition: merge_yaml.cpp:5