Skip to content

Commit 2693842

Browse files
committed
update testcases to improve coverage
1 parent bdacfd7 commit 2693842

File tree

1 file changed

+129
-12
lines changed

1 file changed

+129
-12
lines changed

src/test_lib_json/main.cpp

+129-12
Original file line numberDiff line numberDiff line change
@@ -2492,12 +2492,35 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithNoErrors) {
24922492
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
24932493
}
24942494

2495+
JSONTEST_FIXTURE_LOCAL(ReaderTest, parseComment) {
2496+
Json::Reader reader;
2497+
Json::Value root;
2498+
bool ok = reader.parse("{ /*commentBeforeValue*/"
2499+
" \"property\" : \"value\" }"
2500+
"//commentAfterValue\n",
2501+
root);
2502+
JSONTEST_ASSERT(ok);
2503+
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
2504+
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
2505+
}
2506+
2507+
JSONTEST_FIXTURE_LOCAL(ReaderTest, streamParseWithNoErrors) {
2508+
Json::Reader reader;
2509+
std::string styled = "{ \"property\" : \"value\" }";
2510+
std::istringstream iss(styled);
2511+
Json::Value root;
2512+
bool ok = reader.parse(iss, root);
2513+
JSONTEST_ASSERT(ok);
2514+
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
2515+
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
2516+
}
2517+
24952518
JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithNoErrorsTestingOffsets) {
24962519
Json::Reader reader;
24972520
Json::Value root;
24982521
bool ok = reader.parse("{ \"property\" : [\"value\", \"value2\"], \"obj\" : "
2499-
"{ \"nested\" : 123, \"bool\" : true}, \"null\" : "
2500-
"null, \"false\" : false }",
2522+
"{ \"nested\" : -6.2e+15, \"bool\" : true}, \"null\" :"
2523+
" null, \"false\" : false }",
25012524
root);
25022525
JSONTEST_ASSERT(ok);
25032526
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
@@ -2509,17 +2532,17 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithNoErrorsTestingOffsets) {
25092532
JSONTEST_ASSERT(root["property"][1].getOffsetStart() == 25);
25102533
JSONTEST_ASSERT(root["property"][1].getOffsetLimit() == 33);
25112534
JSONTEST_ASSERT(root["obj"].getOffsetStart() == 44);
2512-
JSONTEST_ASSERT(root["obj"].getOffsetLimit() == 76);
2535+
JSONTEST_ASSERT(root["obj"].getOffsetLimit() == 81);
25132536
JSONTEST_ASSERT(root["obj"]["nested"].getOffsetStart() == 57);
2514-
JSONTEST_ASSERT(root["obj"]["nested"].getOffsetLimit() == 60);
2515-
JSONTEST_ASSERT(root["obj"]["bool"].getOffsetStart() == 71);
2516-
JSONTEST_ASSERT(root["obj"]["bool"].getOffsetLimit() == 75);
2517-
JSONTEST_ASSERT(root["null"].getOffsetStart() == 87);
2518-
JSONTEST_ASSERT(root["null"].getOffsetLimit() == 91);
2519-
JSONTEST_ASSERT(root["false"].getOffsetStart() == 103);
2520-
JSONTEST_ASSERT(root["false"].getOffsetLimit() == 108);
2537+
JSONTEST_ASSERT(root["obj"]["nested"].getOffsetLimit() == 65);
2538+
JSONTEST_ASSERT(root["obj"]["bool"].getOffsetStart() == 76);
2539+
JSONTEST_ASSERT(root["obj"]["bool"].getOffsetLimit() == 80);
2540+
JSONTEST_ASSERT(root["null"].getOffsetStart() == 92);
2541+
JSONTEST_ASSERT(root["null"].getOffsetLimit() == 96);
2542+
JSONTEST_ASSERT(root["false"].getOffsetStart() == 108);
2543+
JSONTEST_ASSERT(root["false"].getOffsetLimit() == 113);
25212544
JSONTEST_ASSERT(root.getOffsetStart() == 0);
2522-
JSONTEST_ASSERT(root.getOffsetLimit() == 110);
2545+
JSONTEST_ASSERT(root.getOffsetLimit() == 115);
25232546
}
25242547

25252548
JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithOneError) {
@@ -2539,6 +2562,26 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, parseWithOneError) {
25392562
"Syntax error: value, object or array expected.");
25402563
}
25412564

2565+
JSONTEST_FIXTURE_LOCAL(ReaderTest, strictModeParseNumber) {
2566+
Json::Features feature;
2567+
Json::Reader reader(feature.strictMode());
2568+
Json::Value root;
2569+
bool ok = reader.parse("123", root);
2570+
JSONTEST_ASSERT(!ok);
2571+
JSONTEST_ASSERT(reader.getFormattedErrorMessages() ==
2572+
"* Line 1, Column 1\n"
2573+
" A valid JSON document must be either an array or"
2574+
" an object value.\n");
2575+
std::vector<Json::Reader::StructuredError> errors =
2576+
reader.getStructuredErrors();
2577+
JSONTEST_ASSERT(errors.size() == 1);
2578+
JSONTEST_ASSERT(errors.at(0).offset_start == 0);
2579+
JSONTEST_ASSERT(errors.at(0).offset_limit == 3);
2580+
JSONTEST_ASSERT(errors.at(0).message ==
2581+
"A valid JSON document must be either an array or"
2582+
" an object value.");
2583+
}
2584+
25422585
JSONTEST_FIXTURE_LOCAL(ReaderTest, parseChineseWithOneError) {
25432586
Json::Reader reader;
25442587
Json::Value root;
@@ -2592,7 +2635,7 @@ JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithNoErrorsTestingOffsets) {
25922635
Json::String errs;
25932636
Json::Value root;
25942637
char const doc[] = "{ \"property\" : [\"value\", \"value2\"], \"obj\" : "
2595-
"{ \"nested\" : 123, \"bool\" : true}, \"null\" : "
2638+
"{ \"nested\" : -6.2e+15, \"bool\" : true}, \"null\" : "
25962639
"null, \"false\" : false }";
25972640
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
25982641
JSONTEST_ASSERT(ok);
@@ -2666,6 +2709,14 @@ JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseWithStackLimit) {
26662709
}
26672710
}
26682711

