diff options
author | Jan Arne Petersen <jan.petersen@kdab.com> | 2016-11-19 06:55:15 +0100 |
---|---|---|
committer | Jan Arne Petersen <jan.petersen@kdab.com> | 2016-11-22 08:18:52 +0000 |
commit | 9e85ae4674ed44e9c04dedb4ea4959833b6322cd (patch) | |
tree | 03daa97b7cb84a4c9ae276f467bf09b01b1dcab4 | |
parent | a37dd9eac89cb4f3557b8c6c4e0d06bc8b54f348 (diff) |
Add QScxmlStateMachineInfo::transitionEvents()
Also add corresponding test for the new method.
Change-Id: I09c4bb59df06bd33ae8a8667194d5f5d96765e2e
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | src/scxml/qscxmlstatemachineinfo.cpp | 21 | ||||
-rw-r--r-- | src/scxml/qscxmlstatemachineinfo_p.h | 1 | ||||
-rw-r--r-- | tests/auto/statemachineinfo/tst_statemachineinfo.cpp | 9 |
3 files changed, 31 insertions, 0 deletions
diff --git a/src/scxml/qscxmlstatemachineinfo.cpp b/src/scxml/qscxmlstatemachineinfo.cpp index 94cc939..7dea3f2 100644 --- a/src/scxml/qscxmlstatemachineinfo.cpp +++ b/src/scxml/qscxmlstatemachineinfo.cpp @@ -198,6 +198,27 @@ QVector<QScxmlStateMachineInfo::StateId> QScxmlStateMachineInfo::transitionTarge return targets; } +QVector<QString> QScxmlStateMachineInfo::transitionEvents(TransitionId transitionId) const +{ + Q_D(const QScxmlStateMachineInfo); + + QVector<QString> events; + if (transitionId < 0 || transitionId >= d->stateTable()->transitionCount) + return events; + + auto transition = d->stateTable()->transition(transitionId); + if (transition.events == QScxmlExecutableContent::StateTable::InvalidIndex) + return events; + + auto eventIds = d->stateTable()->array(transition.events); + events.reserve(eventIds.size()); + for (auto eventId : eventIds) { + events.append(d->stateMachinePrivate()->m_tableData->string(eventId)); + } + + return events; +} + QVector<QScxmlStateMachineInfo::StateId> QScxmlStateMachineInfo::configuration() const { Q_D(const QScxmlStateMachineInfo); diff --git a/src/scxml/qscxmlstatemachineinfo_p.h b/src/scxml/qscxmlstatemachineinfo_p.h index 45d5fb7..e0877a3 100644 --- a/src/scxml/qscxmlstatemachineinfo_p.h +++ b/src/scxml/qscxmlstatemachineinfo_p.h @@ -95,6 +95,7 @@ public: // methods TransitionType transitionType(TransitionId transitionId) const; StateId transitionSource(TransitionId transitionId) const; QVector<StateId> transitionTargets(TransitionId transitionId) const; + QVector<QString> transitionEvents(TransitionId transitionId) const; QVector<StateId> configuration() const; Q_SIGNALS: diff --git a/tests/auto/statemachineinfo/tst_statemachineinfo.cpp b/tests/auto/statemachineinfo/tst_statemachineinfo.cpp index 1c33847..9814dbf 100644 --- a/tests/auto/statemachineinfo/tst_statemachineinfo.cpp +++ b/tests/auto/statemachineinfo/tst_statemachineinfo.cpp @@ -122,24 +122,31 @@ void tst_StateMachineInfo::checkInfo() QCOMPARE(info->stateType(info->transitionSource(transitions.at(0))), QScxmlStateMachineInfo::StateMachineRootState); QCOMPARE(info->transitionTargets(transitions.at(0)).size(), 0); + QCOMPARE(info->transitionEvents(transitions.at(0)).size(), 0); // <anon>->next QCOMPARE(info->transitionType(transitions.at(1)), QScxmlStateMachineInfo::ExternalTransition); QCOMPARE(info->transitionSource(transitions.at(1)), states.at(0)); QCOMPARE(info->transitionTargets(transitions.at(1)).size(), 1); QCOMPARE(info->transitionTargets(transitions.at(1)).at(0), states.at(1)); + QCOMPARE(info->transitionEvents(transitions.at(1)).size(), 1); + QCOMPARE(info->transitionEvents(transitions.at(1)).at(0), QStringLiteral("step")); // a->theEnd QCOMPARE(info->transitionType(transitions.at(2)), QScxmlStateMachineInfo::ExternalTransition); QCOMPARE(info->transitionSource(transitions.at(2)), states.at(2)); QCOMPARE(info->transitionTargets(transitions.at(2)).size(), 1); QCOMPARE(info->transitionTargets(transitions.at(2)).at(0), states.at(4)); + QCOMPARE(info->transitionEvents(transitions.at(2)).size(), 1); + QCOMPARE(info->transitionEvents(transitions.at(2)).at(0), QStringLiteral("step")); // b->theEnd QCOMPARE(info->transitionType(transitions.at(3)), QScxmlStateMachineInfo::InternalTransition); QCOMPARE(info->transitionSource(transitions.at(3)), states.at(3)); QCOMPARE(info->transitionTargets(transitions.at(3)).size(), 1); QCOMPARE(info->transitionTargets(transitions.at(3)).at(0), states.at(4)); + QCOMPARE(info->transitionEvents(transitions.at(3)).size(), 1); + QCOMPARE(info->transitionEvents(transitions.at(3)).at(0), QStringLiteral("step")); // initial transition that activates the first (anonymous) state QCOMPARE(info->transitionType(transitions.at(4)), QScxmlStateMachineInfo::SyntheticTransition); @@ -147,6 +154,7 @@ void tst_StateMachineInfo::checkInfo() QScxmlStateMachineInfo::StateMachineRootState); QCOMPARE(info->transitionTargets(transitions.at(4)).size(), 1); QCOMPARE(info->transitionTargets(transitions.at(4)).at(0), states.at(0)); + QCOMPARE(info->transitionEvents(transitions.at(4)).size(), 0); // "initial" transition in the next state that activates all sub-states QCOMPARE(info->transitionType(transitions.at(5)), QScxmlStateMachineInfo::SyntheticTransition); @@ -154,6 +162,7 @@ void tst_StateMachineInfo::checkInfo() QCOMPARE(info->transitionTargets(transitions.at(5)).size(), 2); QCOMPARE(info->transitionTargets(transitions.at(5)).at(0), states.at(2)); QCOMPARE(info->transitionTargets(transitions.at(5)).at(1), states.at(3)); + QCOMPARE(info->transitionEvents(transitions.at(5)).size(), 0); Recorder recorder; QObject::connect(info, &QScxmlStateMachineInfo::statesEntered, |