diff options
author | Sona Kurazyan <sona.kurazyan@qt.io> | 2021-12-03 17:12:31 +0100 |
---|---|---|
committer | Sona Kurazyan <sona.kurazyan@qt.io> | 2021-12-06 13:49:55 +0100 |
commit | 43dfcd1d1a03b4243b45ddfc367b93f07df8e84b (patch) | |
tree | 65d171cff2655c1c5e06f5ea70605d757bddefeb /tests | |
parent | 7d889c517b6d1d30f2e504d2726fe814e2e06306 (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')
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(); |