void JSONTest::testDoubleElement() { std::string json = "[ 123.45 ]"; Parser parser; Var result; try { DefaultHandler handler; parser.setHandler(&handler); parser.parse(json); result = handler.result(); } catch(JSONException& jsone) { std::cout << jsone.message() << std::endl; assert(false); } assert(result.type() == typeid(Array::Ptr)); Array::Ptr array = result.extract<Array::Ptr>(); Var test = array->get(0); assert(test.isNumeric()); double value = test; assert(value == 123.45); }
void JSONTest::testDouble3Property() { std::string json = "{ \"test\" : 12e-34 }"; Parser parser; Var result; try { DefaultHandler handler; parser.setHandler(&handler); parser.parse(json); result = handler.result(); } catch(JSONException& jsone) { std::cout << jsone.message() << std::endl; assert(false); } assert(result.type() == typeid(Object::Ptr)); Object::Ptr object = result.extract<Object::Ptr>(); Var test = object->get("test"); assert(test.isNumeric()); double value = test; assert(value == 12e-34); }
void Stringifier::stringify(const Var& any, std::ostream& out, unsigned int indent, int step, int options) { bool escapeUnicode = ((options & Poco::JSON_ESCAPE_UNICODE) != 0); if (step == -1) step = indent; if (any.type() == typeid(Object)) { Object& o = const_cast<Object&>(any.extract<Object>()); o.setEscapeUnicode(escapeUnicode); o.stringify(out, indent == 0 ? 0 : indent, step); } else if (any.type() == typeid(Array)) { Array& a = const_cast<Array&>(any.extract<Array>()); a.setEscapeUnicode(escapeUnicode); a.stringify(out, indent == 0 ? 0 : indent, step); } else if (any.type() == typeid(Object::Ptr)) { Object::Ptr& o = const_cast<Object::Ptr&>(any.extract<Object::Ptr>()); o->setEscapeUnicode(escapeUnicode); o->stringify(out, indent == 0 ? 0 : indent, step); } else if (any.type() == typeid(Array::Ptr)) { Array::Ptr& a = const_cast<Array::Ptr&>(any.extract<Array::Ptr>()); a->setEscapeUnicode(escapeUnicode); a->stringify(out, indent == 0 ? 0 : indent, step); } else if (any.isEmpty()) { out << "null"; } else if (any.isNumeric() || any.isBoolean()) { std::string value = any.convert<std::string>(); if (any.type() == typeid(char)) formatString(value, out, options); else out << value; } else if (any.isString() || any.isDateTime() || any.isDate() || any.isTime()) { std::string value = any.convert<std::string>(); formatString(value, out, options); } else { out << any.convert<std::string>(); } }
void VarTest::testEmpty() { Var da; assert (da.isEmpty()); assert (da.type() == typeid(void)); assert (!da.isArray()); assert (!da.isInteger()); assert (!da.isNumeric()); assert (!da.isSigned()); assert (!da.isString()); assert (!(da == da)); assert (!(da != da)); da = "123"; int i = da.convert<int>(); assert (123 == i); std::string s = da.extract<std::string>(); assert ("123" == s); assert (!da.isEmpty()); da.empty(); assert (da.isEmpty()); assert (da.type() == typeid(void)); assert (!da.isArray()); assert (!da.isInteger()); assert (!da.isNumeric()); assert (!da.isSigned()); assert (!da.isString()); assert (!(da == da)); assert (!(da != da)); assert (da != ""); assert ("" != da); assert (!(da == "")); assert (!("" == da)); testEmptyComparisons<unsigned char>(); testEmptyComparisons<char>(); testEmptyComparisons<Poco::UInt8>(); testEmptyComparisons<Poco::Int8>(); testEmptyComparisons<Poco::UInt16>(); testEmptyComparisons<Poco::Int16>(); testEmptyComparisons<Poco::UInt32>(); testEmptyComparisons<Poco::Int32>(); testEmptyComparisons<Poco::UInt64>(); testEmptyComparisons<Poco::Int64>(); #ifdef POCO_LONG_IS_64_BIT testEmptyComparisons<unsigned long>(); testEmptyComparisons<long>(); #endif testEmptyComparisons<float>(); testEmptyComparisons<double>(); try { int i = da; fail ("must fail"); } catch (InvalidAccessException&) { } try { int i = da.extract<int>(); fail ("must fail"); } catch (InvalidAccessException&) { } }