| 234 | } |
| 235 | |
| 236 | void |
| 237 | testSet() |
| 238 | { |
| 239 | value* result; |
| 240 | value jv; |
| 241 | result = &jv.set_at_pointer("", array()); |
| 242 | BOOST_TEST(( jv == array() )); |
| 243 | BOOST_TEST( result == &jv ); |
| 244 | |
| 245 | result = &jv.set_at_pointer("/0", 10); |
| 246 | BOOST_TEST(( jv == array{10} )); |
| 247 | BOOST_TEST( *result == 10 ); |
| 248 | |
| 249 | result = &jv.set_at_pointer("/-", 20); |
| 250 | BOOST_TEST(( jv == array{10, 20} )); |
| 251 | BOOST_TEST( *result == 20 ); |
| 252 | |
| 253 | result = &jv.set_at_pointer("/-", 30); |
| 254 | BOOST_TEST(( jv == array{10, 20, 30} )); |
| 255 | BOOST_TEST( *result == 30 ); |
| 256 | |
| 257 | result = &jv.set_at_pointer("/1", 25); |
| 258 | BOOST_TEST(( jv == array{10, 25, 30} )); |
| 259 | BOOST_TEST( *result == 25 ); |
| 260 | |
| 261 | result = &jv.set_at_pointer("/-/x", 1); |
| 262 | BOOST_TEST(( jv == array{10, 25, 30, object{{"x", 1}}} )); |
| 263 | BOOST_TEST( *result == 1 ); |
| 264 | |
| 265 | result = &jv.set_at_pointer("/3/0", 2); |
| 266 | BOOST_TEST(( jv == array{10, 25, 30, object{{"x", 1}, {"0", 2}}} )); |
| 267 | BOOST_TEST( *result == 2 ); |
| 268 | |
| 269 | result = &jv.set_at_pointer("/-/0", 3); |
| 270 | BOOST_TEST(( |
| 271 | jv == array{ |
| 272 | 10, |
| 273 | 25, |
| 274 | 30, |
| 275 | object{{"x", 1}, {"0", 2}}, |
| 276 | array{3} } )); |
| 277 | BOOST_TEST( *result == 3 ); |
| 278 | |
| 279 | BOOST_TEST_THROWS_WITH_LOCATION( jv.set_at_pointer("/0/1", 1) ); |
| 280 | |
| 281 | jv = value(); |
| 282 | result = &jv.set_at_pointer("/a/b/c/d/e/f/g/h/i/j/k/l", "m"); |
| 283 | BOOST_TEST( *result == "m" ); |
| 284 | BOOST_TEST( result == &jv.at_pointer("/a/b/c/d/e/f/g/h/i/j/k/l") ); |
| 285 | |
| 286 | result = &jv.set_at_pointer("/a/b/c/d/e/f/g/h/i/j/k/l", "n"); |
| 287 | BOOST_TEST( *result == "n" ); |
| 288 | BOOST_TEST( result == &jv.at_pointer("/a/b/c/d/e/f/g/h/i/j/k/l") ); |
| 289 | |
| 290 | set_pointer_options opts; |
| 291 | opts.replace_any_scalar = true; |
| 292 | jv = 1; |
| 293 | result = &jv.set_at_pointer( "/x", 1, opts ); |