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