tests/auto/qstatemachine/tst_qstatemachine.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
equal deleted inserted replaced
18:2f34d5167611 19:fcece45ef507
   153     void errorStateEntersParentFirst();
   153     void errorStateEntersParentFirst();
   154     void customErrorStateIsNull();
   154     void customErrorStateIsNull();
   155     void clearError();
   155     void clearError();
   156     void historyStateHasNowhereToGo();
   156     void historyStateHasNowhereToGo();
   157     void historyStateAsInitialState();
   157     void historyStateAsInitialState();
       
   158     void historyStateAfterRestart();
   158     void brokenStateIsNeverEntered();
   159     void brokenStateIsNeverEntered();
   159     void customErrorStateNotInGraph();
   160     void customErrorStateNotInGraph();
   160     void transitionToStateNotInGraph();
   161     void transitionToStateNotInGraph();
   161     void restoreProperties();
   162     void restoreProperties();
   162 
   163 
   902     QCOMPARE(machine.isRunning(), true);
   903     QCOMPARE(machine.isRunning(), true);
   903     QCOMPARE(machine.configuration().count(), 1);
   904     QCOMPARE(machine.configuration().count(), 1);
   904     QVERIFY(machine.configuration().contains(machine.errorState()));
   905     QVERIFY(machine.configuration().contains(machine.errorState()));
   905     QCOMPARE(machine.error(), QStateMachine::NoDefaultStateInHistoryStateError);
   906     QCOMPARE(machine.error(), QStateMachine::NoDefaultStateInHistoryStateError);
   906     QCOMPARE(machine.errorString(), QString::fromLatin1("Missing default state in history state 'historyState'"));
   907     QCOMPARE(machine.errorString(), QString::fromLatin1("Missing default state in history state 'historyState'"));
       
   908 }
       
   909 
       
   910 void tst_QStateMachine::historyStateAfterRestart()
       
   911 {
       
   912     // QTBUG-8842
       
   913     QStateMachine machine;
       
   914 
       
   915     QState *s1 = new QState(&machine);
       
   916     machine.setInitialState(s1);
       
   917     QState *s2 = new QState(&machine);
       
   918     QState *s21 = new QState(s2);
       
   919     QState *s22 = new QState(s2);
       
   920     QHistoryState *s2h = new QHistoryState(s2);
       
   921     s2h->setDefaultState(s21);
       
   922     s1->addTransition(new EventTransition(QEvent::User, s2h));
       
   923     s21->addTransition(new EventTransition(QEvent::User, s22));
       
   924     s2->addTransition(new EventTransition(QEvent::User, s1));
       
   925 
       
   926     for (int x = 0; x < 2; ++x) {
       
   927         QSignalSpy startedSpy(&machine, SIGNAL(started()));
       
   928         machine.start();
       
   929         QTRY_COMPARE(startedSpy.count(), 1);
       
   930         QCOMPARE(machine.configuration().count(), 1);
       
   931         QVERIFY(machine.configuration().contains(s1));
       
   932 
       
   933         // s1 -> s2h -> s21 (default state)
       
   934         machine.postEvent(new QEvent(QEvent::User));
       
   935         QCoreApplication::processEvents();
       
   936         QCOMPARE(machine.configuration().count(), 2);
       
   937         QVERIFY(machine.configuration().contains(s2));
       
   938         // This used to fail on the 2nd run because the
       
   939         // history had not been cleared.
       
   940         QVERIFY(machine.configuration().contains(s21));
       
   941 
       
   942         // s21 -> s22
       
   943         machine.postEvent(new QEvent(QEvent::User));
       
   944         QCoreApplication::processEvents();
       
   945         QCOMPARE(machine.configuration().count(), 2);
       
   946         QVERIFY(machine.configuration().contains(s2));
       
   947         QVERIFY(machine.configuration().contains(s22));
       
   948 
       
   949         // s2 -> s1 (s22 saved in s2h)
       
   950         machine.postEvent(new QEvent(QEvent::User));
       
   951         QCoreApplication::processEvents();
       
   952         QCOMPARE(machine.configuration().count(), 1);
       
   953         QVERIFY(machine.configuration().contains(s1));
       
   954 
       
   955         // s1 -> s2h -> s22 (saved state)
       
   956         machine.postEvent(new QEvent(QEvent::User));
       
   957         QCoreApplication::processEvents();
       
   958         QCOMPARE(machine.configuration().count(), 2);
       
   959         QVERIFY(machine.configuration().contains(s2));
       
   960         QVERIFY(machine.configuration().contains(s22));
       
   961 
       
   962         QSignalSpy stoppedSpy(&machine, SIGNAL(stopped()));
       
   963         machine.stop();
       
   964         QTRY_COMPARE(stoppedSpy.count(), 1);
       
   965     }
   907 }
   966 }
   908 
   967 
   909 void tst_QStateMachine::brokenStateIsNeverEntered()
   968 void tst_QStateMachine::brokenStateIsNeverEntered()
   910 {
   969 {
   911     QStateMachine machine;
   970     QStateMachine machine;