Esempio n. 1
0
static QObject *appDispatcherProvider(QQmlEngine *engine, QJSEngine *scriptEngine) {
    Q_UNUSED(engine);
    Q_UNUSED(scriptEngine);

    QFAppDispatcher* object = new QFAppDispatcher();
    object->setEngine(engine);

    return object;
}
Esempio n. 2
0
void QuickFluxUnitTests::dispatch_qvariant()
{
    QQmlApplicationEngine engine;

    engine.addImportPath("qrc:/");

    QUrl url("qrc:///QuickFluxTests/DispatcherTests.qml");
    engine.load(url);

    Automator automator(&engine);

    QObject* root = automator.findObject("DispatcherTests");

    QVERIFY(root);

    QFAppDispatcher* dispatcher = QFAppDispatcher::instance(&engine);
    dispatcher->dispatch("test1", QVariant(123));

    QVariantList list = root->property("messages").toList();
    QCOMPARE(list.count() , 1);
    QVariantList item = list.at(0).toList();
    QString type = item.at(0).toString();
    QVariant v = item.at(1);

    QVERIFY(type == "test1");
    QCOMPARE(v.toInt(), 123);

    QVariantMap message;
    message["v1"] = 1;
    message["v2"] = "2";
    message["v3"] = 3.0;

    dispatcher->dispatch("test2", message);

    list = root->property("messages").toList();
    QCOMPARE(list.count() , 2);

    item = list.at(1).toList();
    type = item.at(0).toString();
    v = item.at(1);

    QVERIFY(type == "test2");
    QVERIFY(v.toMap() == message);

}
Esempio n. 3
0
void QuickFluxUnitTests::instance()
{
    QQmlApplicationEngine engine;

    engine.addImportPath("qrc:/");

    QUrl url("qrc:///dummy.qml");
    engine.load(url);

    QObject *rootItem = engine.rootObjects().first();

    QVERIFY(rootItem);

    QFAppDispatcher* dispatcher = QFAppDispatcher::instance(&engine);
    QVERIFY(dispatcher);

    dispatcher->dispatch("TestMessage");

}
Esempio n. 4
0
void QuickFluxUnitTests::dispatcherHook()
{
    QQmlEngine engine;
    QFAppDispatcher dispatcher;
    dispatcher.setEngine(&engine);

    int count = 0;
    QStringList typeList;

    connect(&dispatcher, &QFAppDispatcher::dispatched, [&](QString type, QJSValue message) {
        Q_UNUSED(message);
        typeList << type;
        count++;
    });

    class Hook1: public QFHook {
    public:
        void dispatch(QString type, QJSValue message) {
            Q_UNUSED(type);
            Q_UNUSED(message);
        }
    };

    Hook1 hook1;
    dispatcher.setHook(&hook1);

    dispatcher.dispatch("action1");
    QCOMPARE(count, 0);


    class Hook2: public QFHook {
    public:
        void dispatch(QString type, QJSValue message) {
            for (int i = 0 ; i < 3;i++) {
                QMetaObject::invokeMethod(this,"dispatched",Q_ARG(QString, type), Q_ARG(QJSValue, message));
            }
        }
    };

    Hook2 hook2;
    dispatcher.setHook(&hook2);

    dispatcher.dispatch("action1");
    QCOMPARE(count, 3);

    dispatcher.setHook(nullptr);

    dispatcher.dispatch("action1");
    QCOMPARE(count, 4);

}
Esempio n. 5
0
void QuickFluxUnitTests::actionCreator_changeDispatcher()
{
    QQmlApplicationEngine engine;
    engine.addImportPath("qrc:///");

    QFActionCreator* actionCreator = qobject_cast<QFActionCreator*>(QFAppDispatcher::singletonObject(&engine, "QuickFluxTests" , 1,0,"AppActions"));
    QVERIFY(actionCreator);

    QFAppDispatcher* globalDispatcher = QFAppDispatcher::instance(&engine);

    QCOMPARE(actionCreator->dispatcher(), globalDispatcher);

    QFAppDispatcher* dispatcher = new QFAppDispatcher(&engine); // local custom dispatcher
    dispatcher->setEngine(&engine);

    int count = 0;
    QStringList typeList;

    connect(dispatcher, &QFAppDispatcher::dispatched, [&](QString type, QJSValue message) {
        Q_UNUSED(message);
        typeList << type;
        count++;
    });

    actionCreator->setDispatcher(dispatcher); // replace by our dispatcher

    QMetaObject::invokeMethod(actionCreator,"test1");

    QCOMPARE(count, 1);
    QCOMPARE(typeList.size(), 1);
    QVERIFY(typeList[0] == "test1");

    QMetaObject::invokeMethod(actionCreator,"test2");
    QCOMPARE(typeList.size(), 2);
    QVERIFY(typeList[1] == "test2");
}