bool QStateMachinePrivate::stateExitLessThan(QAbstractState *s1, QAbstractState *s2)
{
if (s1->parent() == s2->parent()) {
- return s1->parent()->children().indexOf(s1)
- < s2->parent()->children().indexOf(s2);
+ return s2->parent()->children().indexOf(s2)
+ < s1->parent()->children().indexOf(s1);
} else if (isDescendantOf(s1, s2)) {
return true;
} else if (isDescendantOf(s2, s1)) {
QStateMachinePrivate *mach = QStateMachinePrivate::get(s1->machine());
QState *lca = mach->findLCA(QList<QAbstractState*>() << s1 << s2);
Q_ASSERT(lca != 0);
- return (indexOfDescendant(lca, s1) < indexOfDescendant(lca, s2));
+ return (indexOfDescendant(lca, s2) < indexOfDescendant(lca, s1));
}
}
};
TestState(QState *parent)
: QState(parent) {}
+ TestState(ChildMode mode)
+ : QState(mode) {}
QList<QPair<int, Event> > events;
protected:
virtual void onEntry(QEvent *) {
{
QStateMachine machine;
- QState *s1 = new QState(QState::ParallelStates);
+ TestState *s1 = new TestState(QState::ParallelStates);
QCOMPARE(s1->childMode(), QState::ParallelStates);
TestState *s1_1 = new TestState(s1);
QState *s1_1_1 = new QState(s1_1);
QCOMPARE(machine.configuration().size(), 1);
QVERIFY(machine.configuration().contains(s2));
+ QCOMPARE(s1->events.count(), 2);
+ // s1 is entered
+ QCOMPARE(s1->events.at(0).first, 0);
+ QCOMPARE(s1->events.at(0).second, TestState::Entry);
// s1_1 is entered
QCOMPARE(s1_1->events.count(), 2);
- QCOMPARE(s1_1->events.at(0).first, 0);
+ QCOMPARE(s1_1->events.at(0).first, 1);
QCOMPARE(s1_1->events.at(0).second, TestState::Entry);
// s1_2 is entered
- QCOMPARE(s1_2->events.at(0).first, 1);
+ QCOMPARE(s1_2->events.at(0).first, 2);
QCOMPARE(s1_2->events.at(0).second, TestState::Entry);
- // s1_1 is exited
- QCOMPARE(s1_1->events.at(1).first, 2);
- QCOMPARE(s1_1->events.at(1).second, TestState::Exit);
// s1_2 is exited
QCOMPARE(s1_2->events.at(1).first, 3);
QCOMPARE(s1_2->events.at(1).second, TestState::Exit);
+ // s1_1 is exited
+ QCOMPARE(s1_1->events.at(1).first, 4);
+ QCOMPARE(s1_1->events.at(1).second, TestState::Exit);
+ // s1 is exited
+ QCOMPARE(s1->events.at(1).first, 5);
+ QCOMPARE(s1->events.at(1).second, TestState::Exit);
}
void tst_QStateMachine::parallelRootState()