Skip to content

Commit cada3b9

Browse files
committed
test for repeated key in strictMode
https://sourceforge.net/p/jsoncpp/bugs/22/
1 parent ff61752 commit cada3b9

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

src/test_lib_json/main.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,6 +1884,29 @@ JSONTEST_FIXTURE(CharReaderTest, parseWithStackLimit) {
18841884
}
18851885
}
18861886

1887+
struct CharReaderStrictModeTest : JsonTest::TestCase {};
1888+
1889+
JSONTEST_FIXTURE(CharReaderStrictModeTest, dupKeys) {
1890+
Json::CharReaderBuilder b;
1891+
Json::Value root;
1892+
char const doc[] =
1893+
"{ \"property\" : \"value\", \"key\" : \"val1\", \"key\" : \"val2\" }";
1894+
{
1895+
b.strictMode(&b.settings_);
1896+
Json::CharReader* reader(b.newCharReader());
1897+
std::string errs;
1898+
bool ok = reader->parse(
1899+
doc, doc + std::strlen(doc),
1900+
&root, &errs);
1901+
JSONTEST_ASSERT(!ok);
1902+
JSONTEST_ASSERT_STRING_EQUAL(
1903+
"* Line 1, Column 41\n"
1904+
" Duplicate key: 'key'\n",
1905+
errs);
1906+
JSONTEST_ASSERT_EQUAL("val1", root["key"]); // so far
1907+
delete reader;
1908+
}
1909+
}
18871910
struct CharReaderFailIfExtraTest : JsonTest::TestCase {};
18881911

18891912
JSONTEST_FIXTURE(CharReaderFailIfExtraTest, issue164) {
@@ -2305,6 +2328,8 @@ int main(int argc, const char* argv[]) {
23052328
JSONTEST_REGISTER_FIXTURE(runner, CharReaderTest, parseWithDetailError);
23062329
JSONTEST_REGISTER_FIXTURE(runner, CharReaderTest, parseWithStackLimit);
23072330

2331+
JSONTEST_REGISTER_FIXTURE(runner, CharReaderStrictModeTest, dupKeys);
2332+
23082333
JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, issue164);
23092334
JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, issue107);
23102335
JSONTEST_REGISTER_FIXTURE(runner, CharReaderFailIfExtraTest, commentAfterObject);

0 commit comments

Comments
 (0)