4 #include <boost/test/unit_test.hpp> 17 : foo(desc(
"foo"), this)
18 , bar(desc(
"bar"), this) {
29 : input(desc(
"input"), this)
30 , outputs(desc(
"outputs"), this) {
41 : baz(desc(
"baz",
"config"), this) {
50 : qux(desc(
"qux",
"nested"), this)
51 , quz(desc(
"quz",
"nested"), this) {
59 std::ostream&
operator<<(std::ostream& os, simple
const& x) {
60 return os <<
"{foo=" << x.foo() <<
", bar=" << x.bar() <<
"}";
63 bool operator==(simple
const& lhs, simple
const& rhs) {
64 return lhs.foo() == rhs.foo() and lhs.bar() == rhs.bar();
67 bool operator!=(simple
const& lhs, simple
const& rhs) {
68 return not(lhs == rhs);
76 char const contents[] = R
"""( 82 BOOST_TEST_MESSAGE("Applying overrides from\n" << contents <<
"\n");
84 tested.input(
"foo").outputs(std::vector<simple>(
85 {simple().foo(
"1").bar(
"2"), simple().foo(
"3").bar(
"4")}));
86 BOOST_TEST_MESSAGE(
"Initial Configuration\n" << tested <<
"\n");
87 std::istringstream is(contents);
89 tested.load_overrides(argc,
nullptr, is);
91 BOOST_TEST_MESSAGE(
"Post-Override Configuration\n" << tested <<
"\n");
93 BOOST_CHECK_EQUAL(tested.input(),
"bar");
94 std::vector<simple> expected(
95 {simple().foo(
"1").bar(
"6"), simple().foo(
"3").bar(
"4")});
96 BOOST_CHECK_EQUAL_COLLECTIONS(
97 tested.outputs().begin(), tested.outputs().end(), expected.begin(),
105 char const contents[] = R
"""( 108 outputs: [ {bar: 6}, {}, {foo: 7, bar: 8} ] 111 BOOST_TEST_MESSAGE("Applying overrides from\n" << contents <<
"\n");
113 tested.input(
"foo").outputs(std::vector<simple>(
114 {simple().foo(
"1").bar(
"2"), simple().foo(
"3").bar(
"4")}));
115 BOOST_TEST_MESSAGE(
"Initial Configuration\n" << tested <<
"\n");
116 std::istringstream is(contents);
118 tested.load_overrides(argc,
nullptr, is);
120 BOOST_TEST_MESSAGE(
"Post-Override Configuration\n" << tested <<
"\n");
122 BOOST_CHECK_EQUAL(tested.input(),
"bar");
123 std::vector<simple> expected({simple().foo(
"1").bar(
"6"),
124 simple().foo(
"3").bar(
"4"),
125 simple().foo(
"7").bar(
"8")});
126 BOOST_CHECK_EQUAL_COLLECTIONS(
127 tested.outputs().begin(), tested.outputs().end(), expected.begin(),
135 char const contents[] = R
"""( 137 # This applies to all objects of type 'config' 140 outputs: [ {bar: 22} ] 144 outputs: [ {foo: 1, bar: 2}, {foo: 3} ] 148 outputs: [ {foo: 11}, {foo: 33, bar:44} ] 150 outputs: [ {}, {bar: 4}, {foo: 5, bar: 6} ] 154 std::istringstream is(contents); 156 tested.load_overrides(argc,
nullptr, is);
158 BOOST_CHECK_EQUAL(tested.qux().baz().input(),
"qux.baz");
159 std::vector<simple> expected(
160 {simple().foo(
"1").bar(
"2"), simple().foo(
"3").bar(
"")});
161 BOOST_CHECK_EQUAL_COLLECTIONS(
162 tested.qux().baz().outputs().begin(), tested.qux().baz().outputs().end(),
163 expected.begin(), expected.end());
165 BOOST_CHECK_EQUAL(tested.quz().baz().input(),
"quz.baz");
166 expected.assign({simple().foo(
"11").bar(
"22"), simple().foo(
"33").bar(
"4"),
167 simple().foo(
"5").bar(
"6")});
168 BOOST_CHECK_EQUAL_COLLECTIONS(
169 tested.quz().baz().outputs().begin(), tested.quz().baz().outputs().end(),
170 expected.begin(), expected.end());
bool operator!=(book_update const &a, book_update const &b)
bool operator==(book_update const &a, book_update const &b)
Base class for all configuration objects.
std::ostream & operator<<(std::ostream &os, as_hhmmssu const &x)
Format as_hhmmssu into an iostream.
BOOST_AUTO_TEST_CASE(config_object_vector)
#define config_object_constructors(NAME)
Helper class to easily define configuration attributes.