diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qml/qml.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qml/qml.pro | 6 | ||||
-rw-r--r-- | tests/auto/qml/testobject.cpp | 58 | ||||
-rw-r--r-- | tests/auto/qml/testobject.h | 59 | ||||
-rw-r--r-- | tests/auto/qml/tst_webchannel.qml | 43 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 53 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 2 |
7 files changed, 220 insertions, 3 deletions
diff --git a/tests/auto/qml/qml.cpp b/tests/auto/qml/qml.cpp index a974854..dcf1228 100644 --- a/tests/auto/qml/qml.cpp +++ b/tests/auto/qml/qml.cpp @@ -35,11 +35,13 @@ #include "testtransport.h" #include "testwebchannel.h" +#include "testobject.h" int main(int argc, char **argv) { qmlRegisterType<TestTransport>("QtWebChannel.Tests", 1, 0, "TestTransport"); qmlRegisterType<TestWebChannel>("QtWebChannel.Tests", 1, 0, "TestWebChannel"); + qmlRegisterType<TestObject>("QtWebChannel.Tests", 1, 0, "TestObject"); return quick_test_main(argc, argv, "qml", QUICK_TEST_SOURCE_DIR); } diff --git a/tests/auto/qml/qml.pro b/tests/auto/qml/qml.pro index 5dbac40..82a951a 100644 --- a/tests/auto/qml/qml.pro +++ b/tests/auto/qml/qml.pro @@ -10,11 +10,13 @@ IMPORTPATH += $$OUT_PWD/../../../qml $$PWD SOURCES += \ qml.cpp \ testtransport.cpp \ - testwebchannel.cpp + testwebchannel.cpp \ + testobject.cpp HEADERS += \ testtransport.h \ - testwebchannel.h + testwebchannel.h \ + testobject.h OTHER_FILES += \ Client.qml \ diff --git a/tests/auto/qml/testobject.cpp b/tests/auto/qml/testobject.cpp new file mode 100644 index 0000000..894f2e1 --- /dev/null +++ b/tests/auto/qml/testobject.cpp @@ -0,0 +1,58 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com> +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWebChannel module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "testobject.h" + + +QT_BEGIN_NAMESPACE + +TestObject::TestObject(QObject* parent) + : QObject(parent) +{ +} + +TestObject::~TestObject() +{ +} + +void TestObject::triggerSignals() +{ + emit testSignalBool(true); + emit testSignalBool(false); + + emit testSignalInt(42); + emit testSignalInt(1); + emit testSignalInt(0); +} + +QT_END_NAMESPACE diff --git a/tests/auto/qml/testobject.h b/tests/auto/qml/testobject.h new file mode 100644 index 0000000..b20f2e4 --- /dev/null +++ b/tests/auto/qml/testobject.h @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com> +** Contact: http://www.qt.io/licensing/ +** +** This file is part of the QtWebChannel module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see http://www.qt.io/terms-conditions. For further +** information use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** As a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#ifndef TESTOBJECT_H +#define TESTOBJECT_H + +#include <QObject> + +QT_BEGIN_NAMESPACE + +class TestObject : public QObject +{ + Q_OBJECT +public: + explicit TestObject(QObject *parent = Q_NULLPTR); + ~TestObject(); + +public slots: + void triggerSignals(); + +signals: + void testSignalBool(bool testBool); + void testSignalInt(int testInt); +}; + +QT_END_NAMESPACE + +#endif // TESTOBJECT_H diff --git a/tests/auto/qml/tst_webchannel.qml b/tests/auto/qml/tst_webchannel.qml index 5e28db3..6da6c4b 100644 --- a/tests/auto/qml/tst_webchannel.qml +++ b/tests/auto/qml/tst_webchannel.qml @@ -89,10 +89,15 @@ TestCase { } } + TestObject { + id: testObject + WebChannel.id: "testObject" + } + TestWebChannel { id: webChannel transports: [client.serverTransport] - registeredObjects: [myObj, myOtherObj, myFactory] + registeredObjects: [myObj, myOtherObj, myFactory, testObject] } function initChannel() { @@ -407,4 +412,40 @@ TestCase { myObj.mySignal(0, myObj); compare(signalArg, 42); } + + // see also: https://bugreports.qt.io/browse/QTBUG-54074 + function test_signalArgumentTypeConversion() + { + var signalArgs = []; + function logSignalArgs(arg) { + signalArgs.push(arg); + } + var channel = client.createChannel(function(channel) { + var testObject = channel.objects.testObject; + testObject.testSignalBool.connect(logSignalArgs); + testObject.testSignalInt.connect(logSignalArgs); + testObject.triggerSignals(); + }); + client.awaitInit(); + + var msg = client.awaitMessage(); + compare(msg.type, JSClient.QWebChannelMessageTypes.connectToSignal); + compare(msg.object, "testObject"); + + msg = client.awaitMessage(); + compare(msg.type, JSClient.QWebChannelMessageTypes.connectToSignal); + compare(msg.object, "testObject"); + + msg = client.awaitMessage(); + compare(msg.type, JSClient.QWebChannelMessageTypes.invokeMethod); + client.awaitIdle(); + + compare(signalArgs, [ + true, + false, + 42, + 1, + 0 + ]); + } } diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index a8a658f..dd2059e 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -629,6 +629,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::testPassWrappedObjectBack() { QWebChannel channel; @@ -754,6 +776,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 { + foreach (DummyTransport *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 b46f21b..11786b4 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -278,6 +278,7 @@ private slots: void testSetPropertyConversion(); void testDisconnect(); void testWrapRegisteredObject(); + void testRemoveUnusedTransports(); void testPassWrappedObjectBack(); void testInfiniteRecursion(); @@ -285,6 +286,7 @@ private slots: void benchInitializeClients(); void benchPropertyUpdates(); void benchRegisterObjects(); + void benchRemoveTransport(); void qtbug46548_overriddenProperties(); |