1*b0d29bc4SBrooks Davis // Copyright 2012 The Kyua Authors.
2*b0d29bc4SBrooks Davis // All rights reserved.
3*b0d29bc4SBrooks Davis //
4*b0d29bc4SBrooks Davis // Redistribution and use in source and binary forms, with or without
5*b0d29bc4SBrooks Davis // modification, are permitted provided that the following conditions are
6*b0d29bc4SBrooks Davis // met:
7*b0d29bc4SBrooks Davis //
8*b0d29bc4SBrooks Davis // * Redistributions of source code must retain the above copyright
9*b0d29bc4SBrooks Davis //   notice, this list of conditions and the following disclaimer.
10*b0d29bc4SBrooks Davis // * Redistributions in binary form must reproduce the above copyright
11*b0d29bc4SBrooks Davis //   notice, this list of conditions and the following disclaimer in the
12*b0d29bc4SBrooks Davis //   documentation and/or other materials provided with the distribution.
13*b0d29bc4SBrooks Davis // * Neither the name of Google Inc. nor the names of its contributors
14*b0d29bc4SBrooks Davis //   may be used to endorse or promote products derived from this software
15*b0d29bc4SBrooks Davis //   without specific prior written permission.
16*b0d29bc4SBrooks Davis //
17*b0d29bc4SBrooks Davis // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18*b0d29bc4SBrooks Davis // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19*b0d29bc4SBrooks Davis // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20*b0d29bc4SBrooks Davis // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21*b0d29bc4SBrooks Davis // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22*b0d29bc4SBrooks Davis // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23*b0d29bc4SBrooks Davis // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24*b0d29bc4SBrooks Davis // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25*b0d29bc4SBrooks Davis // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26*b0d29bc4SBrooks Davis // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27*b0d29bc4SBrooks Davis // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28*b0d29bc4SBrooks Davis 
29*b0d29bc4SBrooks Davis #include "utils/config/nodes.ipp"
30*b0d29bc4SBrooks Davis 
31*b0d29bc4SBrooks Davis #include <atf-c++.hpp>
32*b0d29bc4SBrooks Davis 
33*b0d29bc4SBrooks Davis #include <lutok/state.ipp>
34*b0d29bc4SBrooks Davis 
35*b0d29bc4SBrooks Davis #include "utils/config/exceptions.hpp"
36*b0d29bc4SBrooks Davis #include "utils/config/keys.hpp"
37*b0d29bc4SBrooks Davis #include "utils/defs.hpp"
38*b0d29bc4SBrooks Davis 
39*b0d29bc4SBrooks Davis namespace config = utils::config;
40*b0d29bc4SBrooks Davis 
41*b0d29bc4SBrooks Davis 
42*b0d29bc4SBrooks Davis namespace {
43*b0d29bc4SBrooks Davis 
44*b0d29bc4SBrooks Davis 
45*b0d29bc4SBrooks Davis /// Typed leaf node that specializes the validate() method.
46*b0d29bc4SBrooks Davis class validation_node : public config::int_node {
47*b0d29bc4SBrooks Davis     /// Checks a given value for validity against a fake value.
48*b0d29bc4SBrooks Davis     ///
49*b0d29bc4SBrooks Davis     /// \param new_value The value to validate.
50*b0d29bc4SBrooks Davis     ///
51*b0d29bc4SBrooks Davis     /// \throw value_error If the value is not valid.
52*b0d29bc4SBrooks Davis     void
validate(const value_type & new_value) const53*b0d29bc4SBrooks Davis     validate(const value_type& new_value) const
54*b0d29bc4SBrooks Davis     {
55*b0d29bc4SBrooks Davis         if (new_value == 12345)
56*b0d29bc4SBrooks Davis             throw config::value_error("Custom validate method");
57*b0d29bc4SBrooks Davis     }
58*b0d29bc4SBrooks Davis };
59*b0d29bc4SBrooks Davis 
60*b0d29bc4SBrooks Davis 
61*b0d29bc4SBrooks Davis /// Set node that specializes the validate() method.
62*b0d29bc4SBrooks Davis class set_validation_node : public config::strings_set_node {
63*b0d29bc4SBrooks Davis     /// Checks a given value for validity against a fake value.
64*b0d29bc4SBrooks Davis     ///
65*b0d29bc4SBrooks Davis     /// \param new_value The value to validate.
66*b0d29bc4SBrooks Davis     ///
67*b0d29bc4SBrooks Davis     /// \throw value_error If the value is not valid.
68*b0d29bc4SBrooks Davis     void
validate(const value_type & new_value) const69*b0d29bc4SBrooks Davis     validate(const value_type& new_value) const
70*b0d29bc4SBrooks Davis     {
71*b0d29bc4SBrooks Davis         for (value_type::const_iterator iter = new_value.begin();
72*b0d29bc4SBrooks Davis              iter != new_value.end(); ++iter)
73*b0d29bc4SBrooks Davis             if (*iter == "throw")
74*b0d29bc4SBrooks Davis                 throw config::value_error("Custom validate method");
75*b0d29bc4SBrooks Davis     }
76*b0d29bc4SBrooks Davis };
77*b0d29bc4SBrooks Davis 
78*b0d29bc4SBrooks Davis 
79*b0d29bc4SBrooks Davis }  // anonymous namespace
80*b0d29bc4SBrooks Davis 
81*b0d29bc4SBrooks Davis 
82*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__deep_copy);
ATF_TEST_CASE_BODY(bool_node__deep_copy)83*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__deep_copy)
84*b0d29bc4SBrooks Davis {
85*b0d29bc4SBrooks Davis     config::bool_node node;
86*b0d29bc4SBrooks Davis     node.set(true);
87*b0d29bc4SBrooks Davis     config::detail::base_node* raw_copy = node.deep_copy();
88*b0d29bc4SBrooks Davis     config::bool_node* copy = static_cast< config::bool_node* >(raw_copy);
89*b0d29bc4SBrooks Davis     ATF_REQUIRE(copy->value());
90*b0d29bc4SBrooks Davis     copy->set(false);
91*b0d29bc4SBrooks Davis     ATF_REQUIRE(node.value());
92*b0d29bc4SBrooks Davis     ATF_REQUIRE(!copy->value());
93*b0d29bc4SBrooks Davis     delete copy;
94*b0d29bc4SBrooks Davis }
95*b0d29bc4SBrooks Davis 
96*b0d29bc4SBrooks Davis 
97*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__is_set_and_set);
ATF_TEST_CASE_BODY(bool_node__is_set_and_set)98*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__is_set_and_set)
99*b0d29bc4SBrooks Davis {
100*b0d29bc4SBrooks Davis     config::bool_node node;
101*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
102*b0d29bc4SBrooks Davis     node.set(false);
103*b0d29bc4SBrooks Davis     ATF_REQUIRE( node.is_set());
104*b0d29bc4SBrooks Davis }
105*b0d29bc4SBrooks Davis 
106*b0d29bc4SBrooks Davis 
107*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__value_and_set);
ATF_TEST_CASE_BODY(bool_node__value_and_set)108*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__value_and_set)
109*b0d29bc4SBrooks Davis {
110*b0d29bc4SBrooks Davis     config::bool_node node;
111*b0d29bc4SBrooks Davis     node.set(false);
112*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.value());
113*b0d29bc4SBrooks Davis     node.set(true);
114*b0d29bc4SBrooks Davis     ATF_REQUIRE( node.value());
115*b0d29bc4SBrooks Davis }
116*b0d29bc4SBrooks Davis 
117*b0d29bc4SBrooks Davis 
118*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__push_lua);
ATF_TEST_CASE_BODY(bool_node__push_lua)119*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__push_lua)
120*b0d29bc4SBrooks Davis {
121*b0d29bc4SBrooks Davis     lutok::state state;
122*b0d29bc4SBrooks Davis 
123*b0d29bc4SBrooks Davis     config::bool_node node;
124*b0d29bc4SBrooks Davis     node.set(true);
125*b0d29bc4SBrooks Davis     node.push_lua(state);
126*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.is_boolean(-1));
127*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.to_boolean(-1));
128*b0d29bc4SBrooks Davis     state.pop(1);
129*b0d29bc4SBrooks Davis }
130*b0d29bc4SBrooks Davis 
131*b0d29bc4SBrooks Davis 
132*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__set_lua__ok);
ATF_TEST_CASE_BODY(bool_node__set_lua__ok)133*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__set_lua__ok)
134*b0d29bc4SBrooks Davis {
135*b0d29bc4SBrooks Davis     lutok::state state;
136*b0d29bc4SBrooks Davis 
137*b0d29bc4SBrooks Davis     config::bool_node node;
138*b0d29bc4SBrooks Davis     state.push_boolean(false);
139*b0d29bc4SBrooks Davis     node.set_lua(state, -1);
140*b0d29bc4SBrooks Davis     state.pop(1);
141*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.value());
142*b0d29bc4SBrooks Davis }
143*b0d29bc4SBrooks Davis 
144*b0d29bc4SBrooks Davis 
145*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__set_lua__invalid_value);
ATF_TEST_CASE_BODY(bool_node__set_lua__invalid_value)146*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__set_lua__invalid_value)
147*b0d29bc4SBrooks Davis {
148*b0d29bc4SBrooks Davis     lutok::state state;
149*b0d29bc4SBrooks Davis 
150*b0d29bc4SBrooks Davis     config::bool_node node;
151*b0d29bc4SBrooks Davis     state.push_string("foo bar");
152*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_lua(state, -1));
153*b0d29bc4SBrooks Davis     state.pop(1);
154*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
155*b0d29bc4SBrooks Davis }
156*b0d29bc4SBrooks Davis 
157*b0d29bc4SBrooks Davis 
158*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__set_string__ok);
ATF_TEST_CASE_BODY(bool_node__set_string__ok)159*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__set_string__ok)
160*b0d29bc4SBrooks Davis {
161*b0d29bc4SBrooks Davis     config::bool_node node;
162*b0d29bc4SBrooks Davis     node.set_string("false");
163*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.value());
164*b0d29bc4SBrooks Davis     node.set_string("true");
165*b0d29bc4SBrooks Davis     ATF_REQUIRE( node.value());
166*b0d29bc4SBrooks Davis }
167*b0d29bc4SBrooks Davis 
168*b0d29bc4SBrooks Davis 
169*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__set_string__invalid_value);
ATF_TEST_CASE_BODY(bool_node__set_string__invalid_value)170*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__set_string__invalid_value)
171*b0d29bc4SBrooks Davis {
172*b0d29bc4SBrooks Davis     config::bool_node node;
173*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_string("12345"));
174*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
175*b0d29bc4SBrooks Davis }
176*b0d29bc4SBrooks Davis 
177*b0d29bc4SBrooks Davis 
178*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(bool_node__to_string);
ATF_TEST_CASE_BODY(bool_node__to_string)179*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(bool_node__to_string)
180*b0d29bc4SBrooks Davis {
181*b0d29bc4SBrooks Davis     config::bool_node node;
182*b0d29bc4SBrooks Davis     node.set(false);
183*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("false", node.to_string());
184*b0d29bc4SBrooks Davis     node.set(true);
185*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("true", node.to_string());
186*b0d29bc4SBrooks Davis }
187*b0d29bc4SBrooks Davis 
188*b0d29bc4SBrooks Davis 
189*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__deep_copy);
ATF_TEST_CASE_BODY(int_node__deep_copy)190*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__deep_copy)
191*b0d29bc4SBrooks Davis {
192*b0d29bc4SBrooks Davis     config::int_node node;
193*b0d29bc4SBrooks Davis     node.set(5);
194*b0d29bc4SBrooks Davis     config::detail::base_node* raw_copy = node.deep_copy();
195*b0d29bc4SBrooks Davis     config::int_node* copy = static_cast< config::int_node* >(raw_copy);
196*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(5, copy->value());
197*b0d29bc4SBrooks Davis     copy->set(10);
198*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(5, node.value());
199*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(10, copy->value());
200*b0d29bc4SBrooks Davis     delete copy;
201*b0d29bc4SBrooks Davis }
202*b0d29bc4SBrooks Davis 
203*b0d29bc4SBrooks Davis 
204*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__is_set_and_set);
ATF_TEST_CASE_BODY(int_node__is_set_and_set)205*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__is_set_and_set)
206*b0d29bc4SBrooks Davis {
207*b0d29bc4SBrooks Davis     config::int_node node;
208*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
209*b0d29bc4SBrooks Davis     node.set(20);
210*b0d29bc4SBrooks Davis     ATF_REQUIRE( node.is_set());
211*b0d29bc4SBrooks Davis }
212*b0d29bc4SBrooks Davis 
213*b0d29bc4SBrooks Davis 
214*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__value_and_set);
ATF_TEST_CASE_BODY(int_node__value_and_set)215*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__value_and_set)
216*b0d29bc4SBrooks Davis {
217*b0d29bc4SBrooks Davis     config::int_node node;
218*b0d29bc4SBrooks Davis     node.set(20);
219*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(20, node.value());
220*b0d29bc4SBrooks Davis     node.set(0);
221*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(0, node.value());
222*b0d29bc4SBrooks Davis }
223*b0d29bc4SBrooks Davis 
224*b0d29bc4SBrooks Davis 
225*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__push_lua);
ATF_TEST_CASE_BODY(int_node__push_lua)226*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__push_lua)
227*b0d29bc4SBrooks Davis {
228*b0d29bc4SBrooks Davis     lutok::state state;
229*b0d29bc4SBrooks Davis 
230*b0d29bc4SBrooks Davis     config::int_node node;
231*b0d29bc4SBrooks Davis     node.set(754);
232*b0d29bc4SBrooks Davis     node.push_lua(state);
233*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.is_number(-1));
234*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(754, state.to_integer(-1));
235*b0d29bc4SBrooks Davis     state.pop(1);
236*b0d29bc4SBrooks Davis }
237*b0d29bc4SBrooks Davis 
238*b0d29bc4SBrooks Davis 
239*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__set_lua__ok);
ATF_TEST_CASE_BODY(int_node__set_lua__ok)240*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__set_lua__ok)
241*b0d29bc4SBrooks Davis {
242*b0d29bc4SBrooks Davis     lutok::state state;
243*b0d29bc4SBrooks Davis 
244*b0d29bc4SBrooks Davis     config::int_node node;
245*b0d29bc4SBrooks Davis     state.push_integer(123);
246*b0d29bc4SBrooks Davis     state.push_string("456");
247*b0d29bc4SBrooks Davis     node.set_lua(state, -2);
248*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(123, node.value());
249*b0d29bc4SBrooks Davis     node.set_lua(state, -1);
250*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(456, node.value());
251*b0d29bc4SBrooks Davis     state.pop(2);
252*b0d29bc4SBrooks Davis }
253*b0d29bc4SBrooks Davis 
254*b0d29bc4SBrooks Davis 
255*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__set_lua__invalid_value);
ATF_TEST_CASE_BODY(int_node__set_lua__invalid_value)256*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__set_lua__invalid_value)
257*b0d29bc4SBrooks Davis {
258*b0d29bc4SBrooks Davis     lutok::state state;
259*b0d29bc4SBrooks Davis 
260*b0d29bc4SBrooks Davis     config::int_node node;
261*b0d29bc4SBrooks Davis     state.push_boolean(true);
262*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_lua(state, -1));
263*b0d29bc4SBrooks Davis     state.pop(1);
264*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
265*b0d29bc4SBrooks Davis }
266*b0d29bc4SBrooks Davis 
267*b0d29bc4SBrooks Davis 
268*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__set_string__ok);
ATF_TEST_CASE_BODY(int_node__set_string__ok)269*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__set_string__ok)
270*b0d29bc4SBrooks Davis {
271*b0d29bc4SBrooks Davis     config::int_node node;
272*b0d29bc4SBrooks Davis     node.set_string("178");
273*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(178, node.value());
274*b0d29bc4SBrooks Davis     node.set_string("-123");
275*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(-123, node.value());
276*b0d29bc4SBrooks Davis }
277*b0d29bc4SBrooks Davis 
278*b0d29bc4SBrooks Davis 
279*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__set_string__invalid_value);
ATF_TEST_CASE_BODY(int_node__set_string__invalid_value)280*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__set_string__invalid_value)
281*b0d29bc4SBrooks Davis {
282*b0d29bc4SBrooks Davis     config::int_node node;
283*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_string(" 23"));
284*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
285*b0d29bc4SBrooks Davis }
286*b0d29bc4SBrooks Davis 
287*b0d29bc4SBrooks Davis 
288*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(int_node__to_string);
ATF_TEST_CASE_BODY(int_node__to_string)289*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(int_node__to_string)
290*b0d29bc4SBrooks Davis {
291*b0d29bc4SBrooks Davis     config::int_node node;
292*b0d29bc4SBrooks Davis     node.set(89);
293*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("89", node.to_string());
294*b0d29bc4SBrooks Davis     node.set(-57);
295*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("-57", node.to_string());
296*b0d29bc4SBrooks Davis }
297*b0d29bc4SBrooks Davis 
298*b0d29bc4SBrooks Davis 
299*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__deep_copy);
ATF_TEST_CASE_BODY(positive_int_node__deep_copy)300*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__deep_copy)
301*b0d29bc4SBrooks Davis {
302*b0d29bc4SBrooks Davis     config::positive_int_node node;
303*b0d29bc4SBrooks Davis     node.set(5);
304*b0d29bc4SBrooks Davis     config::detail::base_node* raw_copy = node.deep_copy();
305*b0d29bc4SBrooks Davis     config::positive_int_node* copy = static_cast< config::positive_int_node* >(
306*b0d29bc4SBrooks Davis         raw_copy);
307*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(5, copy->value());
308*b0d29bc4SBrooks Davis     copy->set(10);
309*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(5, node.value());
310*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(10, copy->value());
311*b0d29bc4SBrooks Davis     delete copy;
312*b0d29bc4SBrooks Davis }
313*b0d29bc4SBrooks Davis 
314*b0d29bc4SBrooks Davis 
315*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__is_set_and_set);
ATF_TEST_CASE_BODY(positive_int_node__is_set_and_set)316*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__is_set_and_set)
317*b0d29bc4SBrooks Davis {
318*b0d29bc4SBrooks Davis     config::positive_int_node node;
319*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
320*b0d29bc4SBrooks Davis     node.set(20);
321*b0d29bc4SBrooks Davis     ATF_REQUIRE( node.is_set());
322*b0d29bc4SBrooks Davis }
323*b0d29bc4SBrooks Davis 
324*b0d29bc4SBrooks Davis 
325*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__value_and_set);
ATF_TEST_CASE_BODY(positive_int_node__value_and_set)326*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__value_and_set)
327*b0d29bc4SBrooks Davis {
328*b0d29bc4SBrooks Davis     config::positive_int_node node;
329*b0d29bc4SBrooks Davis     node.set(20);
330*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(20, node.value());
331*b0d29bc4SBrooks Davis     node.set(1);
332*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(1, node.value());
333*b0d29bc4SBrooks Davis }
334*b0d29bc4SBrooks Davis 
335*b0d29bc4SBrooks Davis 
336*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__push_lua);
ATF_TEST_CASE_BODY(positive_int_node__push_lua)337*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__push_lua)
338*b0d29bc4SBrooks Davis {
339*b0d29bc4SBrooks Davis     lutok::state state;
340*b0d29bc4SBrooks Davis 
341*b0d29bc4SBrooks Davis     config::positive_int_node node;
342*b0d29bc4SBrooks Davis     node.set(754);
343*b0d29bc4SBrooks Davis     node.push_lua(state);
344*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.is_number(-1));
345*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(754, state.to_integer(-1));
346*b0d29bc4SBrooks Davis     state.pop(1);
347*b0d29bc4SBrooks Davis }
348*b0d29bc4SBrooks Davis 
349*b0d29bc4SBrooks Davis 
350*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__set_lua__ok);
ATF_TEST_CASE_BODY(positive_int_node__set_lua__ok)351*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__set_lua__ok)
352*b0d29bc4SBrooks Davis {
353*b0d29bc4SBrooks Davis     lutok::state state;
354*b0d29bc4SBrooks Davis 
355*b0d29bc4SBrooks Davis     config::positive_int_node node;
356*b0d29bc4SBrooks Davis     state.push_integer(123);
357*b0d29bc4SBrooks Davis     state.push_string("456");
358*b0d29bc4SBrooks Davis     node.set_lua(state, -2);
359*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(123, node.value());
360*b0d29bc4SBrooks Davis     node.set_lua(state, -1);
361*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(456, node.value());
362*b0d29bc4SBrooks Davis     state.pop(2);
363*b0d29bc4SBrooks Davis }
364*b0d29bc4SBrooks Davis 
365*b0d29bc4SBrooks Davis 
366*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__set_lua__invalid_value);
ATF_TEST_CASE_BODY(positive_int_node__set_lua__invalid_value)367*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__set_lua__invalid_value)
368*b0d29bc4SBrooks Davis {
369*b0d29bc4SBrooks Davis     lutok::state state;
370*b0d29bc4SBrooks Davis 
371*b0d29bc4SBrooks Davis     config::positive_int_node node;
372*b0d29bc4SBrooks Davis     state.push_boolean(true);
373*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_lua(state, -1));
374*b0d29bc4SBrooks Davis     state.pop(1);
375*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
376*b0d29bc4SBrooks Davis     state.push_integer(0);
377*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_lua(state, -1));
378*b0d29bc4SBrooks Davis     state.pop(1);
379*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
380*b0d29bc4SBrooks Davis }
381*b0d29bc4SBrooks Davis 
382*b0d29bc4SBrooks Davis 
383*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__set_string__ok);
ATF_TEST_CASE_BODY(positive_int_node__set_string__ok)384*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__set_string__ok)
385*b0d29bc4SBrooks Davis {
386*b0d29bc4SBrooks Davis     config::positive_int_node node;
387*b0d29bc4SBrooks Davis     node.set_string("1");
388*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(1, node.value());
389*b0d29bc4SBrooks Davis     node.set_string("178");
390*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(178, node.value());
391*b0d29bc4SBrooks Davis }
392*b0d29bc4SBrooks Davis 
393*b0d29bc4SBrooks Davis 
394*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__set_string__invalid_value);
ATF_TEST_CASE_BODY(positive_int_node__set_string__invalid_value)395*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__set_string__invalid_value)
396*b0d29bc4SBrooks Davis {
397*b0d29bc4SBrooks Davis     config::positive_int_node node;
398*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_string(" 23"));
399*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
400*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_string("0"));
401*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
402*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_string("-5"));
403*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
404*b0d29bc4SBrooks Davis }
405*b0d29bc4SBrooks Davis 
406*b0d29bc4SBrooks Davis 
407*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(positive_int_node__to_string);
ATF_TEST_CASE_BODY(positive_int_node__to_string)408*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(positive_int_node__to_string)
409*b0d29bc4SBrooks Davis {
410*b0d29bc4SBrooks Davis     config::positive_int_node node;
411*b0d29bc4SBrooks Davis     node.set(89);
412*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("89", node.to_string());
413*b0d29bc4SBrooks Davis }
414*b0d29bc4SBrooks Davis 
415*b0d29bc4SBrooks Davis 
416*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__deep_copy);
ATF_TEST_CASE_BODY(string_node__deep_copy)417*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__deep_copy)
418*b0d29bc4SBrooks Davis {
419*b0d29bc4SBrooks Davis     config::string_node node;
420*b0d29bc4SBrooks Davis     node.set("first");
421*b0d29bc4SBrooks Davis     config::detail::base_node* raw_copy = node.deep_copy();
422*b0d29bc4SBrooks Davis     config::string_node* copy = static_cast< config::string_node* >(raw_copy);
423*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("first", copy->value());
424*b0d29bc4SBrooks Davis     copy->set("second");
425*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("first", node.value());
426*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("second", copy->value());
427*b0d29bc4SBrooks Davis     delete copy;
428*b0d29bc4SBrooks Davis }
429*b0d29bc4SBrooks Davis 
430*b0d29bc4SBrooks Davis 
431*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__is_set_and_set);
ATF_TEST_CASE_BODY(string_node__is_set_and_set)432*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__is_set_and_set)
433*b0d29bc4SBrooks Davis {
434*b0d29bc4SBrooks Davis     config::string_node node;
435*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
436*b0d29bc4SBrooks Davis     node.set("foo");
437*b0d29bc4SBrooks Davis     ATF_REQUIRE( node.is_set());
438*b0d29bc4SBrooks Davis }
439*b0d29bc4SBrooks Davis 
440*b0d29bc4SBrooks Davis 
441*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__value_and_set);
ATF_TEST_CASE_BODY(string_node__value_and_set)442*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__value_and_set)
443*b0d29bc4SBrooks Davis {
444*b0d29bc4SBrooks Davis     config::string_node node;
445*b0d29bc4SBrooks Davis     node.set("foo");
446*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("foo", node.value());
447*b0d29bc4SBrooks Davis     node.set("");
448*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("", node.value());
449*b0d29bc4SBrooks Davis }
450*b0d29bc4SBrooks Davis 
451*b0d29bc4SBrooks Davis 
452*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__push_lua);
ATF_TEST_CASE_BODY(string_node__push_lua)453*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__push_lua)
454*b0d29bc4SBrooks Davis {
455*b0d29bc4SBrooks Davis     lutok::state state;
456*b0d29bc4SBrooks Davis 
457*b0d29bc4SBrooks Davis     config::string_node node;
458*b0d29bc4SBrooks Davis     node.set("some message");
459*b0d29bc4SBrooks Davis     node.push_lua(state);
460*b0d29bc4SBrooks Davis     ATF_REQUIRE(state.is_string(-1));
461*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("some message", state.to_string(-1));
462*b0d29bc4SBrooks Davis     state.pop(1);
463*b0d29bc4SBrooks Davis }
464*b0d29bc4SBrooks Davis 
465*b0d29bc4SBrooks Davis 
466*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__set_lua__ok);
ATF_TEST_CASE_BODY(string_node__set_lua__ok)467*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__set_lua__ok)
468*b0d29bc4SBrooks Davis {
469*b0d29bc4SBrooks Davis     lutok::state state;
470*b0d29bc4SBrooks Davis 
471*b0d29bc4SBrooks Davis     config::string_node node;
472*b0d29bc4SBrooks Davis     state.push_string("text 1");
473*b0d29bc4SBrooks Davis     state.push_integer(231);
474*b0d29bc4SBrooks Davis     node.set_lua(state, -2);
475*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("text 1", node.value());
476*b0d29bc4SBrooks Davis     node.set_lua(state, -1);
477*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("231", node.value());
478*b0d29bc4SBrooks Davis     state.pop(2);
479*b0d29bc4SBrooks Davis }
480*b0d29bc4SBrooks Davis 
481*b0d29bc4SBrooks Davis 
482*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__set_lua__invalid_value);
ATF_TEST_CASE_BODY(string_node__set_lua__invalid_value)483*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__set_lua__invalid_value)
484*b0d29bc4SBrooks Davis {
485*b0d29bc4SBrooks Davis     lutok::state state;
486*b0d29bc4SBrooks Davis 
487*b0d29bc4SBrooks Davis     config::bool_node node;
488*b0d29bc4SBrooks Davis     state.new_table();
489*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW(config::value_error, node.set_lua(state, -1));
490*b0d29bc4SBrooks Davis     state.pop(1);
491*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
492*b0d29bc4SBrooks Davis }
493*b0d29bc4SBrooks Davis 
494*b0d29bc4SBrooks Davis 
495*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__set_string);
ATF_TEST_CASE_BODY(string_node__set_string)496*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__set_string)
497*b0d29bc4SBrooks Davis {
498*b0d29bc4SBrooks Davis     config::string_node node;
499*b0d29bc4SBrooks Davis     node.set_string("abcd efgh");
500*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("abcd efgh", node.value());
501*b0d29bc4SBrooks Davis     node.set_string("  1234  ");
502*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("  1234  ", node.value());
503*b0d29bc4SBrooks Davis }
504*b0d29bc4SBrooks Davis 
505*b0d29bc4SBrooks Davis 
506*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(string_node__to_string);
ATF_TEST_CASE_BODY(string_node__to_string)507*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(string_node__to_string)
508*b0d29bc4SBrooks Davis {
509*b0d29bc4SBrooks Davis     config::string_node node;
510*b0d29bc4SBrooks Davis     node.set("");
511*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("", node.to_string());
512*b0d29bc4SBrooks Davis     node.set("aaa");
513*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("aaa", node.to_string());
514*b0d29bc4SBrooks Davis }
515*b0d29bc4SBrooks Davis 
516*b0d29bc4SBrooks Davis 
517*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(strings_set_node__deep_copy);
ATF_TEST_CASE_BODY(strings_set_node__deep_copy)518*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(strings_set_node__deep_copy)
519*b0d29bc4SBrooks Davis {
520*b0d29bc4SBrooks Davis     std::set< std::string > value;
521*b0d29bc4SBrooks Davis     config::strings_set_node node;
522*b0d29bc4SBrooks Davis     value.insert("foo");
523*b0d29bc4SBrooks Davis     node.set(value);
524*b0d29bc4SBrooks Davis     config::detail::base_node* raw_copy = node.deep_copy();
525*b0d29bc4SBrooks Davis     config::strings_set_node* copy =
526*b0d29bc4SBrooks Davis         static_cast< config::strings_set_node* >(raw_copy);
527*b0d29bc4SBrooks Davis     value.insert("bar");
528*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(1, copy->value().size());
529*b0d29bc4SBrooks Davis     copy->set(value);
530*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(1, node.value().size());
531*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ(2, copy->value().size());
532*b0d29bc4SBrooks Davis     delete copy;
533*b0d29bc4SBrooks Davis }
534*b0d29bc4SBrooks Davis 
535*b0d29bc4SBrooks Davis 
536*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(strings_set_node__is_set_and_set);
ATF_TEST_CASE_BODY(strings_set_node__is_set_and_set)537*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(strings_set_node__is_set_and_set)
538*b0d29bc4SBrooks Davis {
539*b0d29bc4SBrooks Davis     std::set< std::string > value;
540*b0d29bc4SBrooks Davis     value.insert("foo");
541*b0d29bc4SBrooks Davis 
542*b0d29bc4SBrooks Davis     config::strings_set_node node;
543*b0d29bc4SBrooks Davis     ATF_REQUIRE(!node.is_set());
544*b0d29bc4SBrooks Davis     node.set(value);
545*b0d29bc4SBrooks Davis     ATF_REQUIRE( node.is_set());
546*b0d29bc4SBrooks Davis }
547*b0d29bc4SBrooks Davis 
548*b0d29bc4SBrooks Davis 
549*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(strings_set_node__value_and_set);
ATF_TEST_CASE_BODY(strings_set_node__value_and_set)550*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(strings_set_node__value_and_set)
551*b0d29bc4SBrooks Davis {
552*b0d29bc4SBrooks Davis     std::set< std::string > value;
553*b0d29bc4SBrooks Davis     value.insert("first");
554*b0d29bc4SBrooks Davis 
555*b0d29bc4SBrooks Davis     config::strings_set_node node;
556*b0d29bc4SBrooks Davis     node.set(value);
557*b0d29bc4SBrooks Davis     ATF_REQUIRE(value == node.value());
558*b0d29bc4SBrooks Davis     value.clear();
559*b0d29bc4SBrooks Davis     node.set(value);
560*b0d29bc4SBrooks Davis     value.insert("second");
561*b0d29bc4SBrooks Davis     ATF_REQUIRE(node.value().empty());
562*b0d29bc4SBrooks Davis }
563*b0d29bc4SBrooks Davis 
564*b0d29bc4SBrooks Davis 
565*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(strings_set_node__set_string);
ATF_TEST_CASE_BODY(strings_set_node__set_string)566*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(strings_set_node__set_string)
567*b0d29bc4SBrooks Davis {
568*b0d29bc4SBrooks Davis     config::strings_set_node node;
569*b0d29bc4SBrooks Davis     {
570*b0d29bc4SBrooks Davis         std::set< std::string > expected;
571*b0d29bc4SBrooks Davis         expected.insert("abcd");
572*b0d29bc4SBrooks Davis         expected.insert("efgh");
573*b0d29bc4SBrooks Davis 
574*b0d29bc4SBrooks Davis         node.set_string("abcd efgh");
575*b0d29bc4SBrooks Davis         ATF_REQUIRE(expected == node.value());
576*b0d29bc4SBrooks Davis     }
577*b0d29bc4SBrooks Davis     {
578*b0d29bc4SBrooks Davis         std::set< std::string > expected;
579*b0d29bc4SBrooks Davis         expected.insert("1234");
580*b0d29bc4SBrooks Davis 
581*b0d29bc4SBrooks Davis         node.set_string("  1234  ");
582*b0d29bc4SBrooks Davis         ATF_REQUIRE(expected == node.value());
583*b0d29bc4SBrooks Davis     }
584*b0d29bc4SBrooks Davis }
585*b0d29bc4SBrooks Davis 
586*b0d29bc4SBrooks Davis 
587*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(strings_set_node__to_string);
ATF_TEST_CASE_BODY(strings_set_node__to_string)588*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(strings_set_node__to_string)
589*b0d29bc4SBrooks Davis {
590*b0d29bc4SBrooks Davis     std::set< std::string > value;
591*b0d29bc4SBrooks Davis     config::strings_set_node node;
592*b0d29bc4SBrooks Davis     value.insert("second");
593*b0d29bc4SBrooks Davis     value.insert("first");
594*b0d29bc4SBrooks Davis     node.set(value);
595*b0d29bc4SBrooks Davis     ATF_REQUIRE_EQ("first second", node.to_string());
596*b0d29bc4SBrooks Davis }
597*b0d29bc4SBrooks Davis 
598*b0d29bc4SBrooks Davis 
599*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(typed_leaf_node__validate_set);
ATF_TEST_CASE_BODY(typed_leaf_node__validate_set)600*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(typed_leaf_node__validate_set)
601*b0d29bc4SBrooks Davis {
602*b0d29bc4SBrooks Davis     validation_node node;
603*b0d29bc4SBrooks Davis     node.set(1234);
604*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(config::value_error, "Custom validate method",
605*b0d29bc4SBrooks Davis                          node.set(12345));
606*b0d29bc4SBrooks Davis }
607*b0d29bc4SBrooks Davis 
608*b0d29bc4SBrooks Davis 
609*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(typed_leaf_node__validate_set_string);
ATF_TEST_CASE_BODY(typed_leaf_node__validate_set_string)610*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(typed_leaf_node__validate_set_string)
611*b0d29bc4SBrooks Davis {
612*b0d29bc4SBrooks Davis     validation_node node;
613*b0d29bc4SBrooks Davis     node.set_string("1234");
614*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(config::value_error, "Custom validate method",
615*b0d29bc4SBrooks Davis                          node.set_string("12345"));
616*b0d29bc4SBrooks Davis }
617*b0d29bc4SBrooks Davis 
618*b0d29bc4SBrooks Davis 
619*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(base_set_node__validate_set);
ATF_TEST_CASE_BODY(base_set_node__validate_set)620*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(base_set_node__validate_set)
621*b0d29bc4SBrooks Davis {
622*b0d29bc4SBrooks Davis     set_validation_node node;
623*b0d29bc4SBrooks Davis     set_validation_node::value_type values;
624*b0d29bc4SBrooks Davis     values.insert("foo");
625*b0d29bc4SBrooks Davis     values.insert("bar");
626*b0d29bc4SBrooks Davis     node.set(values);
627*b0d29bc4SBrooks Davis     values.insert("throw");
628*b0d29bc4SBrooks Davis     values.insert("baz");
629*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(config::value_error, "Custom validate method",
630*b0d29bc4SBrooks Davis                          node.set(values));
631*b0d29bc4SBrooks Davis }
632*b0d29bc4SBrooks Davis 
633*b0d29bc4SBrooks Davis 
634*b0d29bc4SBrooks Davis ATF_TEST_CASE_WITHOUT_HEAD(base_set_node__validate_set_string);
ATF_TEST_CASE_BODY(base_set_node__validate_set_string)635*b0d29bc4SBrooks Davis ATF_TEST_CASE_BODY(base_set_node__validate_set_string)
636*b0d29bc4SBrooks Davis {
637*b0d29bc4SBrooks Davis     set_validation_node node;
638*b0d29bc4SBrooks Davis     node.set_string("foo bar");
639*b0d29bc4SBrooks Davis     ATF_REQUIRE_THROW_RE(config::value_error, "Custom validate method",
640*b0d29bc4SBrooks Davis                          node.set_string("foo bar throw baz"));
641*b0d29bc4SBrooks Davis }
642*b0d29bc4SBrooks Davis 
643*b0d29bc4SBrooks Davis 
ATF_INIT_TEST_CASES(tcs)644*b0d29bc4SBrooks Davis ATF_INIT_TEST_CASES(tcs)
645*b0d29bc4SBrooks Davis {
646*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__deep_copy);
647*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__is_set_and_set);
648*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__value_and_set);
649*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__push_lua);
650*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__set_lua__ok);
651*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__set_lua__invalid_value);
652*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__set_string__ok);
653*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__set_string__invalid_value);
654*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, bool_node__to_string);
655*b0d29bc4SBrooks Davis 
656*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__deep_copy);
657*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__is_set_and_set);
658*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__value_and_set);
659*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__push_lua);
660*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__set_lua__ok);
661*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__set_lua__invalid_value);
662*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__set_string__ok);
663*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__set_string__invalid_value);
664*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, int_node__to_string);
665*b0d29bc4SBrooks Davis 
666*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__deep_copy);
667*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__is_set_and_set);
668*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__value_and_set);
669*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__push_lua);
670*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__set_lua__ok);
671*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__set_lua__invalid_value);
672*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__set_string__ok);
673*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__set_string__invalid_value);
674*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, positive_int_node__to_string);
675*b0d29bc4SBrooks Davis 
676*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__deep_copy);
677*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__is_set_and_set);
678*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__value_and_set);
679*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__push_lua);
680*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__set_lua__ok);
681*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__set_lua__invalid_value);
682*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__set_string);
683*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, string_node__to_string);
684*b0d29bc4SBrooks Davis 
685*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, strings_set_node__deep_copy);
686*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, strings_set_node__is_set_and_set);
687*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, strings_set_node__value_and_set);
688*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, strings_set_node__set_string);
689*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, strings_set_node__to_string);
690*b0d29bc4SBrooks Davis 
691*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, typed_leaf_node__validate_set);
692*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, typed_leaf_node__validate_set_string);
693*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, base_set_node__validate_set);
694*b0d29bc4SBrooks Davis     ATF_ADD_TEST_CASE(tcs, base_set_node__validate_set_string);
695*b0d29bc4SBrooks Davis }
696