#include #include #include #include #include #include "jsonElement.hh" #include "streamConsumer.hh" const char testJson[] = "{\"widget\": {\"debug\": \"on\",\"window\": {\"title\": \"Sample Konfabulator Widget\",\"name\": \"main_window\",\"width\": 500,\"height\": 500},\"image\": { \"src\": \"Images/Sun.png\",\"name\": \"sun1\",\"hOffset\": 250,\"vOffset\": 250,\"alignment\": \"center\"},\"text\": {\"data\": \"Click Here\",\"size\": 36,\"style\": \"bold\",\"name\": \"text1\",\"hOffset\": 250,\"vOffset\": 100,\"alignment\": \"center\",\"onMouseUp\": \"sun1.opacity = (sun1.opacity / 100) * 90;\"}}}"; StreamConsumer *toJson(std::string str) { std::stringstream input(str); return (new StreamConsumer(input))->read(); } void checkArray() { //Check array StreamConsumer *root = toJson("[true, 42, \"coucou\", 12.34, false, -12, -12.42]"); JSonArray *arr = dynamic_cast(root->getRoot()); assert(arr != nullptr); JSonArray::const_iterator it = arr->cbegin(); assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == true); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == 42); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == "coucou"); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == 12.34); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == false); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == -12); it++; assert((dynamic_cast *> (*it)) != nullptr); double value = ((JSonPrimitive *)(*it))->getValue(); assert(value == -12.42); delete root; } void checkTypes() { //Check basic types StreamConsumer *root = toJson("{\"test\":\"value\"}"); assert(dynamic_cast(root->getRoot()) != nullptr); delete root; root = toJson("[\"test\",\"value\"]"); assert(dynamic_cast(root->getRoot()) != nullptr); delete root; root = toJson("\"test\""); assert(dynamic_cast *>(root->getRoot()) != nullptr); delete root; root = toJson("42"); assert(dynamic_cast *>(root->getRoot()) != nullptr); delete root; root = toJson("42.2"); assert(dynamic_cast *>(root->getRoot()) != nullptr); assert((((JSonPrimitive *)(root->getRoot()))->getValue()) == 42.2); delete root; root = toJson(std::to_string((long long)LLONG_MAX)); assert(dynamic_cast *>(root->getRoot()) != nullptr); delete root; root = toJson("true"); assert(dynamic_cast *>(root->getRoot()) != nullptr); delete root; } void checkObject() { //Check Obj StreamConsumer *root = toJson("{\"bool\":true, \"int\":42, \"str\":\"coucou\", \"double\":12.34, \"arrayOfInt\":[1, 2, 3, 4.5]}"); assert(dynamic_cast(root->getRoot()) != nullptr); assert(((JSonObject *)(root->getRoot()))->size() == 5); const JSonElement *tmp = ((JSonObject *)(root->getRoot()))->get("bool"); assert((dynamic_cast *> (tmp)) != nullptr); assert((dynamic_cast *> (tmp))->getValue() == true); tmp = ((JSonObject *)(root->getRoot()))->get("int"); assert((dynamic_cast *> (tmp)) != nullptr); assert((dynamic_cast *> (tmp))->getValue() == 42); tmp = ((JSonObject *)(root->getRoot()))->get("str"); assert((dynamic_cast *> (tmp)) != nullptr); assert((dynamic_cast *> (tmp))->getValue() == "coucou"); tmp = ((JSonObject *)(root->getRoot()))->get("double"); assert((dynamic_cast *> (tmp)) != nullptr); assert((dynamic_cast *> (tmp))->getValue() == 12.34); tmp = ((JSonObject *)(root->getRoot()))->get("arrayOfInt"); const JSonArray *arr2 = dynamic_cast (tmp); assert(arr2 != nullptr); assert(arr2->size() == 4); JSonArray::const_iterator it = arr2->cbegin(); assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == 1); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == 2); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == 3); it++; assert((dynamic_cast *> (*it)) != nullptr); assert(((JSonPrimitive *)(*it))->getValue() == 4.5); delete root; } void checkSample() { StreamConsumer *root = toJson(testJson); root->getRoot(); delete root; } int main() { checkTypes(); checkArray(); checkObject(); checkSample(); exit(EXIT_SUCCESS); }