Write test to confirm QStateMachine calls connectNotify().
authorMitch Curtis <mitch.curtis@nokia.com>
Fri, 1 Jun 2012 12:31:12 +0000 (14:31 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 5 Jun 2012 14:01:29 +0000 (16:01 +0200)
Task-number: QTBUG-16628
Change-Id: I77535fcb9a6ae306df8ccd670ee1bfc32721d66a
Reviewed-by: Kent Hansen <kent.hansen@nokia.com>
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@nokia.com>
tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp

index 34e9b74..c5d33e7 100644 (file)
@@ -176,6 +176,7 @@ private slots:
     void stopInEventTest_data();
     void stopInEventTest();
 
+    void testIncrementReceivers();
     void initialStateIsEnteredBeforeStartedEmitted();
 };
 
@@ -3908,6 +3909,40 @@ void tst_QStateMachine::stopInEventTest()
     QVERIFY(machine.configuration().contains(s1));
 }
 
+class IncrementReceiversTest : public QObject
+{
+    Q_OBJECT
+signals:
+    void mySignal();
+public:
+    virtual void connectNotify(const QMetaMethod &signal)
+    {
+        signalList.append(signal);
+    }
+
+    QList<QMetaMethod> signalList;
+};
+
+void tst_QStateMachine::testIncrementReceivers()
+{
+    QStateMachine machine;
+    QState *s1 = new QState(&machine);
+    machine.setInitialState(s1);
+    QFinalState *s2 = new QFinalState(&machine);
+
+    IncrementReceiversTest testObject;
+    s1->addTransition(&testObject, SIGNAL(mySignal()), s2);
+
+    QSignalSpy finishedSpy(&machine, SIGNAL(finished()));
+    machine.start();
+
+    QMetaObject::invokeMethod(&testObject, "mySignal", Qt::QueuedConnection);
+
+    QTRY_COMPARE(finishedSpy.count(), 1);
+    QCOMPARE(testObject.signalList.size(), 1);
+    QCOMPARE(testObject.signalList.at(0), QMetaMethod::fromSignal(&IncrementReceiversTest::mySignal));
+}
+
 void tst_QStateMachine::initialStateIsEnteredBeforeStartedEmitted()
 {
     QStateMachine machine;