2712+
JSONTEST_FIXTURE_LOCAL(CharReaderTest, testOperator) {
2713+
const std::string styled = "{ \"property\" : \"value\" }";
2714+
std::istringstream iss(styled);
2715+
Json::Value root;
2716+
iss >> root;
2717+
JSONTEST_ASSERT_EQUAL("value", root["property"]);
2718+
}
2719+
26692720
struct CharReaderStrictModeTest : JsonTest::TestCase {};
26702721

26712722
JSONTEST_FIXTURE_LOCAL(CharReaderStrictModeTest, dupKeys) {
@@ -2921,6 +2972,25 @@ JSONTEST_FIXTURE_LOCAL(CharReaderAllowDropNullTest, issue178) {
29212972
delete reader;
29222973
}
29232974

2975+
struct CharReaderAllowNumericKeysTest : JsonTest::TestCase {};
2976+
2977+
JSONTEST_FIXTURE_LOCAL(CharReaderAllowNumericKeysTest, allowNumericKeys) {
2978+
Json::CharReaderBuilder b;
2979+
b.settings_["allowNumericKeys"] = true;
2980+
Json::Value root;
2981+
Json::String errs;
2982+
Json::CharReader* reader(b.newCharReader());
2983+
char const doc[] = "{15:true,-16:true,12.01:true}";
2984+
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
2985+
JSONTEST_ASSERT(ok);
2986+
JSONTEST_ASSERT_STRING_EQUAL("", errs);
2987+
JSONTEST_ASSERT_EQUAL(3u, root.size());
2988+
JSONTEST_ASSERT_EQUAL(true, root.get("15", false));
2989+
JSONTEST_ASSERT_EQUAL(true, root.get("-16", false));
2990+
JSONTEST_ASSERT_EQUAL(true, root.get("12.01", false));
2991+
delete reader;
2992+
}
2993+
29242994
struct CharReaderAllowSingleQuotesTest : JsonTest::TestCase {};
29252995

29262996
JSONTEST_FIXTURE_LOCAL(CharReaderAllowSingleQuotesTest, issue182) {
@@ -3053,6 +3123,53 @@ JSONTEST_FIXTURE_LOCAL(CharReaderAllowSpecialFloatsTest, issue209) {
30533123
delete reader;
30543124
}
30553125

3126+
struct EscapeSequenceTest : JsonTest::TestCase {};
3127+
3128+
JSONTEST_FIXTURE_LOCAL(EscapeSequenceTest, readerParseEscapeSequence) {
3129+
Json::Reader reader;
3130+
Json::Value root;
3131+
bool ok = reader.parse("[\"\\\"\",\"\\/\",\"\\\\\",\"\\b\","
3132+
"\"\\f\",\"\\n\",\"\\r\",\"\\t\","
3133+
"\"\\u0278\",\"\\ud852\\udf62\"]\n",
3134+
root);
3135+
JSONTEST_ASSERT(ok);
3136+
JSONTEST_ASSERT(reader.getFormattedErrorMessages().empty());
3137+
JSONTEST_ASSERT(reader.getStructuredErrors().empty());
3138+
}
3139+
3140+
JSONTEST_FIXTURE_LOCAL(EscapeSequenceTest, charReaderParseEscapeSequence) {
3141+
Json::CharReaderBuilder b;
3142+
Json::CharReader* reader(b.newCharReader());
3143+
Json::Value root;
3144+
Json::String errs;
3145+
char const doc[] = "[\"\\\"\",\"\\/\",\"\\\\\",\"\\b\","
3146+
"\"\\f\",\"\\n\",\"\\r\",\"\\t\","
3147+
"\"\\u0278\",\"\\ud852\\udf62\"]";
3148+
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
3149+
JSONTEST_ASSERT(ok);
3150+
JSONTEST_ASSERT(errs.empty());
3151+
delete reader;
3152+
}
3153+
3154+
JSONTEST_FIXTURE_LOCAL(EscapeSequenceTest, writeEscapeSequence) {
3155+
Json::FastWriter writer;
3156+
const Json::String expected("[\"\\\"\",\"\\\\\",\"\\b\","
3157+
"\"\\f\",\"\\n\",\"\\r\",\"\\t\","
3158+
"\"\\u0278\",\"\\ud852\\udf62\"]\n");
3159+
Json::Value root;
3160+
root[0] = "\"";
3161+
root[1] = "\\";
3162+
root[2] = "\b";
3163+
root[3] = "\f";
3164+
root[4] = "\n";
3165+
root[5] = "\r";
3166+
root[6] = "\t";
3167+
root[7] = "ɸ";
3168+
root[8] = "𤭢";
3169+
const Json::String result = writer.write(root);
3170+
JSONTEST_ASSERT_STRING_EQUAL(expected, result);
3171+
}
3172+
30563173
struct BuilderTest : JsonTest::TestCase {};
30573174

30583175
JSONTEST_FIXTURE_LOCAL(BuilderTest, settings) {

0 commit comments

Comments
 (0)