|
@@ -21,7 +21,9 @@ struct TestObject {
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
bool operator==(TestObject const & lhs, TestObject const & rhs) {
|
|
bool operator==(TestObject const & lhs, TestObject const & rhs) {
|
|
|
- return lhs.count == rhs.count && lhs.average == rhs.average && lhs.data == rhs.data;
|
|
|
|
|
|
|
+ return lhs.count == rhs.count
|
|
|
|
|
+ && lhs.average == rhs.average
|
|
|
|
|
+ && lhs.data == rhs.data;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
class JsonBinderObjectTest : public ::testing::Test {
|
|
class JsonBinderObjectTest : public ::testing::Test {
|
|
@@ -36,7 +38,8 @@ protected:
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, ParsesSuccessfully) {
|
|
TEST_F(JsonBinderObjectTest, ParsesSuccessfully) {
|
|
|
- char data[] = "{ \"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }}";
|
|
|
|
|
|
|
+ char data[] = "{ \"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }}";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
TestObject expected = { 10, 1.0, {{"key1", {1, 2}},{"key2", {3, 4}}} };
|
|
TestObject expected = { 10, 1.0, {{"key1", {1, 2}},{"key2", {3, 4}}} };
|
|
|
EXPECT_NO_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all));
|
|
EXPECT_NO_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all));
|
|
@@ -44,7 +47,9 @@ TEST_F(JsonBinderObjectTest, ParsesSuccessfully) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, IgnoresUnknownKeysByDefault) {
|
|
TEST_F(JsonBinderObjectTest, IgnoresUnknownKeysByDefault) {
|
|
|
- char data[] = "{ \"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, \"lemon\":true}";
|
|
|
|
|
|
|
+ char data[] = "{ \"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, "
|
|
|
|
|
+ "\"lemon\":true}";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
TestObject expected = { 10, 1.0, {{"key1", {1, 2}},{"key2", {3, 4}}} };
|
|
TestObject expected = { 10, 1.0, {{"key1", {1, 2}},{"key2", {3, 4}}} };
|
|
|
EXPECT_NO_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all));
|
|
EXPECT_NO_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all));
|
|
@@ -52,7 +57,9 @@ TEST_F(JsonBinderObjectTest, IgnoresUnknownKeysByDefault) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnUnknownKeyWithSetting) {
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnUnknownKeyWithSetting) {
|
|
|
- char data[] = "{ \"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, \"lemon\":true}";
|
|
|
|
|
|
|
+ char data[] = "{ \"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, "
|
|
|
|
|
+ "\"lemon\":true}";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data,
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data,
|
|
|
disable_unknown_keys),
|
|
disable_unknown_keys),
|
|
@@ -76,7 +83,8 @@ TEST_F(JsonBinderObjectTest, ThrowsOnMissingExpectedKeyWithSetting) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingStartToken) {
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingStartToken) {
|
|
|
- char data[] = "\"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] } }";
|
|
|
|
|
|
|
+ char data[] = "\"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] } }";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
|
json::malformed_json_exception);
|
|
json::malformed_json_exception);
|
|
@@ -90,28 +98,35 @@ TEST_F(JsonBinderObjectTest, ThrowsIfMissingValueForKey) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingEndToken) {
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingEndToken) {
|
|
|
- char data[] = "{ \"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }";
|
|
|
|
|
|
|
+ char data[] = "{ \"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
|
json::unterminated_json_exception);
|
|
json::unterminated_json_exception);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingValueForKeyEvenForUnknownKey) {
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingValueForKeyEvenForUnknownKey) {
|
|
|
- char data[] = "{ \"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, \"lemon\":{\"key\": } }";
|
|
|
|
|
|
|
+ char data[] = "{ \"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, "
|
|
|
|
|
+ "\"lemon\":{\"key\": } }";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
|
json::malformed_json_exception);
|
|
json::malformed_json_exception);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingEndTokenEvenForUnknownKey) {
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingEndTokenEvenForUnknownKey) {
|
|
|
- char data[] = "{ \"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, \"lemon\":[1.0 }";
|
|
|
|
|
|
|
+ char data[] = "{ \"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, "
|
|
|
|
|
+ "\"lemon\":[1.0 }";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
|
json::unterminated_json_exception);
|
|
json::unterminated_json_exception);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingEndTokenEvenForUnknownKey2) {
|
|
TEST_F(JsonBinderObjectTest, ThrowsOnMissingEndTokenEvenForUnknownKey2) {
|
|
|
- char data[] = "{ \"count\":10, \"average\":1.0, \"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, \"lemon\":{\"key\":false }";
|
|
|
|
|
|
|
+ char data[] = "{ \"count\":10, \"average\":1.0, "
|
|
|
|
|
+ "\"data\":{ \"key1\":[1, 2], \"key2\":[3, 4] }, "
|
|
|
|
|
+ "\"lemon\":{\"key\":false }";
|
|
|
TestObject out = { 0, 0.0, {} };
|
|
TestObject out = { 0, 0.0, {} };
|
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
EXPECT_THROW(parse(json::binder::bind(out, GetBinder()), data, allow_all),
|
|
|
json::unterminated_json_exception);
|
|
json::unterminated_json_exception);
|
|
@@ -125,7 +140,8 @@ std::string ify(double value) {
|
|
|
|
|
|
|
|
TEST_F(JsonBinderObjectTest, WritesBackOriginalObject) {
|
|
TEST_F(JsonBinderObjectTest, WritesBackOriginalObject) {
|
|
|
std::string const dbl = ify(1.0);
|
|
std::string const dbl = ify(1.0);
|
|
|
- std::string const expected = "{\"average\":"+dbl+",\"count\":10,\"data\":{\"key1\":[1,2],\"key2\":[3,4]}}";
|
|
|
|
|
|
|
+ std::string const expected = "{\"average\":1.000000,\"count\":10,"
|
|
|
|
|
+ "\"data\":{\"key1\":[1,2],\"key2\":[3,4]}}";
|
|
|
std::stringstream ss;
|
|
std::stringstream ss;
|
|
|
TestObject const in = { 10, 1.0, { { "key1", {1, 2} }, { "key2", {3, 4} } } };
|
|
TestObject const in = { 10, 1.0, { { "key1", {1, 2} }, { "key2", {3, 4} } } };
|
|
|
EXPECT_NO_THROW(write(json::binder::bind(in, GetBinder()), ss));
|
|
EXPECT_NO_THROW(write(json::binder::bind(in, GetBinder()), ss));
|