void SmartEntityTest::testObject()
{
    //Handle all TestInt* types;
    registerSmartClass(TestInt*);
    //Handle all TestString* types;
    registerSmartClass(TestString*);
    //Handle all TestObject* types;
    registerSmartClass(TestObject*);


    TestInt *intObj = new TestInt;
    intObj->setId(10);
    intObj->setIds(QList<int>{1,2,3,4,5});

    TestString *strObj = new TestString;
    strObj->setName("Test");
    strObj->setNameList(QList<QString>{"test1","test2","test3"});
    strObj->setNames(QStringList() << "test1" << "test2" << "test3");

    TestObject *simpleObj = new TestObject;
    simpleObj->setIntObj(intObj);
    simpleObj->setStrObj(strObj);

    TestObject *obj = new TestObject;
    obj->setObject(simpleObj);
    obj->setObjects(QList<TestObject*>{new TestObject, new TestObject, simpleObj});
    obj->setIntObj(intObj);
    obj->setIntObjs(QList<TestInt*>{new TestInt, new TestInt, intObj});
    obj->setStrObj(strObj);
    obj->setStrObjs(QList<TestString*>{new TestString, new TestString, strObj});

    TestObject *fillObj = new TestObject;

    QBENCHMARK {
        fillObj->fillObject(obj->toJsonObject());
    }

    QJsonObject jsonObj = obj->toJsonObject();
    QJsonObject jsonFillObj = fillObj->toJsonObject();

    QCOMPARE(jsonObj, jsonFillObj);

    qDeleteAll(obj->objects());
    qDeleteAll(obj->intObjs());
    qDeleteAll(obj->strObjs());

    qDeleteAll(fillObj->objects());
    qDeleteAll(fillObj->intObjs());
    qDeleteAll(fillObj->strObjs());

    obj->deleteLater();
    fillObj->deleteLater();
}