summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMilian Wolff <milian.wolff@kdab.com>2016-06-16 22:55:43 +0200
committerMilian Wolff <milian.wolff@kdab.com>2016-07-21 09:04:37 +0000
commit3b28a6956cb3cab087481312dc82a907b118e0de (patch)
tree7922cc3a23a6b573247a3ff46fc54b577ea2836a
parent43ff11f564d90f7818d741ae4304462938c38438 (diff)
downloadqtwebchannel-3b28a6956cb3cab087481312dc82a907b118e0de.tar.gz
Add a test that emits signals from C++ and checks them in QMLv5.6.25.6.2
This is again trying to reproduce the issue described in the bug report, but it also passes for me. Still, it's good to have this tested in more depth. Change-Id: Ibaaefd7359d558c3b59af3d86a1260ab06caa598 Task-number: QTBUG-54074 Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
-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
5 files changed, 165 insertions, 3 deletions
diff --git a/tests/auto/qml/qml.cpp b/tests/auto/qml/qml.cpp
index 0c6919e..1d99fec 100644
--- a/tests/auto/qml/qml.cpp
+++ b/tests/auto/qml/qml.cpp
@@ -40,11 +40,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 6cb24b0..dc4cf93 100644
--- a/tests/auto/qml/tst_webchannel.qml
+++ b/tests/auto/qml/tst_webchannel.qml
@@ -94,10 +94,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() {
@@ -412,4 +417,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
+ ]);
+ }
}