Test for leaks in QMetaObject::invoke with functors
Task-number: QTBUG-65462 Change-Id: Ifa9735f5610a6df3ceabd286a0321e87bbd05ca3 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
57318ce8c2
commit
66e56762e1
@ -779,13 +779,22 @@ void tst_QMetaObject::invokePointer()
|
|||||||
QCOMPARE(QtTestObject::staticResult, QString("staticFunction1"));
|
QCOMPARE(QtTestObject::staticResult, QString("staticFunction1"));
|
||||||
|
|
||||||
// Test lambdas
|
// Test lambdas
|
||||||
QVERIFY(QMetaObject::invokeMethod(&obj, [&](){obj.sl1(t1);}));
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
QCOMPARE(obj.slotResult, QString("sl1:1"));
|
{
|
||||||
|
CountedStruct str;
|
||||||
QString exp;
|
QVERIFY(QMetaObject::invokeMethod(&obj, [str, &t1, &obj]() { obj.sl1(t1); }));
|
||||||
QVERIFY(QMetaObject::invokeMethod(&obj, [&]()->QString{return obj.sl1("bubu");}, &exp));
|
QCOMPARE(obj.slotResult, QString("sl1:1"));
|
||||||
QCOMPARE(exp, QString("yessir"));
|
}
|
||||||
QCOMPARE(obj.slotResult, QString("sl1:bubu"));
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
|
{
|
||||||
|
CountedStruct str;
|
||||||
|
QString exp;
|
||||||
|
QVERIFY(QMetaObject::invokeMethod(
|
||||||
|
&obj, [str, &obj]() -> QString { return obj.sl1("bubu"); }, &exp));
|
||||||
|
QCOMPARE(exp, QString("yessir"));
|
||||||
|
QCOMPARE(obj.slotResult, QString("sl1:bubu"));
|
||||||
|
}
|
||||||
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void tst_QMetaObject::invokeQueuedMetaMember()
|
void tst_QMetaObject::invokeQueuedMetaMember()
|
||||||
@ -873,16 +882,28 @@ void tst_QMetaObject::invokeQueuedPointer()
|
|||||||
QCOMPARE(QtTestObject::staticResult, QString("staticFunction0"));
|
QCOMPARE(QtTestObject::staticResult, QString("staticFunction0"));
|
||||||
|
|
||||||
// Test lambda
|
// Test lambda
|
||||||
obj.slotResult.clear();
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
QVERIFY(QMetaObject::invokeMethod(&obj, [&](){obj.sl0();}, Qt::QueuedConnection));
|
{
|
||||||
QVERIFY(obj.slotResult.isEmpty());
|
CountedStruct str;
|
||||||
qApp->processEvents(QEventLoop::AllEvents);
|
obj.slotResult.clear();
|
||||||
QCOMPARE(obj.slotResult, QString("sl0"));
|
QVERIFY(
|
||||||
|
QMetaObject::invokeMethod(&obj, [str, &obj]() { obj.sl0(); }, Qt::QueuedConnection));
|
||||||
qint32 var = 0;
|
QVERIFY(obj.slotResult.isEmpty());
|
||||||
QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: Unable to invoke methods with return values in queued connections");
|
qApp->processEvents(QEventLoop::AllEvents);
|
||||||
QVERIFY(!QMetaObject::invokeMethod(&obj, []()->qint32{return 1;}, Qt::QueuedConnection, &var));
|
QCOMPARE(obj.slotResult, QString("sl0"));
|
||||||
QCOMPARE(var, 0);
|
}
|
||||||
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
|
{
|
||||||
|
CountedStruct str;
|
||||||
|
qint32 var = 0;
|
||||||
|
QTest::ignoreMessage(QtWarningMsg,
|
||||||
|
"QMetaObject::invokeMethod: Unable to invoke methods with return "
|
||||||
|
"values in queued connections");
|
||||||
|
QVERIFY(!QMetaObject::invokeMethod(&obj, [str]() -> qint32 { return 1; },
|
||||||
|
Qt::QueuedConnection, &var));
|
||||||
|
QCOMPARE(var, 0);
|
||||||
|
}
|
||||||
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1063,17 +1084,26 @@ void tst_QMetaObject::invokeBlockingQueuedPointer()
|
|||||||
QCOMPARE(QtTestObject::staticResult, QString("staticFunction1"));
|
QCOMPARE(QtTestObject::staticResult, QString("staticFunction1"));
|
||||||
|
|
||||||
// Test lambdas
|
// Test lambdas
|
||||||
QVERIFY(QMetaObject::invokeMethod(&obj, [&](){obj.sl1(t1);}, Qt::BlockingQueuedConnection));
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
QCOMPARE(obj.slotResult, QString("sl1:1"));
|
{
|
||||||
|
CountedStruct str;
|
||||||
QString exp;
|
QVERIFY(QMetaObject::invokeMethod(&obj, [str, &obj, &t1]() { obj.sl1(t1); },
|
||||||
QVERIFY(QMetaObject::invokeMethod(&obj, [&]()->QString{return obj.sl1("bubu");}, Qt::BlockingQueuedConnection, &exp));
|
Qt::BlockingQueuedConnection));
|
||||||
QCOMPARE(exp, QString("yessir"));
|
QCOMPARE(obj.slotResult, QString("sl1:1"));
|
||||||
QCOMPARE(obj.slotResult, QString("sl1:bubu"));
|
}
|
||||||
|
{
|
||||||
|
CountedStruct str;
|
||||||
|
QString exp;
|
||||||
|
QVERIFY(QMetaObject::invokeMethod(&obj,
|
||||||
|
[&obj, str]() -> QString { return obj.sl1("bubu"); },
|
||||||
|
Qt::BlockingQueuedConnection, &exp));
|
||||||
|
QCOMPARE(exp, QString("yessir"));
|
||||||
|
QCOMPARE(obj.slotResult, QString("sl1:bubu"));
|
||||||
|
}
|
||||||
QVERIFY(QMetaObject::invokeMethod(&obj, [&](){obj.moveToThread(QThread::currentThread());}, Qt::BlockingQueuedConnection));
|
QVERIFY(QMetaObject::invokeMethod(&obj, [&](){obj.moveToThread(QThread::currentThread());}, Qt::BlockingQueuedConnection));
|
||||||
t.quit();
|
t.quit();
|
||||||
QVERIFY(t.wait());
|
QVERIFY(t.wait());
|
||||||
|
QCOMPARE(countedStructObjectsCount, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user