static QObject *appDispatcherProvider(QQmlEngine *engine, QJSEngine *scriptEngine) { Q_UNUSED(engine); Q_UNUSED(scriptEngine); QFAppDispatcher* object = new QFAppDispatcher(); object->setEngine(engine); return object; }
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); }
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"); }
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); }
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"); }