Skip to content

Commit

Permalink
Merge 6ed9b02 into 9e0d70a
Browse files Browse the repository at this point in the history
  • Loading branch information
dota17 committed Nov 28, 2019
2 parents 9e0d70a + 6ed9b02 commit 7d53eb7
Showing 1 changed file with 169 additions and 41 deletions.
210 changes: 169 additions & 41 deletions src/test_lib_json/main.cpp
Expand Up @@ -2653,16 +2653,126 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithNoErrors) {
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseObject) {
Json::Reader reader;
Json::Value root;
{
bool ok = reader.parse("{\"property\"}", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 12\n Missing ':' after object "
"member name\n");
}
{
bool ok = reader.parse("{\"property\" : \"value\" ", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 23\n Missing ',' or '}' in object "
"declaration\n");
}
{
bool ok = reader.parse("{\"property\" : \"value\", ", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 24\n Missing '}' or object "
"member name\n");
}
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseArray) {
Json::Reader reader;
Json::Value root;
{
bool ok = reader.parse("[ \"value\" ", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 11\n Missing ',' or ']' in array "
"declaration\n");
}
{
bool ok = reader.parse("[ \"value1\" \"value2\" ] ", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 12\n Missing ',' or ']' in array "
"declaration\n");
}
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseString) {
Json::Reader reader;
Json::Value root;
{
bool ok = reader.parse("[ \"\\u8A2a\" ]", root);
JSONTEST_ASSERT(ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
}
{
bool ok = reader.parse("[ \"\\uD801\" ]", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 3\n"
" additional six characters expected to "
"parse unicode surrogate pair.\n"
"See Line 1, Column 10 for detail.\n");
}
{
bool ok = reader.parse("[ \"\\uD801\\d1234\" ]", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 3\n"
" expecting another \\u token to begin the "
"second half of a unicode surrogate pair\n"
"See Line 1, Column 12 for detail.\n");
}
{
bool ok = reader.parse("[ \"\\ua3t@\" ]", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 3\n"
" Bad unicode escape sequence in string: "
"hexadecimal digit expected.\n"
"See Line 1, Column 9 for detail.\n");
}
{
bool ok = reader.parse("[ \"\\ua3t\" ]", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(
reader.getFormattedErrorMessages() ==
"* Line 1, Column 3\n"
" Bad unicode escape sequence in string: four digits expected.\n"
"See Line 1, Column 6 for detail.\n");
}
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseComment) {
Json::Reader reader;
Json::Value root;
bool ok = reader.parse("{ /*commentBeforeValue*/"
" \"property\" : \"value\" }"
"//commentAfterValue\n",
root);
JSONTEST_ASSERT(ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
{
bool ok = reader.parse("{ /*commentBeforeValue*/"
" \"property\" : \"value\" }"
"//commentAfterValue\n",
root);
JSONTEST_ASSERT(ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
}
{
bool ok = reader.parse("{ \"property\" : \"value\" } "
"//trailing\n//comment\n",
root);
JSONTEST_ASSERT(ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
}
{
bool ok = reader.parse(" true //comment1\n//comment2\r"
"//comment3\r\n",
root);
JSONTEST_ASSERT(ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
}
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, streamParseWithNoErrors) {
Expand Down Expand Up @@ -2706,21 +2816,60 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithNoErrorsTestingOffsets) {
JSONTEST_ASSERT(root.getOffsetLimit() == 115);
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithOneError) {
JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithOneErrorTestingOffsets) {
Json::Reader reader;
Json::Value root;
bool ok = reader.parse("{ \"property\" :: \"value\" }", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 15\n Syntax error: value, object or array "
"expected.\n");
std::vector<Json::Reader::StructuredError> errors =
reader.getStructuredErrors();
JSONTEST_ASSERT(errors.size() == 1);
JSONTEST_ASSERT(errors.at(0).offset_start == 14);
JSONTEST_ASSERT(errors.at(0).offset_limit == 15);
JSONTEST_ASSERT(errors.at(0).message ==
"Syntax error: value, object or array expected.");
{
bool ok = reader.parse("{ \"property\" :: \"value\" }", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(
reader.getFormattedErrorMessages() ==
"* Line 1, Column 15\n Syntax error: value, object or array "
"expected.\n");
std::vector<Json::Reader::StructuredError> errors =
reader.getStructuredErrors();
JSONTEST_ASSERT(errors.size() == 1);
JSONTEST_ASSERT(errors.at(0).offset_start == 14);
JSONTEST_ASSERT(errors.at(0).offset_limit == 15);
JSONTEST_ASSERT(errors.at(0).message ==
"Syntax error: value, object or array expected.");
}
{
bool ok = reader.parse("s", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(
reader.getFormattedErrorMessages() ==
"* Line 1, Column 1\n Syntax error: value, object or array "
"expected.\n");
std::vector<Json::Reader::StructuredError> errors =
reader.getStructuredErrors();
JSONTEST_ASSERT(errors.size() == 1);
JSONTEST_ASSERT(errors.at(0).offset_start == 0);
JSONTEST_ASSERT(errors.at(0).offset_limit == 1);
JSONTEST_ASSERT(errors.at(0).message ==
"Syntax error: value, object or array expected.");
}
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseSpecialFloat) {
Json::Reader reader;
Json::Value root;
{
bool ok = reader.parse("{ \"a\" : Infi }", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(
reader.getFormattedErrorMessages() ==
"* Line 1, Column 9\n Syntax error: value, object or array "
"expected.\n");
}
{
bool ok = reader.parse("{ \"a\" : Infiniaa }", root);
JSONTEST_ASSERT(!ok);
JSONTEST_ASSERT(
reader.getFormattedErrorMessages() ==
"* Line 1, Column 9\n Syntax error: value, object or array "
"expected.\n");
}
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, strictModeParseNumber) {
Expand All @@ -2733,14 +2882,6 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, strictModeParseNumber) {
"* Line 1, Column 1\n"
" A valid JSON document must be either an array or"
" an object value.\n");
std::vector<Json::Reader::StructuredError> errors =
reader.getStructuredErrors();
JSONTEST_ASSERT(errors.size() == 1);
JSONTEST_ASSERT(errors.at(0).offset_start == 0);
JSONTEST_ASSERT(errors.at(0).offset_limit == 3);
JSONTEST_ASSERT(errors.at(0).message ==
"A valid JSON document must be either an array or"
" an object value.");
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseChineseWithOneError) {
Expand All @@ -2751,13 +2892,6 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, parseChineseWithOneError) {
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 19\n Syntax error: value, object or array "
"expected.\n");
std::vector<Json::Reader::StructuredError> errors =
reader.getStructuredErrors();
JSONTEST_ASSERT(errors.size() == 1);
JSONTEST_ASSERT(errors.at(0).offset_start == 18);
JSONTEST_ASSERT(errors.at(0).offset_limit == 19);
JSONTEST_ASSERT(errors.at(0).message ==
"Syntax error: value, object or array expected.");
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithDetailError) {
Expand All @@ -2768,12 +2902,6 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithDetailError) {
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
"* Line 1, Column 16\n Bad escape sequence in string\nSee "
"Line 1, Column 20 for detail.\n");
std::vector<Json::Reader::StructuredError> errors =
reader.getStructuredErrors();
JSONTEST_ASSERT(errors.size() == 1);
JSONTEST_ASSERT(errors.at(0).offset_start == 15);
JSONTEST_ASSERT(errors.at(0).offset_limit == 23);
JSONTEST_ASSERT(errors.at(0).message == "Bad escape sequence in string");
}

JSONTEST_FIXTURE_LOCAL(ReaderTest, pushErrorTest) {
Expand Down

0 comments on commit 7d53eb7

Please sign in to comment.