summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Funk <kevin.funk@kdab.com>2016-11-17 23:02:26 +0100
committerJan Arne Petersen <jan.petersen@kdab.com>2016-11-22 15:22:55 +0000
commite8bee4bd6f6f6373806704fef7b9618372f2130c (patch)
tree0fd1f0554b1da9b23a82e60cd06251ddb197f151
parentb187f0bf115847c09cee70c74c2d4fdfc6a292d8 (diff)
Add QScxmlStateMachineInfo::initialTransition()
Also add tests Change-Id: Ib94bd6c82129e77378caf2c53c3c8d443c6cc334 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r--src/scxml/qscxmlstatemachineinfo.cpp13
-rw-r--r--src/scxml/qscxmlstatemachineinfo_p.h1
-rw-r--r--tests/auto/statemachineinfo/tst_statemachineinfo.cpp15
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);