diff options
author | Kevin Funk <kevin.funk@kdab.com> | 2016-11-17 23:02:26 +0100 |
---|---|---|
committer | Jan Arne Petersen <jan.petersen@kdab.com> | 2016-11-22 15:22:55 +0000 |
commit | e8bee4bd6f6f6373806704fef7b9618372f2130c (patch) | |
tree | 0fd1f0554b1da9b23a82e60cd06251ddb197f151 | |
parent | b187f0bf115847c09cee70c74c2d4fdfc6a292d8 (diff) |
Add QScxmlStateMachineInfo::initialTransition()
Also add tests
Change-Id: Ib94bd6c82129e77378caf2c53c3c8d443c6cc334
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | src/scxml/qscxmlstatemachineinfo.cpp | 13 | ||||
-rw-r--r-- | src/scxml/qscxmlstatemachineinfo_p.h | 1 | ||||
-rw-r--r-- | tests/auto/statemachineinfo/tst_statemachineinfo.cpp | 15 |
3 files changed, 29 insertions, 0 deletions
diff --git a/src/scxml/qscxmlstatemachineinfo.cpp b/src/scxml/qscxmlstatemachineinfo.cpp index 154cea1..d81956a 100644 --- a/src/scxml/qscxmlstatemachineinfo.cpp +++ b/src/scxml/qscxmlstatemachineinfo.cpp @@ -175,6 +175,19 @@ QScxmlStateMachineInfo::TransitionType QScxmlStateMachineInfo::transitionType(QS } } +QScxmlStateMachineInfo::TransitionId QScxmlStateMachineInfo::initialTransition(StateId stateId) const +{ + Q_D(const QScxmlStateMachineInfo); + + if (stateId == InvalidStateId) + return d->stateTable()->initialTransition; + + if (stateId < 0 || stateId >= d->stateTable()->stateCount) + return InvalidTransitionId; + + return d->stateTable()->state(stateId).initialTransition; +} + QScxmlStateMachineInfo::StateId QScxmlStateMachineInfo::transitionSource(TransitionId transitionId) const { Q_D(const QScxmlStateMachineInfo); diff --git a/src/scxml/qscxmlstatemachineinfo_p.h b/src/scxml/qscxmlstatemachineinfo_p.h index 04d1967..7a8ca50 100644 --- a/src/scxml/qscxmlstatemachineinfo_p.h +++ b/src/scxml/qscxmlstatemachineinfo_p.h @@ -97,6 +97,7 @@ public: // methods StateId stateParent(StateId stateId) const; StateType stateType(int stateId) const; QVector<StateId> stateChildren(StateId stateId) const; + TransitionId initialTransition(StateId stateId) const; TransitionType transitionType(TransitionId transitionId) const; StateId transitionSource(TransitionId transitionId) const; QVector<StateId> transitionTargets(TransitionId transitionId) const; diff --git a/tests/auto/statemachineinfo/tst_statemachineinfo.cpp b/tests/auto/statemachineinfo/tst_statemachineinfo.cpp index efd1840..b1ecfe7 100644 --- a/tests/auto/statemachineinfo/tst_statemachineinfo.cpp +++ b/tests/auto/statemachineinfo/tst_statemachineinfo.cpp @@ -122,6 +122,21 @@ void tst_StateMachineInfo::checkInfo() QCOMPARE(info->stateType(states.at(3)), QScxmlStateMachineInfo::NormalState); QCOMPARE(info->stateType(states.at(4)), QScxmlStateMachineInfo::FinalState); + QCOMPARE(info->stateChildren(QScxmlStateMachineInfo::InvalidStateId), + QVector<int>() << 0 << 1 << 4); + QCOMPARE(info->stateChildren(states.at(0)), QVector<int>()); + QCOMPARE(info->stateChildren(states.at(1)), QVector<int>() << 2 << 3); + QCOMPARE(info->stateChildren(states.at(2)), QVector<int>()); + QCOMPARE(info->stateChildren(states.at(3)), QVector<int>()); + QCOMPARE(info->stateChildren(states.at(4)), QVector<int>()); + + QCOMPARE(info->initialTransition(QScxmlStateMachineInfo::InvalidStateId), 4); + QCOMPARE(info->initialTransition(states.at(0)), static_cast<int>(QScxmlStateMachineInfo::InvalidTransitionId)); + QCOMPARE(info->initialTransition(states.at(1)), 5); + QCOMPARE(info->initialTransition(states.at(2)), static_cast<int>(QScxmlStateMachineInfo::InvalidTransitionId)); + QCOMPARE(info->initialTransition(states.at(3)), static_cast<int>(QScxmlStateMachineInfo::InvalidTransitionId)); + QCOMPARE(info->initialTransition(states.at(4)), static_cast<int>(QScxmlStateMachineInfo::InvalidTransitionId)); + auto transitions = info->allTransitions(); QCOMPARE(transitions.size(), 6); |