summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorSona Kurazyan <sona.kurazyan@qt.io>2021-12-03 17:12:31 +0100
committerSona Kurazyan <sona.kurazyan@qt.io>2021-12-06 13:49:55 +0100
commit43dfcd1d1a03b4243b45ddfc367b93f07df8e84b (patch)
tree65d171cff2655c1c5e06f5ea70605d757bddefeb /tests
parent7d889c517b6d1d30f2e504d2726fe814e2e06306 (diff)
Fix metatype registration of signal-slot params of type QList/QMap/QHash
When declaring signals/slots that take QList/QMap/QHash parameters, we register metatypes for them. However, we don't always register metatypes for the parameter types of those containers. In particular, if a parameter is declared as a POD type in a separate .rep file, metatype registration for it is skipped. Fixed the code generation for metatype registration for signal-slot parameters of type QList/QMap/QHash to also register metatypes for the contained types if required. Pick-to: 6.2 Fixes: QTBUG-97704 Change-Id: Ic81895815c380e841c04f2d1400fc2c2cf0e3814 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Brett Stottlemyer <bstottle@ford.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/integration_multiprocess/ExtPodInterface.rep1
-rw-r--r--tests/auto/integration_multiprocess/MyInterface.rep4
-rw-r--r--tests/auto/integration_multiprocess/client/CMakeLists.txt5
-rw-r--r--tests/auto/integration_multiprocess/client/main.cpp16
-rw-r--r--tests/auto/integration_multiprocess/server/CMakeLists.txt4
-rw-r--r--tests/auto/integration_multiprocess/server/mytestserver.cpp5
-rw-r--r--tests/auto/integration_multiprocess/server/mytestserver.h1
7 files changed, 36 insertions, 0 deletions
diff --git a/tests/auto/integration_multiprocess/ExtPodInterface.rep b/tests/auto/integration_multiprocess/ExtPodInterface.rep
new file mode 100644
index 0000000..0c9ad56
--- /dev/null
+++ b/tests/auto/integration_multiprocess/ExtPodInterface.rep
@@ -0,0 +1 @@
+POD ExtPOD(int i, float f, QString s)
diff --git a/tests/auto/integration_multiprocess/MyInterface.rep b/tests/auto/integration_multiprocess/MyInterface.rep
index a10dbcf..5101529 100644
--- a/tests/auto/integration_multiprocess/MyInterface.rep
+++ b/tests/auto/integration_multiprocess/MyInterface.rep
@@ -1,4 +1,5 @@
#include <QtCore>
+#include "rep_ExtPodInterface_merged.h"
class MyInterface
{
@@ -15,4 +16,7 @@ class MyInterface
SIGNAL(advance())
SIGNAL(testEnumParamsInSignals(Enum1 enumSignalParam, bool signalParam2, QString))
+
+ SLOT(void testExtPODListSlot(const QList<ExtPOD> &))
+ SIGNAL(testExtPODListSignal(const QList<ExtPOD> &))
};
diff --git a/tests/auto/integration_multiprocess/client/CMakeLists.txt b/tests/auto/integration_multiprocess/client/CMakeLists.txt
index 4ea8af0..88fdb34 100644
--- a/tests/auto/integration_multiprocess/client/CMakeLists.txt
+++ b/tests/auto/integration_multiprocess/client/CMakeLists.txt
@@ -13,6 +13,11 @@ qt_internal_add_executable(integration_multiprocess_client
Qt::RemoteObjects
Qt::Test
)
+
+qt6_add_repc_merged(integration_multiprocess_client
+ ../ExtPodInterface.rep
+)
+
qt6_add_repc_replicas(integration_multiprocess_client
../MyInterface.rep
)
diff --git a/tests/auto/integration_multiprocess/client/main.cpp b/tests/auto/integration_multiprocess/client/main.cpp
index 979c3d5..e07cefc 100644
--- a/tests/auto/integration_multiprocess/client/main.cpp
+++ b/tests/auto/integration_multiprocess/client/main.cpp
@@ -27,6 +27,7 @@
****************************************************************************/
#include "rep_MyInterface_replica.h"
+#include "rep_ExtPodInterface_merged.h"
#include <QCoreApplication>
#include <QtRemoteObjects/qremoteobjectnode.h>
@@ -159,6 +160,21 @@ private Q_SLOTS:
QTRY_COMPARE(rep->started(), false);
}
+ void testExtPodListSignals()
+ {
+ QScopedPointer<MyInterfaceReplica> rep(new MyInterfaceReplica());
+ rep->setNode(m_repNode.get());
+ QVERIFY(rep->waitForSource());
+
+ auto list = QList { ExtPOD(1, 1.1f, QStringLiteral("v1")),
+ ExtPOD(2, 2.2f, QStringLiteral("v2")) };
+ rep->testExtPODListSlot(list);
+ QSignalSpy spy(rep.data(), &MyInterfaceReplica::testExtPODListSignal);
+ connect(rep.data(), &MyInterfaceReplica::testExtPODListSignal,
+ [list](const QList<ExtPOD> &l) { QCOMPARE(l, list); });
+ QTRY_COMPARE(spy.count(), 1);
+ }
+
void testPod()
{
QScopedPointer<QRemoteObjectDynamicReplica> podRep(m_repNode->acquireDynamic("PodInterface"));
diff --git a/tests/auto/integration_multiprocess/server/CMakeLists.txt b/tests/auto/integration_multiprocess/server/CMakeLists.txt
index bb5a9f0..3ed2421 100644
--- a/tests/auto/integration_multiprocess/server/CMakeLists.txt
+++ b/tests/auto/integration_multiprocess/server/CMakeLists.txt
@@ -14,6 +14,10 @@ qt_internal_add_executable(integration_multiprocess_server
Qt::RemoteObjects
Qt::Test
)
+qt6_add_repc_merged(integration_multiprocess_server
+ ../ExtPodInterface.rep
+)
+
qt6_add_repc_sources(integration_multiprocess_server
../MyInterface.rep
../PodInterface.rep
diff --git a/tests/auto/integration_multiprocess/server/mytestserver.cpp b/tests/auto/integration_multiprocess/server/mytestserver.cpp
index c97a13a..500a6fe 100644
--- a/tests/auto/integration_multiprocess/server/mytestserver.cpp
+++ b/tests/auto/integration_multiprocess/server/mytestserver.cpp
@@ -67,3 +67,8 @@ void MyTestServer::testEnumParamsInSlots(Enum1 enumSlotParam, bool slotParam2, i
setStarted(slotParam2);
emit testEnumParamsInSignals(enum1(), started(), QString::number(number));
}
+
+void MyTestServer::testExtPODListSlot(const QList<ExtPOD> &l)
+{
+ emit testExtPODListSignal(l);
+}
diff --git a/tests/auto/integration_multiprocess/server/mytestserver.h b/tests/auto/integration_multiprocess/server/mytestserver.h
index cbdd1c0..9bc47ae 100644
--- a/tests/auto/integration_multiprocess/server/mytestserver.h
+++ b/tests/auto/integration_multiprocess/server/mytestserver.h
@@ -49,6 +49,7 @@ public Q_SLOTS:
bool stop() override;
bool quit() override;
void testEnumParamsInSlots(Enum1 enumSlotParam, bool slotParam2, int __repc_variable_1) override;
+ void testExtPODListSlot(const QList<ExtPOD> &l) override;
Q_SIGNALS:
void quitApp();