@@ -192,12 +192,42 @@ void JSONTest::testNumberProperty()
192192 assert (value == 1969 );
193193}
194194
195+
196+ void JSONTest::testUnsignedNumberProperty ()
197+ {
198+ // 4294967295 == unsigned(-1)
199+ std::string json = " { \" test\" : 4294967295 }" ;
200+ Parser parser;
201+ Var result;
202+
203+ try
204+ {
205+ DefaultHandler handler;
206+ parser.setHandler (&handler);
207+ parser.parse (json);
208+ result = handler.result ();
209+ }
210+ catch (JSONException& jsone)
211+ {
212+ std::cout << jsone.message () << std::endl;
213+ assert (false );
214+ }
215+
216+ assert (result.type () == typeid (Object::Ptr));
217+
218+ Object::Ptr object = result.extract <Object::Ptr>();
219+ Var test = object->get (" test" );
220+ assert (test.isInteger ());
221+ unsigned value = test;
222+ assert (value == -1 );
223+ }
224+
195225#if defined(POCO_HAVE_INT64)
196226
197227
198228void JSONTest::testNumber64Property ()
199229{
200- std::string json = " { \" test\" : 5000000000000000 }" ;
230+ std::string json = " { \" test\" : - 5000000000000000 }" ;
201231 Parser parser;
202232 Var result;
203233
@@ -220,10 +250,39 @@ void JSONTest::testNumber64Property()
220250 Var test = object->get (" test" );
221251 assert (test.isInteger ());
222252 Poco::Int64 value = test;
223- assert (value == 5000000000000000 );
253+ assert (value == - 5000000000000000 );
224254}
225255
226256
257+ void JSONTest::testUnsignedNumber64Property ()
258+ {
259+ // 18446744073709551615 == UInt64(-1)
260+ std::string json = " { \" test\" : 18446744073709551615 }" ;
261+ Parser parser;
262+ Var result;
263+
264+ try
265+ {
266+ DefaultHandler handler;
267+ parser.setHandler (&handler);
268+ parser.parse (json);
269+ result = handler.result ();
270+ }
271+ catch (JSONException& jsone)
272+ {
273+ std::cout << jsone.message () << std::endl;
274+ assert (false );
275+ }
276+
277+ assert (result.type () == typeid (Object::Ptr));
278+
279+ Object::Ptr object = result.extract <Object::Ptr>();
280+ Var test = object->get (" test" );
281+ assert (test.isInteger ());
282+ Poco::UInt64 value = test;
283+ assert (value == -1 );
284+ }
285+
227286#endif
228287
229288
@@ -962,8 +1021,10 @@ CppUnit::Test* JSONTest::suite()
9621021 CppUnit_addTest (pSuite, JSONTest, testTrueProperty);
9631022 CppUnit_addTest (pSuite, JSONTest, testFalseProperty);
9641023 CppUnit_addTest (pSuite, JSONTest, testNumberProperty);
1024+ CppUnit_addTest (pSuite, JSONTest, testUnsignedNumberProperty);
9651025#if defined(POCO_HAVE_INT64)
9661026 CppUnit_addTest (pSuite, JSONTest, testNumber64Property);
1027+ CppUnit_addTest (pSuite, JSONTest, testUnsignedNumber64Property);
9671028#endif
9681029 CppUnit_addTest (pSuite, JSONTest, testStringProperty);
9691030 CppUnit_addTest (pSuite, JSONTest, testEmptyObject);
0 commit comments