diff options
author | Dmitrii Akshintsev <dmitrii.akshintsev@qt.io> | 2024-04-16 17:13:19 +0200 |
---|---|---|
committer | Dmitrii Akshintsev <dmitrii.akshintsev@qt.io> | 2024-04-17 11:00:26 +0000 |
commit | 2c966b97be56557007f198ee906844f78ef2944a (patch) | |
tree | eea165af46ae9c483738a9129bc61f8e16cb394b | |
parent | 9c8577c12643bf222dc37a5ba2dc1d08dc168f8e (diff) |
QScxmlStateMachine add runtime warning
As suggested by Ulf, in addition to correcting the documentation
runtime warning will be helpful. This commit adds the warning
and a test for that
Change-Id: I6dbd727e493431d7d71efbc5b527df8d67d50dcd
Fixes: QTBUG-109371
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
-rw-r--r-- | src/scxml/qscxmlstatemachine.cpp | 6 | ||||
-rw-r--r-- | src/scxml/qscxmlstatemachine_p.h | 1 | ||||
-rw-r--r-- | tests/auto/statemachine/tst_statemachine.cpp | 19 |
3 files changed, 26 insertions, 0 deletions
diff --git a/src/scxml/qscxmlstatemachine.cpp b/src/scxml/qscxmlstatemachine.cpp index 71d35b3..04d3726 100644 --- a/src/scxml/qscxmlstatemachine.cpp +++ b/src/scxml/qscxmlstatemachine.cpp @@ -2262,12 +2262,18 @@ QBindable<QList<QScxmlInvokableService*>> QScxmlStateMachine::bindableInvokedSer \note Calling start() after stop() will not result in a full reset of its configuration yet, hence it is strongly advised not to do it. + \note Starting a finished machine yields a warning. + \sa runningChanged(), setRunning(), stop(), finished() */ void QScxmlStateMachine::start() { Q_D(QScxmlStateMachine); + if (d->isFinished()) { + qCWarning(qscxmlLog) << this << "Can't start finished machine"; + } + if (!parseErrors().isEmpty()) return; diff --git a/src/scxml/qscxmlstatemachine_p.h b/src/scxml/qscxmlstatemachine_p.h index 35fab46..3d18ffc 100644 --- a/src/scxml/qscxmlstatemachine_p.h +++ b/src/scxml/qscxmlstatemachine_p.h @@ -391,6 +391,7 @@ private: } bool isPaused() const { return m_runningState == Paused; } + bool isFinished() const { return m_runningState == Finished; } QScxmlInternal::StateMachineInfoProxy *m_infoSignalProxy; diff --git a/tests/auto/statemachine/tst_statemachine.cpp b/tests/auto/statemachine/tst_statemachine.cpp index 85d06c8..1aa74f7 100644 --- a/tests/auto/statemachine/tst_statemachine.cpp +++ b/tests/auto/statemachine/tst_statemachine.cpp @@ -31,6 +31,7 @@ private Q_SLOTS: void doneDotStateEvent(); void running(); + void restart(); void invokeStateMachine(); @@ -392,6 +393,24 @@ void tst_StateMachine::running() QCOMPARE(stateMachine->isRunning(), false); } +void tst_StateMachine::restart() +{ + QScopedPointer<QScxmlStateMachine> stateMachine( + QScxmlStateMachine::fromFile(QString(":/tst_statemachine/stateDotDoneEvent.scxml"))); + QVERIFY(!stateMachine.isNull()); + + QSignalSpy finishedSpy(stateMachine.data(), SIGNAL(finished())); + + stateMachine->start(); + finishedSpy.wait(5000); + QCOMPARE(finishedSpy.size(), 1); + QCOMPARE(stateMachine->activeStateNames(true).size(), 1); + QVERIFY(stateMachine->activeStateNames(true).contains(QLatin1String("success"))); + + QTest::ignoreMessage(QtWarningMsg, QRegularExpression("(.*)Can't start finished machine")); + stateMachine->start(); +} + void tst_StateMachine::invokeStateMachine() { QScopedPointer<QScxmlStateMachine> stateMachine( |