diff options
Diffstat (limited to 'tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp')
-rw-r--r-- | tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp b/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp index df241c030e..9555c2a844 100644 --- a/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp +++ b/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp @@ -65,6 +65,11 @@ private slots: void waitFunctionPointer_signalEmittedLater(); void waitFunctionPointer_signalEmittedTooLate(); void waitFunctionPointer_signalEmittedMultipleTimes(); + + void spyOnMetaMethod(); + + void spyOnMetaMethod_invalid(); + void spyOnMetaMethod_invalid_data(); }; class QtTestObject: public QObject @@ -432,5 +437,52 @@ void tst_QSignalSpy::waitFunctionPointer_signalEmittedMultipleTimes() QCOMPARE(spy.count(), 3); } +void tst_QSignalSpy::spyOnMetaMethod() +{ + QObject obj; + auto mo = obj.metaObject(); + + auto signalIndex = mo->indexOfSignal("objectNameChanged(QString)"); + QVERIFY(signalIndex != -1); + + auto signal = mo->method(signalIndex); + QVERIFY(signal.isValid()); + QCOMPARE(signal.methodType(), QMetaMethod::Signal); + + QSignalSpy spy(&obj, signal); + QVERIFY(spy.isValid()); + + obj.setObjectName("A new object name"); + QCOMPARE(spy.count(), 1); +} + +Q_DECLARE_METATYPE(QMetaMethod); +void tst_QSignalSpy::spyOnMetaMethod_invalid() +{ + QFETCH(QObject*, object); + QFETCH(QMetaMethod, signal); + + QSignalSpy spy(object, signal); + QVERIFY(!spy.isValid()); +} + +void tst_QSignalSpy::spyOnMetaMethod_invalid_data() +{ + QTest::addColumn<QObject*>("object"); + QTest::addColumn<QMetaMethod>("signal"); + + QTest::addRow("Invalid object") + << static_cast<QObject*>(nullptr) + << QMetaMethod(); + + QTest::addRow("Empty signal") + << new QObject(this) + << QMetaMethod(); + + QTest::addRow("Method is not a signal") + << new QObject(this) + << QObject::staticMetaObject.method(QObject::staticMetaObject.indexOfMethod("deleteLater()")); +} + QTEST_MAIN(tst_QSignalSpy) #include "tst_qsignalspy.moc" |