| 2242 | } |
| 2243 | |
| 2244 | void |
| 2245 | testAt() |
| 2246 | { |
| 2247 | // object |
| 2248 | value jvo{{"k1", "value"}, {"k2", nullptr}}; |
| 2249 | value const& cjvo = jvo; |
| 2250 | BOOST_TEST( cjvo.at("k1").as_string() == "value" ); |
| 2251 | BOOST_TEST( cjvo.try_at("k1")->as_string() == "value" ); |
| 2252 | |
| 2253 | jvo.at("k1") = {1, 2, 3}; |
| 2254 | BOOST_TEST( cjvo.at("k1") == array({1, 2, 3}) ); |
| 2255 | BOOST_TEST( *cjvo.try_at("k1") == array({1, 2, 3}) ); |
| 2256 | |
| 2257 | auto&& elem1 = std::move(jvo).at("k1"); |
| 2258 | BOOST_TEST( &elem1 == &jvo.at("k1") ); |
| 2259 | BOOST_TEST( &elem1 == &*jvo.try_at("k1") ); |
| 2260 | |
| 2261 | BOOST_TEST_THROWS_WITH_LOCATION( cjvo.at("null") ); |
| 2262 | BOOST_TEST( cjvo.try_at("null").error() == error::out_of_range ); |
| 2263 | |
| 2264 | // array |
| 2265 | value jva{true,2,"3"}; |
| 2266 | value const& cjva = jva; |
| 2267 | BOOST_TEST( cjva.at(1).as_int64() == 2 ); |
| 2268 | BOOST_TEST( cjva.try_at(1)->as_int64() == 2 ); |
| 2269 | |
| 2270 | jva.at(1) = "item"; |
| 2271 | BOOST_TEST( cjva.at(1) == "item" ); |
| 2272 | BOOST_TEST( *cjva.try_at(1) == "item" ); |
| 2273 | |
| 2274 | auto&& elem2 = std::move(jva).at(1); |
| 2275 | BOOST_TEST( &elem2 == &jva.at(1) ); |
| 2276 | BOOST_TEST( &elem2 == &*jva.try_at(1) ); |
| 2277 | |
| 2278 | BOOST_TEST_THROWS_WITH_LOCATION( value({false,2,false}).at(4) ); |
| 2279 | BOOST_TEST_THROWS_WITH_LOCATION( value({false,2,"3"}).at(4) ); |
| 2280 | BOOST_TEST_THROWS_WITH_LOCATION( value({false,false}).at(4) ); |
| 2281 | BOOST_TEST_THROWS_WITH_LOCATION( value({false,2}).at(4) ); |
| 2282 | BOOST_TEST_THROWS_WITH_LOCATION( value({false,2,"3",nullptr}).at(4) ); |
| 2283 | BOOST_TEST_THROWS_WITH_LOCATION( value({2,false,"3"}).at(4) ); |
| 2284 | BOOST_TEST_THROWS_WITH_LOCATION( value({true,2,"3"}).at(4) ); |
| 2285 | |
| 2286 | BOOST_TEST( |
| 2287 | value({false,2,false}).try_at(4) == error::out_of_range ); |
| 2288 | BOOST_TEST( |
| 2289 | value({false,2,"3"}).try_at(4) == error::out_of_range ); |
| 2290 | BOOST_TEST( |
| 2291 | value({false,false}).try_at(4) == error::out_of_range ); |
| 2292 | BOOST_TEST( |
| 2293 | value({false,2}).try_at(4) == error::out_of_range ); |
| 2294 | BOOST_TEST( |
| 2295 | value({false,2,"3",nullptr}).try_at(4) == error::out_of_range ); |
| 2296 | BOOST_TEST( |
| 2297 | value({2,false,"3"}).try_at(4) == error::out_of_range ); |
| 2298 | BOOST_TEST( |
| 2299 | value({true,2,"3"}).try_at(4) == error::out_of_range ); |
| 2300 | } |
| 2301 | |