@@ -1862,6 +1862,158 @@ JSONTEST_FIXTURE(CharReaderFailIfExtraTest, commentAfterBool) {
18621862 delete reader;
18631863}
18641864
1865+ struct CharReaderAllowDropNullTest : JsonTest::TestCase {};
1866+
1867+ JSONTEST_FIXTURE (CharReaderAllowDropNullTest, issue178) {
1868+ Json::CharReaderBuilder b;
1869+ b.settings_ [" allowDroppedNullPlaceholders" ] = true ;
1870+ Json::Value root;
1871+ std::string errs;
1872+ Json::CharReader* reader (b.newCharReader ());
1873+ {
1874+ char const doc[] = " {\" a\" :,\" b\" :true}" ;
1875+ bool ok = reader->parse (
1876+ doc, doc + std::strlen (doc),
1877+ &root, &errs);
1878+ JSONTEST_ASSERT (ok);
1879+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1880+ JSONTEST_ASSERT_EQUAL (2u , root.size ());
1881+ JSONTEST_ASSERT_EQUAL (Json::nullValue, root.get (" a" , true ));
1882+ }
1883+ {
1884+ char const doc[] = " {\" a\" :}" ;
1885+ bool ok = reader->parse (
1886+ doc, doc + std::strlen (doc),
1887+ &root, &errs);
1888+ JSONTEST_ASSERT (ok);
1889+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1890+ JSONTEST_ASSERT_EQUAL (1u , root.size ());
1891+ JSONTEST_ASSERT_EQUAL (Json::nullValue, root.get (" a" , true ));
1892+ }
1893+ {
1894+ char const doc[] = " []" ;
1895+ bool ok = reader->parse (
1896+ doc, doc + std::strlen (doc),
1897+ &root, &errs);
1898+ JSONTEST_ASSERT (ok);
1899+ JSONTEST_ASSERT (errs == " " );
1900+ JSONTEST_ASSERT_EQUAL (0u , root.size ());
1901+ JSONTEST_ASSERT_EQUAL (Json::arrayValue, root);
1902+ }
1903+ {
1904+ char const doc[] = " [null]" ;
1905+ bool ok = reader->parse (
1906+ doc, doc + std::strlen (doc),
1907+ &root, &errs);
1908+ JSONTEST_ASSERT (ok);
1909+ JSONTEST_ASSERT (errs == " " );
1910+ JSONTEST_ASSERT_EQUAL (1u , root.size ());
1911+ }
1912+ {
1913+ char const doc[] = " [,]" ;
1914+ bool ok = reader->parse (
1915+ doc, doc + std::strlen (doc),
1916+ &root, &errs);
1917+ JSONTEST_ASSERT (ok);
1918+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1919+ JSONTEST_ASSERT_EQUAL (2u , root.size ());
1920+ }
1921+ {
1922+ char const doc[] = " [,,,]" ;
1923+ bool ok = reader->parse (
1924+ doc, doc + std::strlen (doc),
1925+ &root, &errs);
1926+ JSONTEST_ASSERT (ok);
1927+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1928+ JSONTEST_ASSERT_EQUAL (4u , root.size ());
1929+ }
1930+ {
1931+ char const doc[] = " [null,]" ;
1932+ bool ok = reader->parse (
1933+ doc, doc + std::strlen (doc),
1934+ &root, &errs);
1935+ JSONTEST_ASSERT (ok);
1936+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1937+ JSONTEST_ASSERT_EQUAL (2u , root.size ());
1938+ }
1939+ {
1940+ char const doc[] = " [,null]" ;
1941+ bool ok = reader->parse (
1942+ doc, doc + std::strlen (doc),
1943+ &root, &errs);
1944+ JSONTEST_ASSERT (ok);
1945+ JSONTEST_ASSERT (errs == " " );
1946+ JSONTEST_ASSERT_EQUAL (2u , root.size ());
1947+ }
1948+ {
1949+ char const doc[] = " [,,]" ;
1950+ bool ok = reader->parse (
1951+ doc, doc + std::strlen (doc),
1952+ &root, &errs);
1953+ JSONTEST_ASSERT (ok);
1954+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1955+ JSONTEST_ASSERT_EQUAL (3u , root.size ());
1956+ }
1957+ {
1958+ char const doc[] = " [null,,]" ;
1959+ bool ok = reader->parse (
1960+ doc, doc + std::strlen (doc),
1961+ &root, &errs);
1962+ JSONTEST_ASSERT (ok);
1963+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1964+ JSONTEST_ASSERT_EQUAL (3u , root.size ());
1965+ }
1966+ {
1967+ char const doc[] = " [,null,]" ;
1968+ bool ok = reader->parse (
1969+ doc, doc + std::strlen (doc),
1970+ &root, &errs);
1971+ JSONTEST_ASSERT (ok);
1972+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1973+ JSONTEST_ASSERT_EQUAL (3u , root.size ());
1974+ }
1975+ {
1976+ char const doc[] = " [,,null]" ;
1977+ bool ok = reader->parse (
1978+ doc, doc + std::strlen (doc),
1979+ &root, &errs);
1980+ JSONTEST_ASSERT (ok);
1981+ JSONTEST_ASSERT (errs == " " );
1982+ JSONTEST_ASSERT_EQUAL (3u , root.size ());
1983+ }
1984+ {
1985+ char const doc[] = " [[],,,]" ;
1986+ bool ok = reader->parse (
1987+ doc, doc + std::strlen (doc),
1988+ &root, &errs);
1989+ JSONTEST_ASSERT (ok);
1990+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
1991+ JSONTEST_ASSERT_EQUAL (4u , root.size ());
1992+ JSONTEST_ASSERT_EQUAL (Json::arrayValue, root[0u ]);
1993+ }
1994+ {
1995+ char const doc[] = " [,[],,]" ;
1996+ bool ok = reader->parse (
1997+ doc, doc + std::strlen (doc),
1998+ &root, &errs);
1999+ JSONTEST_ASSERT (ok);
2000+ JSONTEST_ASSERT_STRING_EQUAL (" " , errs);
2001+ JSONTEST_ASSERT_EQUAL (4u , root.size ());
2002+ JSONTEST_ASSERT_EQUAL (Json::arrayValue, root[1u ]);
2003+ }
2004+ {
2005+ char const doc[] = " [,,,[]]" ;
2006+ bool ok = reader->parse (
2007+ doc, doc + std::strlen (doc),
2008+ &root, &errs);
2009+ JSONTEST_ASSERT (ok);
2010+ JSONTEST_ASSERT (errs == " " );
2011+ JSONTEST_ASSERT_EQUAL (4u , root.size ());
2012+ JSONTEST_ASSERT_EQUAL (Json::arrayValue, root[3u ]);
2013+ }
2014+ delete reader;
2015+ }
2016+
18652017struct IteratorTest : JsonTest::TestCase {};
18662018
18672019JSONTEST_FIXTURE (IteratorTest, distance) {
@@ -1925,6 +2077,8 @@ int main(int argc, const char* argv[]) {
19252077 JSONTEST_REGISTER_FIXTURE (runner, CharReaderFailIfExtraTest, commentAfterArray);
19262078 JSONTEST_REGISTER_FIXTURE (runner, CharReaderFailIfExtraTest, commentAfterBool);
19272079
2080+ JSONTEST_REGISTER_FIXTURE (runner, CharReaderAllowDropNullTest, issue178);
2081+
19282082 JSONTEST_REGISTER_FIXTURE (runner, IteratorTest, distance);
19292083
19302084 return runner.runCommandLine (argc, argv);
0 commit comments