aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
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
commita7199de7d90f48ce3d95cae795bd9209c39516ce (patch)
tree5d5a1d2afe05b0e47926bc8d7c16a87d0f6632f9 /tests
parentd076ebe19669cc78227a63b67da444282e767608 (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.cpp6
-rw-r--r--tests/auto/webchannel/tst_webchannel.cpp61
-rw-r--r--tests/auto/webchannel/tst_webchannel.h1
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();