diff options
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r-- | tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index 5e69a14ba8..511eb73d9d 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -4978,6 +4978,29 @@ void tst_QObject::returnValue() QVERIFY(connect(&r, &ReturnValue::returnCustomType, &receiver, &ReturnValue::returnVoidSlot, type)); QCOMPARE((emit r.returnCustomType(45)).value(), CustomType().value()); } + if (!isBlockingQueued) { + // queued connection should not forward the return value + CheckInstanceCount checker; + ReturnValue r; + QVERIFY(connect(&r, &ReturnValue::returnVariant, &receiver, &ReturnValue::returnVariantSlot, Qt::QueuedConnection)); + QCOMPARE(emit r.returnVariant(45), QVariant()); + QVERIFY(connect(&r, &ReturnValue::returnString, &receiver, &ReturnValue::returnStringSlot, Qt::QueuedConnection)); + QCOMPARE(emit r.returnString(45), QString()); + QVERIFY(connect(&r, &ReturnValue::returnInt, &receiver, &ReturnValue::returnIntSlot, Qt::QueuedConnection)); + QCOMPARE(emit r.returnInt(45), int()); + QVERIFY(connect(&r, &ReturnValue::returnCustomType, &receiver, &ReturnValue::returnCustomTypeSlot, Qt::QueuedConnection)); + QCOMPARE((emit r.returnCustomType(45)).value(), CustomType().value()); + QCoreApplication::processEvents(); + + QVERIFY(connect(&r, &ReturnValue::returnVariant, &receiver, &ReturnValue::returnStringSlot, Qt::QueuedConnection)); + QCOMPARE(emit r.returnVariant(48), QVariant()); + QVERIFY(connect(&r, &ReturnValue::returnCustomType, &receiver, &ReturnValue::returnIntSlot, Qt::QueuedConnection)); + QCOMPARE((emit r.returnCustomType(48)).value(), CustomType().value()); + QVERIFY(connect(&r, &ReturnValue::returnVoid, &receiver, &ReturnValue::returnCustomTypeSlot, Qt::QueuedConnection)); + emit r.returnVoid(48); + QCoreApplication::processEvents(); + } + { // connected to many slots ReturnValue::VoidFunctor voidFunctor; ReturnValue::IntFunctor intFunctor; @@ -4994,6 +5017,8 @@ void tst_QObject::returnValue() QCOMPARE(emit r.returnVariant(45), QVariant(QStringLiteral("hello"))); QVERIFY(connect(&r, &ReturnValue::returnVariant, intFunctor)); QCOMPARE(emit r.returnVariant(45), QVariant(45)); + QVERIFY(connect(&r, &ReturnValue::returnVariant, &receiver, &ReturnValue::return23, Qt::QueuedConnection)); + QCOMPARE(emit r.returnVariant(45), QVariant(45)); QCOMPARE(emit r.returnInt(45), int()); QVERIFY(connect(&r, &ReturnValue::returnInt, &receiver, &ReturnValue::returnVoidSlot, type)); @@ -5006,7 +5031,12 @@ void tst_QObject::returnValue() QCOMPARE(emit r.returnInt(45), int(23)); QVERIFY(connect(&r, &ReturnValue::returnInt, intFunctor)); QCOMPARE(emit r.returnInt(45), int(45)); + QVERIFY(connect(&r, &ReturnValue::returnInt, &receiver, &ReturnValue::return23, Qt::QueuedConnection)); + QCOMPARE(emit r.returnInt(45), int(45)); + + QCoreApplication::processEvents(); } + if (isBlockingQueued) { thread.quit(); thread.wait(); @@ -5055,6 +5085,29 @@ void tst_QObject::returnValue2() QVERIFY(connect(&r, SIGNAL(returnCustomType(int)), &receiver, SLOT(returnVoidSlot()), type)); QCOMPARE((emit r.returnCustomType(45)).value(), CustomType().value()); } + if (!isBlockingQueued) { + // queued connection should not forward the return value + CheckInstanceCount checker; + ReturnValue r; + QVERIFY(connect(&r, SIGNAL(returnVariant(int)), &receiver, SLOT(returnVariantSlot(int)), Qt::QueuedConnection)); + QCOMPARE(emit r.returnVariant(45), QVariant()); + QVERIFY(connect(&r, SIGNAL(returnString(int)), &receiver, SLOT(returnStringSlot(int)), Qt::QueuedConnection)); + QCOMPARE(emit r.returnString(45), QString()); + QVERIFY(connect(&r, SIGNAL(returnInt(int)), &receiver, SLOT(returnIntSlot(int)), Qt::QueuedConnection)); + QCOMPARE(emit r.returnInt(45), int()); + QVERIFY(connect(&r, SIGNAL(returnCustomType(int)), &receiver, SLOT(returnCustomTypeSlot(int)), Qt::QueuedConnection)); + QCOMPARE((emit r.returnCustomType(45)).value(), CustomType().value()); + QCoreApplication::processEvents(); + + //Queued conneciton with different return type should be safe + QVERIFY(connect(&r, SIGNAL(returnVariant(int)), &receiver, SLOT(returnStringSlot(int)), Qt::QueuedConnection)); + QCOMPARE(emit r.returnVariant(48), QVariant()); + QVERIFY(connect(&r, SIGNAL(returnCustomType(int)), &receiver, SLOT(returnIntSlot(int)), Qt::QueuedConnection)); + QCOMPARE((emit r.returnCustomType(48)).value(), CustomType().value()); + QVERIFY(connect(&r, SIGNAL(returnVoid(int)), &receiver, SLOT(returnCustomTypeSlot(int)), Qt::QueuedConnection)); + emit r.returnVoid(48); + QCoreApplication::processEvents(); + } { // connected to many slots ReturnValue r; QVERIFY(connect(&r, SIGNAL(returnInt(int)), &receiver, SLOT(returnIntSlot(int)), type)); @@ -5063,6 +5116,8 @@ void tst_QObject::returnValue2() QCOMPARE(emit r.returnInt(45), int(45)); QVERIFY(connect(&r, SIGNAL(returnInt(int)), &receiver, SLOT(return23()), type)); QCOMPARE(emit r.returnInt(45), int(23)); + QVERIFY(connect(&r, SIGNAL(returnInt(int)), &receiver, SLOT(returnIntSlot(int)), Qt::QueuedConnection)); + QCOMPARE(emit r.returnInt(45), int(23)); QVERIFY(connect(&r, SIGNAL(returnString(int)), &receiver, SLOT(returnStringSlot(int)), type)); QCOMPARE(emit r.returnString(45), QString(QStringLiteral("45"))); @@ -5070,6 +5125,8 @@ void tst_QObject::returnValue2() QCOMPARE(emit r.returnString(45), QString(QStringLiteral("45"))); QVERIFY(connect(&r, SIGNAL(returnString(int)), &receiver, SLOT(returnHello()), type)); QCOMPARE(emit r.returnString(45), QString(QStringLiteral("hello"))); + QVERIFY(connect(&r, SIGNAL(returnString(int)), &receiver, SLOT(returnStringSlot(int)), Qt::QueuedConnection)); + QCOMPARE(emit r.returnString(45), QString(QStringLiteral("hello"))); } if (isBlockingQueued) { thread.quit(); |