@@ -1862,6 +1862,158 @@ JSONTEST_FIXTURE(CharReaderFailIfExtraTest, commentAfterBool) {
1862
1862
delete reader;
1863
1863
}
1864
1864
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
+
1865
2017
struct IteratorTest : JsonTest::TestCase {};
1866
2018
1867
2019
JSONTEST_FIXTURE (IteratorTest, distance) {
@@ -1925,6 +2077,8 @@ int main(int argc, const char* argv[]) {
1925
2077
JSONTEST_REGISTER_FIXTURE (runner, CharReaderFailIfExtraTest, commentAfterArray);
1926
2078
JSONTEST_REGISTER_FIXTURE (runner, CharReaderFailIfExtraTest, commentAfterBool);
1927
2079
2080
+ JSONTEST_REGISTER_FIXTURE (runner, CharReaderAllowDropNullTest, issue178);
2081
+
1928
2082
JSONTEST_REGISTER_FIXTURE (runner, IteratorTest, distance);
1929
2083
1930
2084
return runner.runCommandLine (argc, argv);
0 commit comments