diff options
author | Øystein Heskestad <oystein.heskestad@qt.io> | 2021-05-07 15:23:38 +0200 |
---|---|---|
committer | Øystein Heskestad <oystein.heskestad@qt.io> | 2021-05-20 14:25:42 +0200 |
commit | a7199de7d90f48ce3d95cae795bd9209c39516ce (patch) | |
tree | 5d5a1d2afe05b0e47926bc8d7c16a87d0f6632f9 /tests | |
parent | d076ebe19669cc78227a63b67da444282e767608 (diff) |
Handle per-transport client idle status
[ChangeLog][QMetaObjectPublisher] Handle per-transport client idle status
Task-number: QTBUG-92927
Change-Id: I5a06261e6dddb0fc0fae9f73b280c61cf5a2b52d
Reviewed-by: Arno Rehn <a.rehn@menlosystems.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/testwebchannel.cpp | 6 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 61 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 1 |
3 files changed, 57 insertions, 11 deletions
diff --git a/tests/auto/qml/testwebchannel.cpp b/tests/auto/qml/testwebchannel.cpp index 9891687..3ca81c2 100644 --- a/tests/auto/qml/testwebchannel.cpp +++ b/tests/auto/qml/testwebchannel.cpp @@ -46,7 +46,11 @@ TestWebChannel::~TestWebChannel() bool TestWebChannel::clientIsIdle() const { - return QWebChannel::d_func()->publisher->clientIsIdle; + for (auto *transport : QWebChannel::d_func()->transports) { + if (QWebChannel::d_func()->publisher->isClientIdle(transport)) + return true; + } + return false; } QT_END_NAMESPACE diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index ee4dac1..282348f 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -801,7 +801,7 @@ void TestWebChannel::testTransportWrapObjectProperties() DummyTransport *dummyTransport = new DummyTransport(this); channel.connectTo(dummyTransport); channel.d_func()->publisher->initializeClient(dummyTransport); - channel.d_func()->publisher->setClientIsIdle(true); + channel.d_func()->publisher->setClientIsIdle(true, dummyTransport); QCOMPARE(channel.d_func()->publisher->transportedWrappedObjects.size(), 0); @@ -1070,7 +1070,7 @@ void TestWebChannel::testQProperty() QCOMPARE(publisher->propertyObservers.count(&testObj), 1u); QVariant result; - publisher->setClientIsIdle(true); + publisher->setClientIsIdle(true, &transport); result = publisher->invokeMethod(&testObj, "getStringProperty", {}); QCOMPARE(result.toString(), obj1.value()); @@ -1123,7 +1123,6 @@ void TestWebChannel::testPropertyUpdateInterval() DummyTransport transport; QWebChannel channel; QMetaObjectPublisher *publisher = channel.d_func()->publisher; - publisher->setClientIsIdle(true); QFETCH(int, firstUpdateInterval); QFETCH(int, firstUpdateWithin); @@ -1140,12 +1139,9 @@ void TestWebChannel::testPropertyUpdateInterval() QProperty<QString> obj1("Hello"); testObj.bindableStringProperty().setBinding([&]() { return obj1.value(); }); publisher->initializeClient(&transport); + publisher->setClientIsIdle(true, &transport); QVERIFY(transport.messagesSent().isEmpty()); - if (firstUpdateWithin > 0) { - QVERIFY(publisher->timer.isActive()); - } - // First update obj1 = "world"; if (firstUpdateInterval > 0) { @@ -1163,7 +1159,7 @@ void TestWebChannel::testPropertyUpdateInterval() QFETCH(int, secondUpdateInterval); QFETCH(int, secondUpdateWithin); propertyUpdateInterval = secondUpdateInterval; - publisher->setClientIsIdle(true); + publisher->setClientIsIdle(true, &transport); obj1 = "and"; if (secondUpdateInterval > 0) { @@ -1180,7 +1176,7 @@ void TestWebChannel::testPropertyUpdateInterval() QCOMPARE(transport.messagesSent().size(), 2u); } - publisher->setClientIsIdle(true); + publisher->setClientIsIdle(true, &transport); channel.setBlockUpdates(true); obj1 = "again"; @@ -1199,6 +1195,51 @@ void TestWebChannel::testPropertyUpdateInterval() QCOMPARE(transport.messagesSent().size(), 3u); } +void TestWebChannel::testPropertyMultipleTransports() +{ + DummyTransport transport1; + DummyTransport transport2; + + QWebChannel channel; + QMetaObjectPublisher *publisher = channel.d_func()->publisher; + + TestObject testObj; + testObj.setObjectName("testObject"); + channel.registerObject(testObj.objectName(), &testObj); + channel.connectTo(&transport1); + channel.connectTo(&transport2); + QProperty<QString> obj1("Hello"); + testObj.bindableStringProperty().setBinding([&]() { return obj1.value(); }); + + publisher->initializeClient(&transport1); + publisher->initializeClient(&transport2); + publisher->setClientIsIdle(true, &transport1); + QCOMPARE(publisher->isClientIdle(&transport1), true); + QCOMPARE(publisher->isClientIdle(&transport2), false); + channel.setPropertyUpdateInterval(1000); + QVERIFY(transport1.messagesSent().isEmpty()); + QVERIFY(transport2.messagesSent().isEmpty()); + + obj1 = "World"; + QTRY_COMPARE_WITH_TIMEOUT(transport1.messagesSent().size(), 1u, 2000); + QCOMPARE(transport2.messagesSent().size(), 0u); + publisher->setClientIsIdle(true, &transport2); + QTRY_COMPARE_WITH_TIMEOUT(transport2.messagesSent().size(), 1u, 2000); + QCOMPARE(publisher->isClientIdle(&transport1), false); + QCOMPARE(publisher->isClientIdle(&transport2), false); + + obj1 = "!!!"; + publisher->setClientIsIdle(true, &transport2); + QCOMPARE(publisher->isClientIdle(&transport2), true); + QCOMPARE(publisher->isClientIdle(&transport1), false); + QTRY_COMPARE_WITH_TIMEOUT(transport2.messagesSent().size(), 2u, 2000); + QCOMPARE(transport1.messagesSent().size(), 1u); + publisher->setClientIsIdle(true, &transport1); + QTRY_COMPARE_WITH_TIMEOUT(transport1.messagesSent().size(), 2u, 2000); + QCOMPARE(publisher->isClientIdle(&transport1), false); + QCOMPARE(publisher->isClientIdle(&transport2), false); +} + class FunctionWrapper : public QObject { Q_OBJECT @@ -1316,7 +1357,7 @@ void TestWebChannel::benchPropertyUpdates() obj->change(); } - channel.d_func()->publisher->clientIsIdle = true; + channel.d_func()->publisher->setClientIsIdle(true, m_dummyTransport); channel.d_func()->publisher->sendPendingPropertyUpdates(); } } diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h index accd0b0..bbcf2b8 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -359,6 +359,7 @@ private slots: void testQProperty(); void testPropertyUpdateInterval_data(); void testPropertyUpdateInterval(); + void testPropertyMultipleTransports(); void testDeletionDuringMethodInvocation_data(); void testDeletionDuringMethodInvocation(); |