summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorHugo Beauzée-Luyssen <hugo@beauzee.fr>2019-04-03 18:30:43 +0200
committerHugo Beauzée-Luyssen <hugo@beauzee.fr>2019-04-12 20:18:20 +0000
commit2a815855a9b91a3537ab3d804ad1ee47d741b64f (patch)
treed5fe0420105466638846299e7d9d5b7863001182 /tests
parentab2c1e20fadc59a1a2365bda9e0e6b8eb295f5c9 (diff)
corelib: invokeMethod: Allow non copyable functors to be used
[ChangeLog][QtCore][QMetaObject] Non-copyable lambdas can now be used with invokeMethod(). For consistency reasons, the functor object is now always moved. Fixes: QTBUG-69683 Change-Id: I66ff5e21d6d1926f0f7c5f8c304bed1a90b69917 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/qmetaobject.pro1
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp18
2 files changed, 19 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qmetaobject/qmetaobject.pro b/tests/auto/corelib/kernel/qmetaobject/qmetaobject.pro
index e7e5a03a86..980c247ab5 100644
--- a/tests/auto/corelib/kernel/qmetaobject/qmetaobject.pro
+++ b/tests/auto/corelib/kernel/qmetaobject/qmetaobject.pro
@@ -1,4 +1,5 @@
CONFIG += testcase
+qtConfig(c++14): CONFIG += c++14
TARGET = tst_qmetaobject
QT = core-private testlib
SOURCES = tst_qmetaobject.cpp
diff --git a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
index cfe1443fd3..ac0731b883 100644
--- a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
+++ b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
@@ -815,6 +815,15 @@ void tst_QMetaObject::invokePointer()
QCOMPARE(obj.slotResult, QString("sl1:bubu"));
}
QCOMPARE(countedStructObjectsCount, 0);
+#ifdef __cpp_init_captures
+ {
+ CountedStruct str;
+ std::unique_ptr<int> ptr( new int );
+ QVERIFY(QMetaObject::invokeMethod(&obj, [str, &t1, &obj, p = std::move(ptr)]() { obj.sl1(t1); }));
+ QCOMPARE(obj.slotResult, QString("sl1:1"));
+ }
+ QCOMPARE(countedStructObjectsCount, 0);
+#endif
}
void tst_QMetaObject::invokeQueuedMetaMember()
@@ -1120,6 +1129,15 @@ void tst_QMetaObject::invokeBlockingQueuedPointer()
QCOMPARE(exp, QString("yessir"));
QCOMPARE(obj.slotResult, QString("sl1:bubu"));
}
+#ifdef __cpp_init_captures
+ {
+ std::unique_ptr<int> ptr(new int);
+ QVERIFY(QMetaObject::invokeMethod(&obj,
+ [&obj, p = std::move(ptr)]() { return obj.sl1("hehe"); },
+ Qt::BlockingQueuedConnection));
+ QCOMPARE(obj.slotResult, QString("sl1:hehe"));
+ }
+#endif
QVERIFY(QMetaObject::invokeMethod(&obj, [&](){obj.moveToThread(QThread::currentThread());}, Qt::BlockingQueuedConnection));
t.quit();
QVERIFY(t.wait());