diff options
author | Liang Qi <liang.qi@qt.io> | 2017-01-25 11:01:05 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-01-25 11:01:05 +0100 |
commit | 196097bfc84d297199ea591fc19e714c88796e8e (patch) | |
tree | 44db9b8047021f358a009b1d8662e69711f6b969 /tests/auto/webchannel/tst_webchannel.cpp | |
parent | 1cbc05a6568db5e0ff094f8e09723c607ade88af (diff) | |
parent | 87d83df5f3fa2a582385e70dc22c4a9789134f99 (diff) | |
download | qtwebchannel-196097bfc84d297199ea591fc19e714c88796e8e.tar.gz |
Merge remote-tracking branch 'origin/5.8' into devv5.9.0-alpha1
Conflicts:
.qmake.conf
Change-Id: I601a28bfd7eb92d894295d7b7848b4a80dcc1d5d
Diffstat (limited to 'tests/auto/webchannel/tst_webchannel.cpp')
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index a2c62cf..24d473f 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -365,6 +365,18 @@ void TestWebChannel::testInfoForObject() } { QJsonArray method; + method.append(QStringLiteral("setProp")); + method.append(obj.metaObject()->indexOfMethod("setProp(QString)")); + expected.append(method); + } + { + QJsonArray method; + method.append(QStringLiteral("fire")); + method.append(obj.metaObject()->indexOfMethod("fire()")); + expected.append(method); + } + { + QJsonArray method; method.append(QStringLiteral("method1")); method.append(obj.metaObject()->indexOfMethod("method1()")); expected.append(method); @@ -392,6 +404,12 @@ void TestWebChannel::testInfoForObject() signal.append(obj.metaObject()->indexOfMethod("sig2(QString)")); expected.append(signal); } + { + QJsonArray signal; + signal.append(QStringLiteral("replay")); + signal.append(obj.metaObject()->indexOfMethod("replay()")); + expected.append(signal); + } QCOMPARE(info["signals"].toArray(), expected); } @@ -473,6 +491,19 @@ void TestWebChannel::testInfoForObject() property.append(QJsonValue::fromVariant(QVariant::fromValue(obj.returnedObject()))); expected.append(property); } + { + QJsonArray property; + property.append(obj.metaObject()->indexOfProperty("prop")); + property.append(QStringLiteral("prop")); + { + QJsonArray signal; + signal.append(1); + signal.append(obj.metaObject()->indexOfMethod("propChanged(QString)")); + property.append(signal); + } + property.append(QJsonValue::fromVariant(QVariant::fromValue(obj.prop()))); + expected.append(property); + } QCOMPARE(info["properties"].toArray(), expected); } } @@ -694,6 +725,52 @@ void TestWebChannel::testInfiniteRecursion() QJsonObject objectInfo = channel.d_func()->publisher->wrapResult(QVariant::fromValue(&obj), m_dummyTransport).toObject(); } +void TestWebChannel::testAsyncObject() +{ + QWebChannel channel; + channel.connectTo(m_dummyTransport); + + QThread thread; + thread.start(); + + TestObject obj; + obj.moveToThread(&thread); + + QJsonArray args; + args.append(QJsonValue("message")); + + int method = obj.metaObject()->indexOfMethod("setProp(QString)"); + QVERIFY(method != -1); + + { + QSignalSpy spy(&obj, &TestObject::propChanged); + channel.d_func()->publisher->invokeMethod(&obj, method, args); + QVERIFY(spy.wait()); + QCOMPARE(spy.at(0).at(0).toString(), args.at(0).toString()); + } + + channel.registerObject("myObj", &obj); + channel.d_func()->publisher->initializeClient(m_dummyTransport); + + QJsonObject connectMessage; + connectMessage["type"] = 7; + connectMessage["object"] = "myObj"; + connectMessage["signal"] = obj.metaObject()->indexOfSignal("replay()"); + channel.d_func()->publisher->handleMessage(connectMessage, m_dummyTransport); + + { + QSignalSpy spy(&obj, &TestObject::replay); + QMetaObject::invokeMethod(&obj, "fire"); + QVERIFY(spy.wait()); + channel.deregisterObject(&obj); + QMetaObject::invokeMethod(&obj, "fire"); + QVERIFY(spy.wait()); + } + + thread.quit(); + thread.wait(); +} + static QHash<QString, QObject*> createObjects(QObject *parent) { const int num = 100; |