1 //  (C) Copyright Gennadiy Rozental 2001-2015.
2 //  Distributed under the Boost Software License, Version 1.0.
3 //  (See accompanying file LICENSE_1_0.txt or copy at
4 //  http://www.boost.org/LICENSE_1_0.txt)
5 
6 //  See http://www.boost.org/libs/test for the library home page.
7 //
8 //  File        : $RCSfile$
9 //
10 //  Version     : $Revision$
11 //
12 //  Description : basic_cstring unit test
13 // *****************************************************************************
14 
15 // Boost.Test
16 #define BOOST_TEST_MAIN
17 #include <boost/test/unit_test.hpp>
18 namespace utf = boost::unit_test;
19 
20 // Boost.Runtime.Parameter
21 #include <boost/test/utils/runtime/file/config_file.hpp>
22 #include <boost/test/utils/runtime/validation.hpp>
23 
24 namespace rt  = boost::runtime;
25 namespace rtf = boost::runtime::file;
26 
27 //____________________________________________________________________________//
28 
BOOST_AUTO_TEST_CASE(basic_load_test)29 BOOST_AUTO_TEST_CASE( basic_load_test )
30 {
31     rtf::config_file cf( "test_files/cfg_file_tst1.cfg" );
32 
33     BOOST_TEST( rtf::get_requ_param_value( cf, "par1" ) == "ABC " );
34 
35     BOOST_TEST( rtf::get_requ_param_value( cf, "NS1", "par1" ) == "12" );
36     BOOST_TEST( rtf::get_requ_param_value( cf, "NS2", "NS3", "par1" ) == "OFF" );
37     BOOST_TEST( rtf::get_requ_param_value( cf, "NS2", "NS4", "par1" ) == "ON" );
38     BOOST_TEST( rtf::get_requ_param_value( cf, "NS2", "NS4", "NS5", "par1" ) == "1 2 3" );
39 
40     BOOST_TEST( !rtf::get_param_value( cf, "par1 " ) );
41     BOOST_TEST( !rtf::get_param_value( cf, "par2" ) );
42     BOOST_TEST( !rtf::get_param_value( cf, "NS2", "par1" ) );
43 
44     BOOST_CHECK_THROW( rtf::get_requ_param_value( cf, "par1 " ), rt::logic_error );
45     BOOST_CHECK_THROW( rtf::get_requ_param_value( cf, "par2" ), rt::logic_error );
46     BOOST_CHECK_THROW( rtf::get_requ_param_value( cf, "NS2", "par1" ), rt::logic_error );
47 }
48 
49 //____________________________________________________________________________//
50 
BOOST_AUTO_TEST_CASE(multiple_load)51 BOOST_AUTO_TEST_CASE( multiple_load )
52 {
53     rtf::config_file cf;
54 
55     cf.load( "test_files/cfg_file_tst3.cfg" );
56     cf.load( "test_files/cfg_file_tst4.cfg" );
57 
58     BOOST_TEST( rtf::get_requ_param_value( cf, "par1" ) == "1" );
59     BOOST_TEST( rtf::get_requ_param_value( cf, "NS", "par2" ) == "1 2" );
60 }
61 
62 //____________________________________________________________________________//
63 
BOOST_AUTO_TEST_CASE(custom_value_marker)64 BOOST_AUTO_TEST_CASE( custom_value_marker )
65 {
66     rtf::config_file cf;
67 
68     cf.load( "test_files/cfg_file_tst2.cfg", rtf::value_marker = "|" );
69 
70     BOOST_TEST( rtf::get_requ_param_value( cf, "par1" ) == "\"Simple text \"" );
71 }
72 
73 //____________________________________________________________________________//
74 
BOOST_AUTO_TEST_CASE(custom_value_delimeter)75 BOOST_AUTO_TEST_CASE( custom_value_delimeter )
76 {
77     rtf::config_file cf;
78 
79     cf.load( "test_files/cfg_file_tst5.cfg", rtf::value_delimeter = "=> " );
80     cf.load( "test_files/cfg_file_tst6.cfg", rtf::value_delimeter = " " );
81 
82     BOOST_TEST( rtf::get_requ_param_value( cf, "par1" ) == "1" );
83     BOOST_TEST( rtf::get_requ_param_value( cf, "NS", "par2" ) == "2" );
84 }
85 
86 //____________________________________________________________________________//
87 
BOOST_AUTO_TEST_CASE(custom_ns_delimeter)88 BOOST_AUTO_TEST_CASE( custom_ns_delimeter )
89 {
90     rtf::config_file cf;
91 
92     cf.load( "test_files/cfg_file_tst7.cfg", (rtf::namespace_delimeter = "/",rtf::value_delimeter = " ") );
93 
94     BOOST_TEST( rtf::get_requ_param_value( cf, "NS1", "NS2", "par" ) == "1" );
95 }
96 
97 //____________________________________________________________________________//
98 
test_aliases()99 void test_aliases()
100 {
101     global_param_namespace.clear();
102 
103     config_file_iterator cfi1( "test_files/par_hdl_tst1.cfg" );
104     BOOST_TEST( global_param_namespace.load_parameters( cfi1 ) );
105 
106     config_file_iterator cfi2( "test_files/par_alias1.cfg" );
107     BOOST_TEST( global_param_namespace.load_aliases( cfi2 ) );
108 
109     BOOST_CHECK_EQUAL( rtf::get_param_value( "par1" ), "ABC" );
110     BOOST_CHECK_EQUAL( rtf::get_param_value( "par2" ), "12" );
111     BOOST_CHECK_EQUAL( rtf::get_param_value( "par3" ), "OFF" );
112     BOOST_CHECK_EQUAL( rtf::get_param_value( "par4" ), "ON" );
113     BOOST_CHECK_EQUAL( rtf::get_param_value( "par5" ), "OFF" );
114 }
115 
116 //____________________________________________________________________________//
117 
test_validations()118 void test_validations()
119 {
120     BOOST_CHECK_THROW( global_param_namespace.insert_param( "PAR-AM" ), fnd_runtime_exception );
121     BOOST_CHECK_THROW( global_param_namespace.insert_param( "p^" ), fnd_runtime_exception );
122     BOOST_CHECK_THROW( global_param_namespace.insert_namespace( "ns#1" ), fnd_runtime_exception );
123     BOOST_CHECK_THROW( global_param_namespace.insert_namespace( "ns 1" ), fnd_runtime_exception );
124     BOOST_CHECK_THROW( global_param_namespace.insert_namespace( "ns-1" ), fnd_runtime_exception );
125 
126     config_file_iterator cfi1( "test_files/par_hdl_tst2.cfg" );
127     BOOST_TEST( !global_param_namespace.load_parameters( cfi1 ) );
128 
129     config_file_iterator cfi2( "test_files/par_alias2.cfg" );
130     BOOST_TEST( !global_param_namespace.load_aliases( cfi2 ) );
131 
132     config_file_iterator cfi3( "test_files/par_alias3.cfg" );
133     BOOST_TEST( !global_param_namespace.load_aliases( cfi3 ) );
134 }
135 
136 //____________________________________________________________________________//
137 
138 #define QUOTE_N_END( string ) "\"" string "\"\n"
test_io()139 void test_io()
140 {
141     global_param_namespace.clear();
142 
143     config_file_iterator cfi1( "test_files/par_hdl_tst1.cfg" );
144     BOOST_TEST( global_param_namespace.load_parameters( cfi1 ) );
145 
146     config_file_iterator cfi2( "test_files/par_alias1.cfg" );
147     BOOST_TEST( global_param_namespace.load_aliases( cfi2 ) );
148 
149     output_test_stream ots;
150 
151     ots << global_param_namespace;
152 
153     BOOST_TEST( ots.is_equal(
154         "par1 "                 QUOTE_N_END( "ABC" )
155         "par2 "                 QUOTE_N_END( "12" )
156         "par3 "                 QUOTE_N_END( "OFF" )
157         "par5 "                 QUOTE_N_END( "OFF" )
158         "par4 "                 QUOTE_N_END( "ON" )
159         "NS1::par1 "            QUOTE_N_END( "12" )
160         "NS2::NS3::par1 "       QUOTE_N_END( "OFF" )
161         "NS2::NS4::par1 "       QUOTE_N_END( "ON" )
162         "NS2::NS4::NS5::par1 "  QUOTE_N_END( "1 2 3" )
163 
164     ) );
165 }
166 
167 //____________________________________________________________________________//
168 
169 void
test_multipart_value()170 test_multipart_value()
171 {
172     {
173         param_namespace pn( "", NULL );
174         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value1.cfg" ) );
175     }
176 
177     {
178         param_namespace pn( "", NULL );
179         BOOST_TEST( pn.load_parameters( "test_files/test_multipart_value2.cfg" ) );
180 
181         BOOST_TEST( rtf::get_param_value( "a", pn ) == "" );
182     }
183 
184 
185     {
186         param_namespace pn( "", NULL );
187         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value3.cfg" ) );
188     }
189 
190     {
191         param_namespace pn( "", NULL );
192         BOOST_TEST( pn.load_parameters( "test_files/test_multipart_value4.cfg" ) );
193 
194         BOOST_TEST( rtf::get_param_value( "a", pn ) == "\"" );
195     }
196 
197     {
198         param_namespace pn( "", NULL );
199         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value5.cfg" ) );
200     }
201 
202     {
203         param_namespace pn( "", NULL );
204         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value6.cfg" ) );
205     }
206 
207 
208     {
209         param_namespace pn( "", NULL );
210         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value7.cfg" ) );
211     }
212 
213     {
214         param_namespace pn( "", NULL );
215         BOOST_TEST( pn.load_parameters( "test_files/test_multipart_value8.cfg" ) );
216 
217         BOOST_TEST( rtf::get_param_value( "a", pn ) == "abcdef" );
218     }
219 
220     {
221         param_namespace pn( "", NULL );
222         BOOST_TEST( pn.load_parameters( "test_files/test_multipart_value9.cfg" ) );
223 
224         BOOST_TEST( rtf::get_param_value( "a", pn ) == "abcdef123" );
225     }
226 
227     {
228         param_namespace pn( "", NULL );
229         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value10.cfg" ) );
230     }
231 
232     {
233         param_namespace pn( "", NULL );
234         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value11.cfg" ) );
235     }
236 
237     {
238         param_namespace pn( "", NULL );
239         BOOST_TEST( !pn.load_parameters( "test_files/test_multipart_value12.cfg" ) );
240     }
241 
242     {
243         param_namespace pn( "", NULL );
244         BOOST_TEST( pn.load_parameters( "test_files/test_multipart_value13.cfg" ) );
245 
246         const_string pattern( "\"abc\"" );
247         BOOST_TEST( rtf::get_param_value( "a", pn ) == pattern );
248     }
249 }
250 
251 //____________________________________________________________________________//
252 
253 // EOF
254