summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Arne Petersen <jan.petersen@kdab.com>2016-11-19 06:55:15 +0100
committerJan Arne Petersen <jan.petersen@kdab.com>2016-11-22 08:18:52 +0000
commit9e85ae4674ed44e9c04dedb4ea4959833b6322cd (patch)
tree03daa97b7cb84a4c9ae276f467bf09b01b1dcab4
parenta37dd9eac89cb4f3557b8c6c4e0d06bc8b54f348 (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.cpp21
-rw-r--r--src/scxml/qscxmlstatemachineinfo_p.h1
-rw-r--r--tests/auto/statemachineinfo/tst_statemachineinfo.cpp9
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,