@@ -1224,12 +1224,14 @@ void JSONTest::testPrintHandler()
12241224void JSONTest::testStringify ()
12251225{
12261226 Object jObj (false );
1227- jObj.set (" foo" , 0 );
1228- jObj.set (" bar" , 0 );
1227+ jObj.set (" foo\\ " , 0 );
1228+ jObj.set (" bar/ " , 0 );
12291229 jObj.set (" baz" , 0 );
1230+ jObj.set (" q\" uote\" d" , 0 );
12301231 std::stringstream ss;
12311232 jObj.stringify (ss);
1232- assert (ss.str () == " {\" bar\" :0,\" baz\" :0,\" foo\" :0}" );
1233+
1234+ assert (ss.str () == " {\" bar/\" :0,\" baz\" :0,\" foo\\\\\" :0,\" q\\\" uote\\\" d\" :0}" );
12331235
12341236 std::string json = " { \" Simpsons\" : { \" husband\" : { \" name\" : \" Homer\" , \" age\" : 38 }, \" wife\" : { \" name\" : \" Marge\" , \" age\" : 36 }, "
12351237 " \" children\" : [ \" Bart\" , \" Lisa\" , \" Maggie\" ], "
@@ -1269,6 +1271,7 @@ void JSONTest::testStringify()
12691271 " \" wife\" :{"
12701272 " \" age\" :36,\" name\" :\" Marge\" "
12711273 " }}}" ;
1274+
12721275 assert (ostr.str () == str);
12731276
12741277 ostr.str (" " );
@@ -1653,16 +1656,9 @@ void JSONTest::testUnicode()
16531656 Parser parser;
16541657
16551658 Var result;
1656- try
1657- {
1658- parser.parse (json);
1659- result = parser.asVar ();
1660- }
1661- catch (JSONException& jsone)
1662- {
1663- std::cout << jsone.message () << std::endl;
1664- assert (false );
1665- }
1659+ parser.parse (json);
1660+ result = parser.asVar ();
1661+
16661662 assert (result.type () == typeid (Object::Ptr));
16671663
16681664 Object::Ptr object = result.extract <Object::Ptr>();
@@ -1675,6 +1671,54 @@ void JSONTest::testUnicode()
16751671 converter.convert (text, original);
16761672
16771673 assert (test.convert <std::string>() == original);
1674+
1675+ parser.reset ();
1676+ std::ostringstream os;
1677+ os << ' [' << (char ) 0x92 << ' ]' ;
1678+ try
1679+ {
1680+ parser.parse (os.str ());
1681+ fail (" Invalid Unicode sequence, must fail." );
1682+ }
1683+ catch (JSONException&) {}
1684+
1685+ parser.reset ();
1686+ os.str (" " );
1687+ os << ' [' << (char )0xC2 << (char )0x92 << ' ]' ;
1688+ result = parser.parse (os.str ());
1689+ assert (result.type () == typeid (Poco::JSON::Array::Ptr));
1690+
1691+ parser.reset ();
1692+ os.str (" " );
1693+ os << ' [' << (char )0xAC << ' ]' ;
1694+ try
1695+ {
1696+ parser.parse (os.str ());
1697+ fail (" Invalid Unicode sequence, must fail." );
1698+ }
1699+ catch (JSONException&) {}
1700+
1701+ parser.reset ();
1702+ os.str (" " );
1703+ os << ' [' << (char )0xE2 << (char )0x82 << (char )0xAC << ' ]' ;
1704+ result = parser.parse (os.str ());
1705+ assert (result.type () == typeid (Poco::JSON::Array::Ptr));
1706+
1707+ parser.reset ();
1708+ os.str (" " );
1709+ os << ' [' << (char )0xA2 << ' ]' ;
1710+ try
1711+ {
1712+ parser.parse (os.str ());
1713+ fail (" Invalid Unicode sequence, must fail." );
1714+ }
1715+ catch (JSONException&){}
1716+
1717+ parser.reset ();
1718+ os.str (" " );
1719+ os << ' [' << (char )0xF0 << (char )0xA4 << (char )0xAD << (char )0xAD << ' ]' ;
1720+ result = parser.parse (os.str ());
1721+ assert (result.type () == typeid (Poco::JSON::Array::Ptr));
16781722}
16791723
16801724
0 commit comments