summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-02 11:25:57 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-03 04:23:45 +0200
commita5d51e11b76d8f6a6276f7e89bf0ccbc2985d474 (patch)
treecbb473923af7db204045f6cea3882e152d3f2e8c
parent91ebebdbf26907c126dcc367832ed524d64b94cf (diff)
parentd342edcc22d3c9c0299e86805d93e7031507345b (diff)
downloadqtwebchannel-a5d51e11b76d8f6a6276f7e89bf0ccbc2985d474.tar.gz
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts: .qmake.conf tests/auto/webchannel/tst_webchannel.cpp tests/auto/webchannel/tst_webchannel.h Change-Id: I01b0f58c10acbef8e2d5d15fc5787e755f519af8
-rw-r--r--tests/auto/qml/qml.cpp2
-rw-r--r--tests/auto/qml/qml.pro6
-rw-r--r--tests/auto/qml/testobject.cpp58
-rw-r--r--tests/auto/qml/testobject.h59
-rw-r--r--tests/auto/qml/tst_webchannel.qml43
-rw-r--r--tests/auto/webchannel/tst_webchannel.cpp44
-rw-r--r--tests/auto/webchannel/tst_webchannel.h2
7 files changed, 188 insertions, 26 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 0fe742f..a2c62cf 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;
@@ -659,28 +681,6 @@ void TestWebChannel::testPassWrappedObjectBack()
QCOMPARE(registeredObj.mReturnedObject, &returnedObjProperty);
}
-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;
diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h
index a587499..11786b4 100644
--- a/tests/auto/webchannel/tst_webchannel.h
+++ b/tests/auto/webchannel/tst_webchannel.h
@@ -278,8 +278,8 @@ private slots:
void testSetPropertyConversion();
void testDisconnect();
void testWrapRegisteredObject();
- void testPassWrappedObjectBack();
void testRemoveUnusedTransports();
+ void testPassWrappedObjectBack();
void testInfiniteRecursion();
void benchClassInfo();