void checkItemParseError( // real_k can differ from err_k, which is typically coerced to string dynamic d, Fn fn, dynamic real_k, dynamic err_k, std::string re) { DynamicParser p(DynamicParser::OnError::RECORD, &d); fn(p); auto errors = p.releaseErrors(); auto error = errors.at("nested").at(err_k); EXPECT_EQ(d.at(real_k), error.at("value")); EXPECT_PCRE_MATCH(re, error.at("error").getString()); EXPECT_EQ(dynamic(dynamic::object("nested", dynamic::object( err_k, dynamic::object("value", d.at(real_k))("error", error.at("error")) ))), errors); }
TEST(Dynamic, At) { const dynamic cd = dynamic::object("key1", make_long_string()); dynamic dd = dynamic::object("key1", make_long_string()); dynamic md = dynamic::object("key1", make_long_string()); dynamic ds(make_long_string()); EXPECT_EQ(ds, cd.at("key1")); EXPECT_EQ(ds, cd.at("key1")); dd.at("key1").getString() += " hello"; EXPECT_EQ(dynamic(make_long_string() + " hello"), dd.at("key1")); EXPECT_EQ(dynamic(make_long_string() + " hello"), dd.at("key1")); EXPECT_EQ(ds, std::move(md).at("key1")); EXPECT_NE(ds, md.at("key1")); }
TEST(Dynamic, At) { const dynamic cd = dynamic::object("key1", make_long_string()); dynamic dd = dynamic::object("key1", make_long_string()); dynamic md = dynamic::object("key1", make_long_string()); dynamic ds(make_long_string()); EXPECT_EQ(ds, cd.at("key1")); EXPECT_EQ(ds, cd.at("key1")); dd.at("key1").getString() += " hello"; EXPECT_EQ(dynamic(make_long_string() + " hello"), dd.at("key1")); EXPECT_EQ(dynamic(make_long_string() + " hello"), dd.at("key1")); EXPECT_EQ(ds, std::move(md).at("key1")); // move available, but not performed EXPECT_EQ(ds, md.at("key1")); dynamic moved = std::move(md).at("key1"); // move performed EXPECT_EQ(ds, moved); EXPECT_NE(ds, md.at("key1")); }