diff options
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 53 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 2 |
2 files changed, 55 insertions, 0 deletions
diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index 7e8e5f5..9531c6f 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -455,6 +455,28 @@ void TestWebChannel::testWrapRegisteredObject() QCOMPARE(obj.objectName(), returnedId); } +void TestWebChannel::testRemoveUnusedTransports() +{ + QWebChannel channel; + DummyTransport *dummyTransport = new DummyTransport(this); + TestObject obj; + + channel.connectTo(dummyTransport); + channel.d_func()->publisher->initializeClient(dummyTransport); + + QMetaObjectPublisher *pub = channel.d_func()->publisher; + pub->wrapResult(QVariant::fromValue(&obj), dummyTransport); + + QCOMPARE(pub->wrappedObjects.size(), 1); + QCOMPARE(pub->registeredObjectIds.size(), 1); + + channel.disconnectFrom(dummyTransport); + delete dummyTransport; + + QCOMPARE(pub->wrappedObjects.size(), 0); + QCOMPARE(pub->registeredObjectIds.size(), 0); +} + void TestWebChannel::testInfiniteRecursion() { QWebChannel channel; @@ -550,6 +572,37 @@ void TestWebChannel::benchRegisterObjects() channel.registerObjects(objects); } } + +void TestWebChannel::benchRemoveTransport() +{ + QWebChannel channel; + QList<DummyTransport*> dummyTransports; + for (int i = 500; i > 0; i--) + dummyTransports.append(new DummyTransport(this)); + + QList<QSharedPointer<TestObject>> objs; + QMetaObjectPublisher *pub = channel.d_func()->publisher; + + foreach (DummyTransport *transport, dummyTransports) { + channel.connectTo(transport); + channel.d_func()->publisher->initializeClient(transport); + + /* 30 objects per transport */ + for (int i = 30; i > 0; i--) { + QSharedPointer<TestObject> obj = QSharedPointer<TestObject>::create(); + objs.append(obj); + pub->wrapResult(QVariant::fromValue(obj.data()), transport); + } + } + + QBENCHMARK_ONCE { + for (auto transport : dummyTransports) + pub->transportRemoved(transport); + } + + qDeleteAll(dummyTransports); +} + #ifdef WEBCHANNEL_TESTS_CAN_USE_JS_ENGINE class SubclassedTestObject : public TestObject diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h index 98733dc..0d2fe55 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -232,12 +232,14 @@ private slots: void testInvokeMethodConversion(); void testDisconnect(); void testWrapRegisteredObject(); + void testRemoveUnusedTransports(); void testInfiniteRecursion(); void benchClassInfo(); void benchInitializeClients(); void benchPropertyUpdates(); void benchRegisterObjects(); + void benchRemoveTransport(); void qtbug46548_overriddenProperties(); |