diff options
author | Vitaly Fanaskov <vitaly.fanaskov@qt.io> | 2019-08-12 14:36:06 +0200 |
---|---|---|
committer | Vitaly Fanaskov <vitaly.fanaskov@qt.io> | 2019-08-13 17:26:18 +0200 |
commit | e8c7124768b0e3e556a8ae53629478284bbdca8e (patch) | |
tree | a29ebb5ada09c6a91651c455970fb6b858232d57 /tests | |
parent | c29a136804f5952c0b4c15920f3ab4032c21573c (diff) |
Introduce QSignalSpy constructor allows to spy on a meta method
This functionality is especially convenient if meta-object system is
heavily used in a test. For example, if you need to test a bunch of
signals based on their names and/or argument types.
Change-Id: I09a4ecbbd3d0859b5fd466d9dde7679804eb7614
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests')
-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" |