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; |