summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2023-08-23 16:13:14 +0200
committerMårten Nordheim <marten.nordheim@qt.io>2023-08-24 07:45:04 +0200
commit4ffb227c78420f91b9b8d8cb8ceba1d8fdf2ec6c (patch)
tree48396b8ff39445ebecbde60b19ab3df816cc0de7
parenta7d2855b3c7716467c827f27359259afb5c4cbea (diff)
invokeMethod: Try invoking functor and member function accepting pointer, returning void
Due to the pre-existing overload of invokeMethod that accepts a void-pointer there is concern that the new overloads would not be preferred. Here we add a test for this to verify all supported platforms work. Change-Id: Ie5ac7bf16643599006ac57e0145feb6aace3fa87 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
index 8ccb5929a1..aed8e48afe 100644
--- a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
+++ b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
@@ -516,6 +516,8 @@ public slots:
qlonglong *sl15(qlonglong *);
MyForwardDeclaredType *sl16(MyForwardDeclaredType *);
+ void sl17(int *i) { *i = 242; }
+
void overloadedSlot();
void overloadedSlot(int, int);
void overloadedSlot(int);
@@ -1175,6 +1177,24 @@ void tst_QMetaObject::invokePointer()
QVERIFY(QMetaObject::invokeMethod(&obj, variadic, qReturnArg(result), u"bu"_s, 1, 2, 3, 4, 5, 6));
QCOMPARE(result, u"bu123456");
}
+ {
+ // Testing a functor returning void and accepting a pointer,
+ // this may trigger the pointer to be interpreted as the old void*
+ // return parameter.
+ bool invoked = false;
+ auto lambda = [&invoked](void *ptr) -> void {
+ Q_UNUSED(ptr);
+ invoked = true;
+ };
+ int i = 242;
+ QVERIFY(QMetaObject::invokeMethod(&obj, lambda, &i));
+ QVERIFY(invoked);
+
+ // member fn
+ i = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl17, &i));
+ QCOMPARE(i, 242);
+ }
}
void tst_QMetaObject::invokeQueuedMetaMember()