Line data Source code
1 : // Copyright (c) 2011-2026 Made to Order Software Corp. All Rights Reserved
2 : //
3 : // https://snapwebsites.org/project/edhttp
4 : // contact@m2osw.com
5 : //
6 : // This program is free software: you can redistribute it and/or modify
7 : // it under the terms of the GNU General Public License as published by
8 : // the Free Software Foundation, either version 3 of the License, or
9 : // (at your option) any later version.
10 : //
11 : // This program is distributed in the hope that it will be useful,
12 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : // GNU General Public License for more details.
15 : //
16 : // You should have received a copy of the GNU General Public License
17 : // along with this program. If not, see <https://www.gnu.org/licenses/>.
18 :
19 : /** \file
20 : * \brief Verify the parametrized_value_list class.
21 : *
22 : * This file implements tests to verify that the parametrized_value_list
23 : * class functions as expected.
24 : */
25 :
26 : // header begin tested
27 : //
28 : #include "edhttp/parametrized_value_list.h"
29 :
30 :
31 : // self
32 : //
33 : #include "catch_main.h"
34 :
35 :
36 : // edhttp
37 : //
38 : #include "edhttp/exception.h"
39 : #include "edhttp/utils.h"
40 :
41 :
42 :
43 31 : CATCH_TEST_CASE("parametrized_value_list", "[string]")
44 : {
45 31 : CATCH_START_SECTION("parametrized_value_list: verify object, except parts")
46 : {
47 3 : edhttp::parametrized_value_list locale("en");
48 :
49 : // no error occurred
50 : //
51 1 : CATCH_REQUIRE(locale.error_messages().empty());
52 :
53 : // original string does not change
54 : //
55 1 : CATCH_REQUIRE(locale.get_string() == "en");
56 :
57 : // get_level() with correct and wrong names
58 : //
59 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::DEFAULT_LEVEL()));
60 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
61 :
62 : // convert back to a string
63 : //
64 1 : CATCH_REQUIRE(locale.to_string() == "en");
65 1 : }
66 32 : CATCH_END_SECTION()
67 :
68 31 : CATCH_START_SECTION("parametrized_value_list: verify parts")
69 : {
70 3 : edhttp::parametrized_value_list locale("en");
71 :
72 : // make sure the result is 1 part
73 : //
74 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
75 1 : CATCH_REQUIRE(p.size() == 1);
76 :
77 : // also get the constant version
78 : //
79 1 : edhttp::parametrized_value::vector_t const & pc(locale.get_parts());
80 1 : CATCH_REQUIRE(pc.size() == 1);
81 :
82 : // now verify that the part is correct
83 : //
84 1 : CATCH_REQUIRE(p[0].get_name() == "en");
85 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
86 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
87 1 : std::int64_t i(123);
88 3 : CATCH_REQUIRE_FALSE(p[0].get_parameter_as_integer("test", i));
89 1 : CATCH_REQUIRE(i == 123);
90 1 : CATCH_REQUIRE(p[0].to_string() == "en");
91 1 : }
92 32 : CATCH_END_SECTION()
93 :
94 31 : CATCH_START_SECTION("parametrized_value_list: verify weights top functions")
95 : {
96 3 : edhttp::parametrized_value_list locale("en-US,en;q=0.8,fr-FR;q= 0.5,fr;q =0.3", true);
97 : //std::cerr << "--- errors? \"" << locale.error_messages() << "\"...\n";
98 :
99 : // no error occurred
100 : //
101 1 : CATCH_REQUIRE(locale.error_messages().empty());
102 :
103 : // original string does not change
104 : //
105 1 : CATCH_REQUIRE(locale.get_string() == "en-US,en;q=0.8,fr-FR;q= 0.5,fr;q =0.3");
106 :
107 : // get_level() with correct and wrong names
108 : //
109 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en-US"), edhttp::parametrized_value::DEFAULT_LEVEL()));
110 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), 0.8f));
111 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr-FR"), 0.5f));
112 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), 0.3f));
113 :
114 : // convert back to a string
115 : //
116 1 : CATCH_REQUIRE(locale.to_string() == "en-US, en; q=0.8, fr-FR; q=0.5, fr; q=0.3");
117 1 : }
118 32 : CATCH_END_SECTION()
119 :
120 31 : CATCH_START_SECTION("parametrized_value_list: verify weight parts")
121 : {
122 3 : edhttp::parametrized_value_list locale("en-US,en;q=\"0.8\",fr-FR;q=0.5,fr;q=0.3");
123 :
124 : // make sure the result is 4 parts
125 : //
126 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
127 1 : CATCH_REQUIRE(p.size() == 4);
128 :
129 : // also get the constant version
130 : //
131 1 : edhttp::parametrized_value::vector_t const & pc(locale.get_parts());
132 1 : CATCH_REQUIRE(pc.size() == 4);
133 :
134 : // now verify that the parts are correct
135 : //
136 1 : CATCH_REQUIRE(p[0].get_name() == "en-US");
137 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
138 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
139 1 : CATCH_REQUIRE(p[0].to_string() == "en-US");
140 :
141 1 : CATCH_REQUIRE(p[1].get_name() == "en");
142 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), 0.8f));
143 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
144 1 : CATCH_REQUIRE(p[1].to_string() == "en; q=0.8");
145 :
146 1 : CATCH_REQUIRE(p[2].get_name() == "fr-FR");
147 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), 0.5f));
148 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
149 1 : CATCH_REQUIRE(p[2].to_string() == "fr-FR; q=0.5");
150 :
151 1 : CATCH_REQUIRE(p[3].get_name() == "fr");
152 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[3].get_level(), 0.3f));
153 3 : CATCH_REQUIRE(p[3].get_parameter("test") == "");
154 1 : CATCH_REQUIRE(p[3].to_string() == "fr; q=0.3");
155 :
156 1 : CATCH_REQUIRE(pc[0].get_name() == "en-US");
157 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
158 3 : CATCH_REQUIRE(pc[0].get_parameter("test") == "");
159 1 : CATCH_REQUIRE(pc[0].to_string() == "en-US");
160 :
161 1 : CATCH_REQUIRE(pc[1].get_name() == "en");
162 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[1].get_level(), 0.8f));
163 3 : CATCH_REQUIRE(pc[1].get_parameter("test") == "");
164 1 : CATCH_REQUIRE(pc[1].to_string() == "en; q=0.8");
165 :
166 1 : CATCH_REQUIRE(pc[2].get_name() == "fr-FR");
167 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[2].get_level(), 0.5f));
168 3 : CATCH_REQUIRE(pc[2].get_parameter("test") == "");
169 1 : CATCH_REQUIRE(pc[2].to_string() == "fr-FR; q=0.5");
170 :
171 1 : CATCH_REQUIRE(pc[3].get_name() == "fr");
172 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[3].get_level(), 0.3f));
173 3 : CATCH_REQUIRE(pc[3].get_parameter("test") == "");
174 1 : CATCH_REQUIRE(pc[3].to_string() == "fr; q=0.3");
175 1 : }
176 32 : CATCH_END_SECTION()
177 :
178 31 : CATCH_START_SECTION("parametrized_value_list: sort has no effect if weights are equal")
179 : {
180 3 : edhttp::parametrized_value_list locale("en-US,en;q=0.8, fr-FR ; q = \"0.5\" ,fr;q=0.3");
181 :
182 1 : locale.sort_by_level();
183 :
184 : // make sure the result is 3 parts
185 : //
186 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
187 1 : CATCH_REQUIRE(p.size() == 4);
188 :
189 : // now verify that the parts are correct
190 : //
191 1 : CATCH_REQUIRE(p[0].get_name() == "en-US");
192 1 : CATCH_REQUIRE(p[1].get_name() == "en");
193 1 : CATCH_REQUIRE(p[2].get_name() == "fr-FR");
194 1 : CATCH_REQUIRE(p[3].get_name() == "fr");
195 1 : }
196 32 : CATCH_END_SECTION()
197 :
198 31 : CATCH_START_SECTION("parametrized_value_list: verify object")
199 : {
200 3 : edhttp::parametrized_value_list locale("de, en, fr");
201 :
202 : // no error occurred
203 : //
204 1 : CATCH_REQUIRE(locale.error_messages().empty());
205 :
206 : // original string does not change
207 : //
208 1 : CATCH_REQUIRE(locale.get_string() == "de, en, fr");
209 :
210 : // get_level() with correct and wrong names
211 : //
212 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::DEFAULT_LEVEL()));
213 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::DEFAULT_LEVEL()));
214 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), edhttp::parametrized_value::DEFAULT_LEVEL()));
215 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
216 :
217 : // convert back to a string
218 : //
219 1 : CATCH_REQUIRE(locale.to_string() == "de, en, fr");
220 1 : }
221 32 : CATCH_END_SECTION()
222 :
223 31 : CATCH_START_SECTION("parametrized_value_list: verify part")
224 : {
225 3 : edhttp::parametrized_value_list locale("de, en, fr");
226 :
227 : // make sure the result is 3 parts
228 : //
229 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
230 1 : CATCH_REQUIRE(p.size() == 3);
231 :
232 : // also get the constant version
233 : //
234 1 : edhttp::parametrized_value::vector_t const & pc(locale.get_parts());
235 1 : CATCH_REQUIRE(pc.size() == 3);
236 :
237 : // now verify that the parts are correct
238 : //
239 1 : CATCH_REQUIRE(p[0].get_name() == "de");
240 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
241 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
242 1 : CATCH_REQUIRE(p[0].to_string() == "de");
243 :
244 1 : CATCH_REQUIRE(p[1].get_name() == "en");
245 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
246 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
247 1 : CATCH_REQUIRE(p[1].to_string() == "en");
248 :
249 1 : CATCH_REQUIRE(p[2].get_name() == "fr");
250 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
251 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
252 1 : CATCH_REQUIRE(p[2].to_string() == "fr");
253 :
254 1 : CATCH_REQUIRE(pc[0].get_name() == "de");
255 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
256 3 : CATCH_REQUIRE(pc[0].get_parameter("test") == "");
257 1 : CATCH_REQUIRE(pc[0].to_string() == "de");
258 :
259 1 : CATCH_REQUIRE(pc[1].get_name() == "en");
260 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
261 3 : CATCH_REQUIRE(pc[1].get_parameter("test") == "");
262 1 : CATCH_REQUIRE(pc[1].to_string() == "en");
263 :
264 1 : CATCH_REQUIRE(pc[2].get_name() == "fr");
265 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[2].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
266 3 : CATCH_REQUIRE(pc[2].get_parameter("test") == "");
267 1 : CATCH_REQUIRE(pc[2].to_string() == "fr");
268 1 : }
269 32 : CATCH_END_SECTION()
270 :
271 31 : CATCH_START_SECTION("parametrized_value_list: sort has no effect if weights are equal")
272 : {
273 3 : edhttp::parametrized_value_list locale("de, en, fr");
274 :
275 1 : locale.sort_by_level();
276 :
277 : // make sure the result is 3 parts
278 : //
279 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
280 1 : CATCH_REQUIRE(p.size() == 3);
281 :
282 : // now verify that the parts are correct
283 : //
284 1 : CATCH_REQUIRE(p[0].get_name() == "de");
285 1 : CATCH_REQUIRE(p[1].get_name() == "en");
286 1 : CATCH_REQUIRE(p[2].get_name() == "fr");
287 1 : }
288 32 : CATCH_END_SECTION()
289 :
290 31 : CATCH_START_SECTION("parametrized_value_list: verify object")
291 : {
292 3 : edhttp::parametrized_value_list locale("fr, za, en");
293 :
294 : // no error occurred
295 : //
296 1 : CATCH_REQUIRE(locale.error_messages().empty());
297 :
298 : // original string does not change
299 : //
300 1 : CATCH_REQUIRE(locale.get_string() == "fr, za, en");
301 :
302 : // get_level() with correct and wrong names
303 : //
304 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), edhttp::parametrized_value::DEFAULT_LEVEL()));
305 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("za"), edhttp::parametrized_value::DEFAULT_LEVEL()));
306 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::DEFAULT_LEVEL()));
307 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
308 :
309 : // convert back to a string
310 : //
311 1 : CATCH_REQUIRE(locale.to_string() == "fr, za, en");
312 1 : }
313 32 : CATCH_END_SECTION()
314 :
315 31 : CATCH_START_SECTION("parametrized_value_list: verify part")
316 : {
317 3 : edhttp::parametrized_value_list locale("fr, za, en");
318 :
319 : // make sure the result is 3 parts
320 : //
321 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
322 1 : CATCH_REQUIRE(p.size() == 3);
323 :
324 : // also get the constant version
325 : //
326 1 : edhttp::parametrized_value::vector_t const & pc(locale.get_parts());
327 1 : CATCH_REQUIRE(pc.size() == 3);
328 :
329 : // now verify that the parts are correct
330 : //
331 1 : CATCH_REQUIRE(p[0].get_name() == "fr");
332 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
333 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
334 1 : CATCH_REQUIRE(p[0].to_string() == "fr");
335 :
336 1 : CATCH_REQUIRE(p[1].get_name() == "za");
337 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
338 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
339 1 : CATCH_REQUIRE(p[1].to_string() == "za");
340 :
341 1 : CATCH_REQUIRE(p[2].get_name() == "en");
342 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
343 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
344 1 : CATCH_REQUIRE(p[2].to_string() == "en");
345 :
346 1 : CATCH_REQUIRE(pc[0].get_name() == "fr");
347 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
348 3 : CATCH_REQUIRE(pc[0].get_parameter("test") == "");
349 1 : CATCH_REQUIRE(pc[0].to_string() == "fr");
350 :
351 1 : CATCH_REQUIRE(pc[1].get_name() == "za");
352 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
353 3 : CATCH_REQUIRE(pc[1].get_parameter("test") == "");
354 1 : CATCH_REQUIRE(pc[1].to_string() == "za");
355 :
356 1 : CATCH_REQUIRE(pc[2].get_name() == "en");
357 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[2].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
358 3 : CATCH_REQUIRE(pc[2].get_parameter("test") == "");
359 1 : CATCH_REQUIRE(pc[2].to_string() == "en");
360 1 : }
361 32 : CATCH_END_SECTION()
362 :
363 31 : CATCH_START_SECTION("parametrized_value_list: sort has no effect if weights are equal")
364 : {
365 3 : edhttp::parametrized_value_list locale("fr, za, en");
366 :
367 1 : locale.sort_by_level();
368 :
369 : // make sure the result is 3 parts
370 : //
371 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
372 1 : CATCH_REQUIRE(p.size() == 3);
373 :
374 : // now verify that the parts are correct
375 : //
376 1 : CATCH_REQUIRE(p[0].get_name() == "fr");
377 1 : CATCH_REQUIRE(p[1].get_name() == "za");
378 1 : CATCH_REQUIRE(p[2].get_name() == "en");
379 1 : }
380 32 : CATCH_END_SECTION()
381 :
382 31 : CATCH_START_SECTION("parametrized_value_list: verify object")
383 : {
384 3 : edhttp::parametrized_value_list locale("fr;q=0, za; q=0.6,en; q=0.4");
385 :
386 : // no error occurred
387 : //
388 1 : CATCH_REQUIRE(locale.error_messages().empty());
389 :
390 : // original string does not change
391 : //
392 1 : CATCH_REQUIRE(locale.get_string() == "fr;q=0, za; q=0.6,en; q=0.4");
393 :
394 : // get_level() with correct and wrong names
395 : //
396 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), 0.0f));
397 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("za"), 0.6f));
398 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), 0.4f));
399 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
400 :
401 : // convert back to a string
402 : //
403 1 : CATCH_REQUIRE(locale.to_string() == "fr; q=0, za; q=0.6, en; q=0.4");
404 1 : }
405 32 : CATCH_END_SECTION()
406 :
407 31 : CATCH_START_SECTION("parametrized_value_list: verify part after copy in non-const and in const")
408 : {
409 3 : edhttp::parametrized_value_list locale("fr;q=0, za; q=0.6,en; q=0.4");
410 :
411 : // make sure the result is 3 parts
412 : //
413 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
414 1 : CATCH_REQUIRE(p.size() == 3);
415 :
416 : // also get the constant version
417 : //
418 1 : edhttp::parametrized_value::vector_t const & pc(locale.get_parts());
419 1 : CATCH_REQUIRE(pc.size() == 3);
420 :
421 : // now verify that the parts are correct
422 : //
423 1 : CATCH_REQUIRE(p[0].get_name() == "fr");
424 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), 0.0f));
425 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
426 1 : CATCH_REQUIRE(p[0].to_string() == "fr; q=0");
427 :
428 1 : CATCH_REQUIRE(p[1].get_name() == "za");
429 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), 0.6f));
430 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
431 1 : CATCH_REQUIRE(p[1].to_string() == "za; q=0.6");
432 :
433 1 : CATCH_REQUIRE(p[2].get_name() == "en");
434 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), 0.4f));
435 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
436 1 : CATCH_REQUIRE(p[2].to_string() == "en; q=0.4");
437 :
438 1 : CATCH_REQUIRE(pc[0].get_name() == "fr");
439 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[0].get_level(), 0.0f));
440 3 : CATCH_REQUIRE(pc[0].get_parameter("test") == "");
441 1 : CATCH_REQUIRE(pc[0].to_string() == "fr; q=0");
442 :
443 1 : CATCH_REQUIRE(pc[1].get_name() == "za");
444 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[1].get_level(), 0.6f));
445 3 : CATCH_REQUIRE(pc[1].get_parameter("test") == "");
446 1 : CATCH_REQUIRE(pc[1].to_string() == "za; q=0.6");
447 :
448 1 : CATCH_REQUIRE(pc[2].get_name() == "en");
449 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[2].get_level(), 0.4f));
450 3 : CATCH_REQUIRE(pc[2].get_parameter("test") == "");
451 1 : CATCH_REQUIRE(pc[2].to_string() == "en; q=0.4");
452 1 : }
453 32 : CATCH_END_SECTION()
454 :
455 31 : CATCH_START_SECTION("parametrized_value_list: sort by level (weight)")
456 : {
457 3 : edhttp::parametrized_value_list locale("fr;q=0, za; q=0.6,en; q=0.4");
458 :
459 1 : locale.sort_by_level();
460 :
461 : // make sure the result is 3 parts
462 : //
463 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
464 1 : CATCH_REQUIRE(p.size() == 3);
465 :
466 : // now verify that the parts are sorted by level
467 : // "fr; q=0, za; q=0.6, en; q=0.4"
468 : //
469 1 : CATCH_REQUIRE(p[0].get_name() == "za");
470 1 : CATCH_REQUIRE(p[1].get_name() == "en");
471 1 : CATCH_REQUIRE(p[2].get_name() == "fr");
472 :
473 : // convert back to a string in the new order and with spaces
474 : //
475 1 : CATCH_REQUIRE(locale.to_string() == "za; q=0.6, en; q=0.4, fr; q=0");
476 1 : }
477 32 : CATCH_END_SECTION()
478 :
479 31 : CATCH_START_SECTION("parametrized_value_list: verify object")
480 : {
481 3 : edhttp::parametrized_value_list locale(" fr; q=0, za; q=0.6, en; q=0.4 ");
482 :
483 : // no error occurred
484 : //
485 1 : CATCH_REQUIRE(locale.error_messages().empty());
486 :
487 : // original string does not change
488 : //
489 1 : CATCH_REQUIRE(locale.get_string() == " fr; q=0, za; q=0.6, en; q=0.4 ");
490 :
491 : // get_level() with correct and wrong names
492 : //
493 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), 0.0f));
494 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("za"), 0.6f));
495 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), 0.4f));
496 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), -1.0f));
497 :
498 : // convert back to a string
499 : //
500 1 : CATCH_REQUIRE(locale.to_string() == "fr; q=0, za; q=0.6, en; q=0.4");
501 1 : }
502 32 : CATCH_END_SECTION()
503 :
504 31 : CATCH_START_SECTION("parametrized_value_list: verify part")
505 : {
506 3 : edhttp::parametrized_value_list locale(" fr; q=0, za; q=0.6, en; q=0.4 ");
507 :
508 : // make sure the result is 3 parts
509 : //
510 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
511 1 : CATCH_REQUIRE(p.size() == 3);
512 :
513 : // also get the constant version
514 : //
515 1 : edhttp::parametrized_value::vector_t const & pc(locale.get_parts());
516 1 : CATCH_REQUIRE(pc.size() == 3);
517 :
518 : // now verify that the parts are correct
519 : //
520 1 : CATCH_REQUIRE(p[0].get_name() == "fr");
521 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), 0.0f));
522 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
523 1 : CATCH_REQUIRE(p[0].to_string() == "fr; q=0");
524 :
525 1 : CATCH_REQUIRE(p[1].get_name() == "za");
526 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), 0.6f));
527 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
528 1 : CATCH_REQUIRE(p[1].to_string() == "za; q=0.6");
529 :
530 1 : CATCH_REQUIRE(p[2].get_name() == "en");
531 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), 0.4f));
532 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
533 1 : CATCH_REQUIRE(p[2].to_string() == "en; q=0.4");
534 :
535 1 : CATCH_REQUIRE(pc[0].get_name() == "fr");
536 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[0].get_level(), 0.0f));
537 3 : CATCH_REQUIRE(pc[0].get_parameter("test") == "");
538 1 : CATCH_REQUIRE(pc[0].to_string() == "fr; q=0");
539 :
540 1 : CATCH_REQUIRE(pc[1].get_name() == "za");
541 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[1].get_level(), 0.6f));
542 3 : CATCH_REQUIRE(pc[1].get_parameter("test") == "");
543 1 : CATCH_REQUIRE(pc[1].to_string() == "za; q=0.6");
544 :
545 1 : CATCH_REQUIRE(pc[2].get_name() == "en");
546 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[2].get_level(), 0.4f));
547 3 : CATCH_REQUIRE(pc[2].get_parameter("test") == "");
548 1 : CATCH_REQUIRE(pc[2].to_string() == "en; q=0.4");
549 1 : }
550 32 : CATCH_END_SECTION()
551 :
552 31 : CATCH_START_SECTION("parametrized_value_list: sort by level (weight)")
553 : {
554 3 : edhttp::parametrized_value_list locale(" fr; q=0, za; q=0.6, en; q=0.4 ");
555 :
556 1 : locale.sort_by_level();
557 :
558 : // make sure the result is 3 parts
559 : //
560 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
561 1 : CATCH_REQUIRE(p.size() == 3);
562 :
563 : // now verify that the parts are sorted by level
564 : //
565 1 : CATCH_REQUIRE(p[0].get_name() == "za");
566 1 : CATCH_REQUIRE(p[1].get_name() == "en");
567 1 : CATCH_REQUIRE(p[2].get_name() == "fr");
568 1 : }
569 32 : CATCH_END_SECTION()
570 :
571 31 : CATCH_START_SECTION("parametrized_value_list: verify object")
572 : {
573 3 : edhttp::parametrized_value_list locale(" fr; q=0, za, en; q=0.4 ,es;q=1.0");
574 :
575 : // no error occurred
576 : //
577 1 : CATCH_REQUIRE(locale.error_messages().empty());
578 :
579 : // original string does not change
580 : //
581 1 : CATCH_REQUIRE(locale.get_string() == " fr; q=0, za, en; q=0.4 ,es;q=1.0");
582 :
583 : // get_level() with correct and wrong names
584 : //
585 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), 0.0f));
586 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("za"), edhttp::parametrized_value::DEFAULT_LEVEL()));
587 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), 0.4f));
588 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), 1.0f));
589 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), -1.0f));
590 :
591 : // convert back to a string
592 : //
593 1 : CATCH_REQUIRE(locale.to_string() == "fr; q=0, za, en; q=0.4, es; q=1.0");
594 1 : }
595 32 : CATCH_END_SECTION()
596 :
597 31 : CATCH_START_SECTION("parametrized_value_list: verify part")
598 : {
599 3 : edhttp::parametrized_value_list locale(" fr; q=0, za, en; q=0.4 ,es;q=1.0");
600 :
601 : // make sure the result is 3 parts
602 : //
603 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
604 1 : CATCH_REQUIRE(p.size() == 4);
605 :
606 : // also get the constant version
607 : //
608 1 : edhttp::parametrized_value::vector_t const & pc(locale.get_parts());
609 1 : CATCH_REQUIRE(pc.size() == 4);
610 :
611 : // now verify that the parts are correct
612 : //
613 1 : CATCH_REQUIRE(p[0].get_name() == "fr");
614 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), 0.0f));
615 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
616 1 : CATCH_REQUIRE(p[0].to_string() == "fr; q=0");
617 :
618 1 : CATCH_REQUIRE(p[1].get_name() == "za");
619 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
620 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
621 1 : CATCH_REQUIRE(p[1].to_string() == "za");
622 :
623 1 : CATCH_REQUIRE(p[2].get_name() == "en");
624 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), 0.4f));
625 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
626 1 : CATCH_REQUIRE(p[2].to_string() == "en; q=0.4");
627 :
628 1 : CATCH_REQUIRE(p[3].get_name() == "es");
629 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[3].get_level(), 1.0f));
630 3 : CATCH_REQUIRE(p[3].get_parameter("test") == "");
631 1 : CATCH_REQUIRE(p[3].to_string() == "es; q=1.0");
632 :
633 1 : CATCH_REQUIRE(pc[0].get_name() == "fr");
634 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[0].get_level(), 0.0f));
635 3 : CATCH_REQUIRE(pc[0].get_parameter("test") == "");
636 1 : CATCH_REQUIRE(pc[0].to_string() == "fr; q=0");
637 :
638 1 : CATCH_REQUIRE(pc[1].get_name() == "za");
639 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
640 3 : CATCH_REQUIRE(pc[1].get_parameter("test") == "");
641 1 : CATCH_REQUIRE(pc[1].to_string() == "za");
642 :
643 1 : CATCH_REQUIRE(pc[2].get_name() == "en");
644 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(pc[2].get_level(), 0.4f));
645 3 : CATCH_REQUIRE(pc[2].get_parameter("test") == "");
646 1 : CATCH_REQUIRE(pc[2].to_string() == "en; q=0.4");
647 :
648 1 : CATCH_REQUIRE(p[3].get_name() == "es");
649 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[3].get_level(), 1.0f));
650 3 : CATCH_REQUIRE(p[3].get_parameter("test") == "");
651 1 : CATCH_REQUIRE(p[3].to_string() == "es; q=1.0");
652 1 : }
653 32 : CATCH_END_SECTION()
654 :
655 31 : CATCH_START_SECTION("parametrized_value_list: sort by level (weight)")
656 : {
657 3 : edhttp::parametrized_value_list locale(" fr; q=0, za, en; q=0.4 ,es;q=1.0");
658 :
659 1 : locale.sort_by_level();
660 :
661 : // make sure the result is 3 parts
662 : //
663 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
664 1 : CATCH_REQUIRE(p.size() == 4);
665 :
666 : // now verify that the parts are sorted by level
667 : //
668 1 : CATCH_REQUIRE(p[0].get_name() == "za");
669 1 : CATCH_REQUIRE(p[1].get_name() == "es");
670 1 : CATCH_REQUIRE(p[2].get_name() == "en");
671 1 : CATCH_REQUIRE(p[3].get_name() == "fr");
672 1 : }
673 32 : CATCH_END_SECTION()
674 :
675 31 : CATCH_START_SECTION("parametrized_value_list: verify object")
676 : {
677 3 : edhttp::parametrized_value_list locale("de");
678 :
679 : // no error occurred
680 : //
681 1 : CATCH_REQUIRE(locale.error_messages().empty());
682 :
683 : // original string does not change
684 : //
685 1 : CATCH_REQUIRE(locale.get_string() == "de");
686 :
687 : // get_level() with correct and wrong names
688 : //
689 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::DEFAULT_LEVEL()));
690 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
691 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
692 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
693 :
694 : // convert back to a string
695 : //
696 1 : CATCH_REQUIRE(locale.to_string() == "de");
697 :
698 : // make sure the result is 1 part
699 : //
700 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
701 1 : CATCH_REQUIRE(p.size() == 1);
702 :
703 : // now verify that the parts are correct
704 : //
705 1 : CATCH_REQUIRE(p[0].get_name() == "de");
706 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
707 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
708 1 : CATCH_REQUIRE(p[0].to_string() == "de");
709 1 : }
710 32 : CATCH_END_SECTION()
711 :
712 31 : CATCH_START_SECTION("parametrized_value_list: add \"en\"")
713 : {
714 3 : edhttp::parametrized_value_list locale("de");
715 :
716 : // the parse is expected to work (return true)
717 : //
718 3 : CATCH_REQUIRE(locale.parse("en"));
719 :
720 : // no error occurred
721 : //
722 1 : CATCH_REQUIRE(locale.error_messages().empty());
723 :
724 : // original string does not change
725 : //
726 1 : CATCH_REQUIRE(locale.get_string() == "de,en");
727 :
728 : // get_level() with correct and wrong names
729 : //
730 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::DEFAULT_LEVEL()));
731 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::DEFAULT_LEVEL()));
732 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
733 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
734 :
735 : // convert back to a string
736 : //
737 1 : CATCH_REQUIRE(locale.to_string() == "de, en");
738 :
739 : // make sure the result is 2 parts
740 : //
741 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
742 1 : CATCH_REQUIRE(p.size() == 2);
743 :
744 : // now verify that the parts are correct
745 : //
746 1 : CATCH_REQUIRE(p[0].get_name() == "de");
747 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
748 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
749 1 : CATCH_REQUIRE(p[0].to_string() == "de");
750 :
751 1 : CATCH_REQUIRE(p[1].get_name() == "en");
752 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
753 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
754 1 : CATCH_REQUIRE(p[1].to_string() == "en");
755 1 : }
756 32 : CATCH_END_SECTION()
757 :
758 31 : CATCH_START_SECTION("parametrized_value_list: add \"en\" and then \"fr\"")
759 : {
760 3 : edhttp::parametrized_value_list locale("de");
761 :
762 : // the parse is expected to work (return true)
763 : //
764 3 : CATCH_REQUIRE(locale.parse("en"));
765 3 : CATCH_REQUIRE(locale.parse("fr"));
766 :
767 : // no error occurred
768 : //
769 1 : CATCH_REQUIRE(locale.error_messages().empty());
770 :
771 : // original string does not change
772 : //
773 1 : CATCH_REQUIRE(locale.get_string() == "de,en,fr");
774 :
775 : // get_level() with correct and wrong names
776 : //
777 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::DEFAULT_LEVEL()));
778 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::DEFAULT_LEVEL()));
779 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), edhttp::parametrized_value::DEFAULT_LEVEL()));
780 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
781 :
782 : // convert back to a string
783 : //
784 1 : CATCH_REQUIRE(locale.to_string() == "de, en, fr");
785 :
786 : // make sure the result is 3 parts
787 : //
788 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
789 1 : CATCH_REQUIRE(p.size() == 3);
790 :
791 : // now verify that the parts are correct
792 : //
793 1 : CATCH_REQUIRE(p[0].get_name() == "de");
794 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
795 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
796 1 : CATCH_REQUIRE(p[0].to_string() == "de");
797 :
798 1 : CATCH_REQUIRE(p[1].get_name() == "en");
799 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
800 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
801 1 : CATCH_REQUIRE(p[1].to_string() == "en");
802 :
803 1 : CATCH_REQUIRE(p[2].get_name() == "fr");
804 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
805 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
806 1 : CATCH_REQUIRE(p[2].to_string() == "fr");
807 1 : }
808 32 : CATCH_END_SECTION()
809 :
810 31 : CATCH_START_SECTION("parametrized_value_list: replace with \"mo\"")
811 : {
812 3 : edhttp::parametrized_value_list locale("de");
813 :
814 : // the parser is expected to work (return true)
815 : //
816 3 : CATCH_REQUIRE(locale.parse(" mo ", true, true));
817 :
818 : // no error occurred
819 : //
820 1 : CATCH_REQUIRE(locale.error_messages().empty());
821 :
822 : // original string does not change
823 : //
824 1 : CATCH_REQUIRE(locale.get_string() == " mo ");
825 :
826 : // get_level() with correct and wrong names
827 : //
828 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("mo"), edhttp::parametrized_value::DEFAULT_LEVEL()));
829 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
830 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
831 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
832 :
833 : // convert back to a string
834 : //
835 1 : CATCH_REQUIRE(locale.to_string() == "mo");
836 :
837 : // make sure the result is 1 part
838 : //
839 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
840 1 : CATCH_REQUIRE(p.size() == 1);
841 :
842 : // now verify that the parts are correct
843 : //
844 1 : CATCH_REQUIRE(p[0].get_name() == "mo");
845 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
846 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
847 1 : CATCH_REQUIRE(p[0].to_string() == "mo");
848 1 : }
849 32 : CATCH_END_SECTION()
850 :
851 31 : CATCH_START_SECTION("parametrized_value_list: set parameters with a value")
852 : {
853 3 : edhttp::parametrized_value_list locale("de=123");
854 1 : CATCH_REQUIRE(locale.error_messages().empty());
855 1 : CATCH_REQUIRE(locale.get_string() == "de=123");
856 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("mo"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
857 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
858 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::DEFAULT_LEVEL()));
859 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
860 1 : CATCH_REQUIRE(locale.to_string() == "de=123");
861 :
862 3 : bool reset(locale.parse(" mo = \"555\" ", false, true));
863 1 : CATCH_REQUIRE(reset);
864 1 : CATCH_REQUIRE(locale.error_messages().empty());
865 1 : CATCH_REQUIRE(locale.get_string() == " mo = \"555\" ");
866 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("mo"), edhttp::parametrized_value::DEFAULT_LEVEL()));
867 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
868 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
869 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
870 1 : CATCH_REQUIRE(locale.to_string() == "mo=555");
871 :
872 3 : CATCH_REQUIRE(locale.parse(" en = \" 555 \" ", false, true));
873 1 : CATCH_REQUIRE(locale.error_messages().empty());
874 1 : CATCH_REQUIRE(locale.get_string() == " en = \" 555 \" ");
875 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("mo"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
876 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::DEFAULT_LEVEL()));
877 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
878 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
879 1 : CATCH_REQUIRE(locale.to_string() == "en=\" 555 \"");
880 :
881 3 : CATCH_REQUIRE(locale.parse(" es = 555 ", false, true));
882 1 : CATCH_REQUIRE(locale.error_messages().empty());
883 1 : CATCH_REQUIRE(locale.get_string() == " es = 555 ");
884 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("mo"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
885 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("en"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
886 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("de"), edhttp::parametrized_value::UNDEFINED_LEVEL()));
887 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("es"), edhttp::parametrized_value::DEFAULT_LEVEL()));
888 1 : CATCH_REQUIRE(locale.to_string() == "es=555");
889 1 : }
890 32 : CATCH_END_SECTION()
891 :
892 31 : CATCH_START_SECTION("parametrized_value_list: verify multiple parts")
893 : {
894 3 : edhttp::parametrized_value_list locale("fr;q=0;r=3.2;z=fancy, za; q = 0.6 ; h = \"angry\" ; object = \"color of the wand\",en; f=0.4");
895 :
896 : // make sure the result is 3 parts
897 : //
898 1 : edhttp::parametrized_value::vector_t const & p(locale.get_parts());
899 1 : CATCH_REQUIRE(p.size() == 3);
900 :
901 : // now verify that the parts are correct
902 : //
903 1 : CATCH_REQUIRE(p[0].get_name() == "fr");
904 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
905 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), 0.0f));
906 3 : CATCH_REQUIRE(p[0].get_parameter("r") == "3.2");
907 3 : CATCH_REQUIRE(p[0].get_parameter("z") == "fancy");
908 1 : double d(-1.0);
909 3 : CATCH_REQUIRE_FALSE(p[0].get_parameter_as_floating_point("z", d));
910 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(d, -1.0));
911 3 : CATCH_REQUIRE_FALSE(p[0].get_parameter_as_floating_point("unknown", d));
912 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(d, -1.0));
913 1 : CATCH_REQUIRE(p[0].to_string() == "fr; q=0; r=3.2; z=fancy");
914 :
915 1 : CATCH_REQUIRE(p[1].get_name() == "za");
916 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
917 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), 0.6f));
918 3 : CATCH_REQUIRE(p[1].get_parameter("h") == "angry");
919 3 : CATCH_REQUIRE(p[1].get_parameter("object") == "color of the wand");
920 1 : CATCH_REQUIRE(p[1].to_string() == "za; h=angry; object=\"color of the wand\"; q=0.6");
921 :
922 1 : CATCH_REQUIRE(p[2].get_name() == "en");
923 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
924 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
925 3 : CATCH_REQUIRE(p[2].get_parameter("f") == "0.4");
926 1 : CATCH_REQUIRE(p[2].to_string() == "en; f=0.4");
927 1 : }
928 32 : CATCH_END_SECTION()
929 :
930 31 : CATCH_START_SECTION("parametrized_value_list: verify other quotation requirements")
931 : {
932 3 : edhttp::parametrized_value_list locale("fr=francais;q=0;r=3.2;z=\"c'est necessaire\",,, za=\"South Africa\"; q = 0.6 ; h = \"angry\" ; object = \"color of the wand\",en; f=0.4; cute=\"girls \\\"are\\\" dancing\"");
933 :
934 : // make sure the result is 3 parts
935 : //
936 1 : edhttp::parametrized_value::vector_t & p(locale.get_parts());
937 1 : CATCH_REQUIRE(p.size() == 3);
938 :
939 1 : double d(-1.0);
940 :
941 : // now verify that the parts are correct
942 : //
943 1 : CATCH_REQUIRE(p[0].get_name() == "fr");
944 1 : CATCH_REQUIRE(p[0].get_value() == "francais");
945 3 : CATCH_REQUIRE(p[0].get_parameter("test") == "");
946 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), 0.0f));
947 1 : p[0].set_level(0.5f);
948 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[0].get_level(), 0.5f));
949 3 : CATCH_REQUIRE(p[0].get_parameter("r") == "3.2");
950 3 : CATCH_REQUIRE(p[0].get_parameter_as_floating_point("r", d));
951 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(d, 3.2));
952 3 : CATCH_REQUIRE(p[0].get_parameter("z") == "c'est necessaire");
953 1 : CATCH_REQUIRE(p[0].to_string() == "fr=francais; q=0; r=3.2; z=\"c'est necessaire\"");
954 :
955 1 : CATCH_REQUIRE(p[1].get_name() == "za");
956 1 : CATCH_REQUIRE(p[1].get_value() == "South Africa");
957 3 : CATCH_REQUIRE(p[1].get_parameter("test") == "");
958 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[1].get_level(), 0.6f));
959 3 : CATCH_REQUIRE(p[1].get_parameter_as_floating_point("q", d));
960 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(d, 0.6));
961 3 : CATCH_REQUIRE(p[1].get_parameter("h") == "angry");
962 3 : CATCH_REQUIRE(p[1].get_parameter("object") == "color of the wand");
963 1 : CATCH_REQUIRE(p[1].to_string() == "za=\"South Africa\"; h=angry; object=\"color of the wand\"; q=0.6");
964 :
965 1 : CATCH_REQUIRE(p[2].get_name() == "en");
966 3 : CATCH_REQUIRE(p[2].get_parameter("test") == "");
967 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(p[2].get_level(), edhttp::parametrized_value::DEFAULT_LEVEL()));
968 3 : CATCH_REQUIRE(p[2].get_parameter("f") == "0.4");
969 3 : CATCH_REQUIRE(p[2].get_parameter_as_floating_point("f", d));
970 1 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(d, 0.4));
971 3 : CATCH_REQUIRE(p[2].get_parameter("cute") == "girls \"are\" dancing");
972 1 : CATCH_REQUIRE(p[2].to_string() == "en; cute=\"girls \\\"are\\\" dancing\"; f=0.4");
973 :
974 : //std::int64_t value(-1);
975 : //CATCH_REQUIRE(p->has_parameter("q"));
976 : //CATCH_REQUIRE(p->get_parameter("q") == "joke");
977 : //CATCH_REQUIRE_FALSE(p->get_parameter_as_integer("q", value));
978 : //CATCH_REQUIRE(value == -1);
979 1 : }
980 32 : CATCH_END_SECTION()
981 :
982 31 : CATCH_START_SECTION("parametrized_value_list: negative quality is not accepted as such (ignored)")
983 : {
984 1 : edhttp::parametrized_value_list locale;
985 :
986 3 : CATCH_REQUIRE(locale.parse("fr-FR;q=-1.0"));
987 :
988 1 : CATCH_REQUIRE(locale.error_messages() == "");
989 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr-FR"), edhttp::parametrized_value::DEFAULT_LEVEL()));
990 1 : }
991 32 : CATCH_END_SECTION()
992 :
993 31 : CATCH_START_SECTION("parametrized_value_list: quality must be a valid floating point (ignored)")
994 : {
995 1 : edhttp::parametrized_value_list locale;
996 :
997 3 : CATCH_REQUIRE(locale.parse("fr-FR;q=joke"));
998 :
999 1 : CATCH_REQUIRE(locale.error_messages() == "");
1000 3 : CATCH_REQUIRE(SNAP_CATCH2_NAMESPACE::nearly_equal(locale.get_level("fr-FR"), edhttp::parametrized_value::DEFAULT_LEVEL()));
1001 :
1002 3 : edhttp::parametrized_value * p(locale.get_part("fr-FR"));
1003 1 : std::int64_t value(-1);
1004 3 : CATCH_REQUIRE(p->has_parameter("q"));
1005 3 : CATCH_REQUIRE(p->get_parameter("q") == "joke");
1006 3 : CATCH_REQUIRE_FALSE(p->get_parameter_as_integer("q", value));
1007 1 : CATCH_REQUIRE(value == -1);
1008 :
1009 3 : p = locale.get_part("en-AU");
1010 1 : CATCH_REQUIRE(p == nullptr);
1011 1 : }
1012 32 : CATCH_END_SECTION()
1013 :
1014 31 : CATCH_START_SECTION("parametrized_value_list: retrieve an integer")
1015 : {
1016 1 : edhttp::parametrized_value_list alt_svc;
1017 :
1018 3 : CATCH_REQUIRE(alt_svc.parse("h3=\":443\"; ma=86400"));
1019 :
1020 1 : CATCH_REQUIRE(alt_svc.error_messages() == "");
1021 3 : edhttp::parametrized_value * p(alt_svc.get_part("h3"));
1022 1 : CATCH_REQUIRE(p != nullptr);
1023 1 : CATCH_REQUIRE(p->get_name() == "h3");
1024 1 : CATCH_REQUIRE(p->get_value() == ":443");
1025 3 : CATCH_REQUIRE(p->get_parameter("ma") == "86400");
1026 1 : std::int64_t value(-1);
1027 3 : CATCH_REQUIRE(p->has_parameter("ma"));
1028 3 : CATCH_REQUIRE(p->get_parameter_as_integer("ma", value));
1029 1 : CATCH_REQUIRE(value == 86400);
1030 3 : CATCH_REQUIRE_FALSE(p->has_parameter("persist"));
1031 1 : }
1032 32 : CATCH_END_SECTION()
1033 :
1034 31 : CATCH_START_SECTION("parametrized_value_list: use a name with a %XX character")
1035 : {
1036 1 : edhttp::parametrized_value_list alt_svc;
1037 :
1038 3 : CATCH_REQUIRE(alt_svc.parse("%5Bh3%5D=\":443\"; ma=86400"));
1039 :
1040 1 : CATCH_REQUIRE(alt_svc.error_messages() == "");
1041 3 : edhttp::parametrized_value * p(alt_svc.get_part("%5Bh3%5D"));
1042 1 : CATCH_REQUIRE(p != nullptr);
1043 1 : CATCH_REQUIRE(p->get_name() == "%5Bh3%5D");
1044 1 : std::string decoded_name;
1045 1 : CATCH_REQUIRE(edhttp::decode_percents(p->get_name(), decoded_name)); // for an alt-svc, decoding %XX is expected
1046 1 : CATCH_REQUIRE(decoded_name == "[h3]");
1047 1 : CATCH_REQUIRE(p->get_value() == ":443");
1048 3 : CATCH_REQUIRE(p->get_parameter("ma") == "86400");
1049 1 : std::int64_t value(-1);
1050 3 : CATCH_REQUIRE(p->has_parameter("ma"));
1051 3 : CATCH_REQUIRE(p->get_parameter_as_integer("ma", value));
1052 1 : CATCH_REQUIRE(value == 86400);
1053 3 : CATCH_REQUIRE_FALSE(p->has_parameter("persist"));
1054 1 : }
1055 32 : CATCH_END_SECTION()
1056 31 : }
1057 :
1058 :
1059 8 : CATCH_TEST_CASE("invalid_parametrized_value_list", "[invalid][string]")
1060 : {
1061 : //CATCH_START_SECTION("invalid_parametrized_value_list: main name too long")
1062 : //{
1063 : // edhttp::parametrized_value_list locale;
1064 : //
1065 : // CATCH_REQUIRE_FALSE(locale.parse("deutsch_ist_zu-schwierig"));
1066 : //
1067 : // CATCH_REQUIRE(locale.error_messages() == "part name is empty or too long (limit is '8-8' characters).\n");
1068 : //}
1069 : //CATCH_END_SECTION()
1070 :
1071 : //CATCH_START_SECTION("invalid_parametrized_value_list: sub-name too long")
1072 : //{
1073 : // edhttp::parametrized_value_list locale;
1074 : //
1075 : // CATCH_REQUIRE_FALSE(locale.parse("deutsch-ist_zu_schwierig"));
1076 : //
1077 : // CATCH_REQUIRE(locale.error_messages() == "part sub-name is empty or too long (limit is '8-8' characters).\n");
1078 : //}
1079 : //CATCH_END_SECTION()
1080 :
1081 : //CATCH_START_SECTION("invalid_parametrized_value_list: too many dashes in part name")
1082 : //{
1083 : // edhttp::parametrized_value_list locale;
1084 : //
1085 : // CATCH_REQUIRE_FALSE(locale.parse("deutsch-ist-zu-schwierig"));
1086 : //
1087 : // CATCH_REQUIRE(locale.error_messages() == "part name cannot include more than one '-'.\n");
1088 : //}
1089 : //CATCH_END_SECTION()
1090 :
1091 8 : CATCH_START_SECTION("invalid_parametrized_value_list: spurious data")
1092 : {
1093 1 : edhttp::parametrized_value_list locale;
1094 :
1095 3 : CATCH_REQUIRE_FALSE(locale.parse("fr-FR;joke=\"it is\" not", true));
1096 :
1097 1 : CATCH_REQUIRE(locale.error_messages() == "item's parameters must be separated by semicolon.\n");
1098 1 : }
1099 9 : CATCH_END_SECTION()
1100 :
1101 8 : CATCH_START_SECTION("invalid_parametrized_value_list: expected value separator (,) or EOS")
1102 : {
1103 1 : edhttp::parametrized_value_list locale;
1104 :
1105 : // TODO: the space should not be require to get the error?
1106 : // except that the `|` character is allowed in tokens
1107 : //
1108 : //CATCH_REQUIRE_FALSE(locale.parse("fr-FR|"));
1109 : //CATCH_REQUIRE(locale.error_messages() == "item not ended properly.\n");
1110 :
1111 3 : CATCH_REQUIRE_FALSE(locale.parse("fr-FR |"));
1112 1 : CATCH_REQUIRE(locale.error_messages() == "item not ended properly.\n");
1113 1 : }
1114 9 : CATCH_END_SECTION()
1115 :
1116 8 : CATCH_START_SECTION("invalid_parametrized_value_list: missing closing quote")
1117 : {
1118 1 : edhttp::parametrized_value_list locale;
1119 :
1120 3 : CATCH_REQUIRE_FALSE(locale.parse("h3=\":443"));
1121 :
1122 1 : CATCH_REQUIRE(locale.error_messages() == "closing quote missing.\n");
1123 1 : }
1124 9 : CATCH_END_SECTION()
1125 :
1126 8 : CATCH_START_SECTION("invalid_parametrized_value_list: quoted string ends with a backslash and not closing quote")
1127 : {
1128 1 : edhttp::parametrized_value_list locale;
1129 :
1130 3 : CATCH_REQUIRE_FALSE(locale.parse("h3=\":443\\"));
1131 :
1132 1 : CATCH_REQUIRE(locale.error_messages() == "unexpected standalone backslash at the end of a quoted string.\n");
1133 1 : }
1134 9 : CATCH_END_SECTION()
1135 :
1136 8 : CATCH_START_SECTION("invalid_parametrized_value_list: quoted string ends with a backslash and not closing quote")
1137 : {
1138 1 : edhttp::parametrized_value_list locale;
1139 :
1140 3 : CATCH_REQUIRE_FALSE(locale.parse("h3?=\":443\""));
1141 :
1142 1 : CATCH_REQUIRE(locale.error_messages() == "a parameter name must be a valid HTTP token.\n"
1143 : "unexpected token, skipping to next item.\n");
1144 1 : }
1145 9 : CATCH_END_SECTION()
1146 :
1147 8 : CATCH_START_SECTION("invalid_parametrized_value_list: quoted string ends with a backslash and not closing quote")
1148 : {
1149 1 : edhttp::parametrized_value_list locale;
1150 :
1151 3 : CATCH_REQUIRE_FALSE(locale.parse("\":443\""));
1152 :
1153 1 : CATCH_REQUIRE(locale.error_messages() == "unexpected token, skipping to next item.\n");
1154 1 : }
1155 9 : CATCH_END_SECTION()
1156 :
1157 8 : CATCH_START_SECTION("invalid_parametrized_value_list: invalid / unexpected tokens")
1158 : {
1159 1 : edhttp::parametrized_value_list locale;
1160 :
1161 3 : CATCH_REQUIRE_FALSE(locale.parse("h3 = [token]"));
1162 1 : CATCH_REQUIRE(locale.error_messages() == "a parameter name must be a valid HTTP token.\n");
1163 :
1164 3 : CATCH_REQUIRE_FALSE(locale.parse("h3 = ; missing = value"));
1165 1 : CATCH_REQUIRE(locale.error_messages() == "unexpected token (59) after the = sign.\n"
1166 : "unexpected token, skipping to next item.\n");
1167 :
1168 3 : CATCH_REQUIRE_FALSE(locale.parse("h3 = 123; color = [token]"));
1169 1 : CATCH_REQUIRE(locale.error_messages() == "a parameter name must be a valid HTTP token.\n"
1170 : "unexpected token after the = sign to assign a parameter's value.\n");
1171 :
1172 3 : CATCH_REQUIRE_FALSE(locale.parse("h3 = 123;; color = blue"));
1173 1 : CATCH_REQUIRE(locale.error_messages() == "unexpected token in an item list of parameters.\n"
1174 : "unexpected token, skipping to next item.\n");
1175 :
1176 3 : CATCH_REQUIRE_FALSE(locale.parse("h3 = 123; color += 0x550022"));
1177 1 : CATCH_REQUIRE(locale.error_messages() == "item parameter \"color\" must be assigned a value.\n");
1178 1 : }
1179 9 : CATCH_END_SECTION()
1180 :
1181 8 : CATCH_START_SECTION("invalid_parametrized_value_list: quoted string with obs-text characters")
1182 : {
1183 1 : edhttp::parametrized_value_list locale;
1184 :
1185 32 : for(int i(0x01); i <= 0x1F; ++i)
1186 : {
1187 31 : if(i == '\t')
1188 : {
1189 1 : continue;
1190 : }
1191 90 : std::string header("h3=\"example.com:44");
1192 30 : header += static_cast<char>(i);
1193 30 : header += '"';
1194 30 : CATCH_REQUIRE_FALSE(locale.parse(header));
1195 :
1196 30 : CATCH_REQUIRE(locale.error_messages() == "invalid character in quoted string.\n");
1197 30 : }
1198 :
1199 : {
1200 3 : std::string header("h3=\"example.com:44");
1201 1 : header += static_cast<char>(0x7F);
1202 1 : header += '"';
1203 1 : CATCH_REQUIRE_FALSE(locale.parse(header));
1204 :
1205 1 : CATCH_REQUIRE(locale.error_messages() == "invalid character in quoted string.\n");
1206 1 : }
1207 :
1208 129 : for(int i(0x80); i <= 0xFF; ++i)
1209 : {
1210 384 : std::string header("h3=\"example.com:44");
1211 128 : header += static_cast<char>(i);
1212 128 : header += '"';
1213 128 : CATCH_REQUIRE_FALSE(locale.parse(header));
1214 :
1215 128 : CATCH_REQUIRE(locale.error_messages() == "invalid character in quoted string.\n");
1216 128 : }
1217 1 : }
1218 9 : CATCH_END_SECTION()
1219 8 : }
1220 :
1221 :
1222 : //CATCH_TEST_CASE("invalid_parametrized_value", "[invalid][string]")
1223 : //{
1224 : // CATCH_START_SECTION("invalid_parametrized_value: part value includes ' and \"")
1225 : // {
1226 : // edhttp::parametrized_value p("invalid");
1227 : // CATCH_REQUIRE(p.get_name() == "invalid");
1228 : // CATCH_REQUIRE(p.get_value().empty());
1229 : // p.set_value("c'est pas \"possible\"");
1230 : // CATCH_REQUIRE(p.get_value() == "c'est pas \"possible\"");
1231 : // CATCH_REQUIRE_THROWS_MATCHES(
1232 : // p.to_string()
1233 : // , edhttp::unquotable_string
1234 : // , Catch::Matchers::ExceptionMessage(
1235 : // "edhttp_exception: string [c'est pas \"possible\"] includes single and double quotes."));
1236 : // }
1237 : // CATCH_END_SECTION()
1238 : //
1239 : // CATCH_START_SECTION("invalid_parametrized_value: part value includes \" and '")
1240 : // {
1241 : // edhttp::parametrized_value p("invalid");
1242 : // CATCH_REQUIRE(p.get_name() == "invalid");
1243 : // CATCH_REQUIRE(p.get_value().empty());
1244 : // p.set_value("\"c'est pas possible\"");
1245 : // CATCH_REQUIRE(p.get_value() == "\"c'est pas possible\"");
1246 : // CATCH_REQUIRE_THROWS_MATCHES(
1247 : // p.to_string()
1248 : // , edhttp::unquotable_string
1249 : // , Catch::Matchers::ExceptionMessage(
1250 : // "edhttp_exception: string [\"c'est pas possible\"] includes single and double quotes."));
1251 : // }
1252 : // CATCH_END_SECTION()
1253 : //}
1254 :
1255 :
1256 :
1257 : // vim: ts=4 sw=4 et
|