diff options
author | Erik Verbruggen <erik.verbruggen@theqtcompany.com> | 2016-06-08 13:33:26 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@qt.io> | 2016-06-09 14:13:57 +0000 |
commit | 17899954bffd902b61ee4c9d339095cb618e4346 (patch) | |
tree | 6d4a74f2c8e41f3760bf9df4ec982af48cf2b798 /tests | |
parent | 60b5508b3f0fabee545e8cfd907ed4875ed55ffc (diff) |
Replace the QStateMachine-based implementation.
Under the 'hood a table-based state machine is now used instead of the
QStateMachine. The advantage is that states and transitions are no
longer QObjects but integers (so no (private) object allocations), and
we're no longer hijacking the QStateMachinePrivate to work around some
implementation details.
Change-Id: I47ab47ab01cbb2204b9ca0e4cdd6a72faf724ce3
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/compiled/tst_compiled.cpp | 11 | ||||
-rw-r--r-- | tests/auto/scion/tst_scion.cpp | 7 | ||||
-rw-r--r-- | tests/auto/statemachine/eventoccurred.scxml | 16 | ||||
-rw-r--r-- | tests/auto/statemachine/tst_statemachine.cpp | 31 |
4 files changed, 37 insertions, 28 deletions
diff --git a/tests/auto/compiled/tst_compiled.cpp b/tests/auto/compiled/tst_compiled.cpp index 49174e3..c6ee894 100644 --- a/tests/auto/compiled/tst_compiled.cpp +++ b/tests/auto/compiled/tst_compiled.cpp @@ -54,15 +54,16 @@ void tst_Compiled::stateNames() { ids1 stateMachine; + // The states have to be appear in document order: QStringList ids1States({ - "_", - "_VALID", - "__valid", - "foo-bar", "foo.bar", + "foo-bar", "foo_bar", - "n_0xe4_l", + "_", "näl", + "n_0xe4_l", + "_VALID", + "__valid", "qÿ̀i", }); diff --git a/tests/auto/scion/tst_scion.cpp b/tests/auto/scion/tst_scion.cpp index c06ac1b..5b7bded 100644 --- a/tests/auto/scion/tst_scion.cpp +++ b/tests/auto/scion/tst_scion.cpp @@ -55,8 +55,6 @@ static QSet<QString> testFailOnRun = QSet<QString>() << QLatin1String("w3c-ecma/test178.txml") // We do not support the optional basic http event i/o processor. << QLatin1String("w3c-ecma/test201.txml") - << QLatin1String("w3c-ecma/test364.txml") // initial attribute on <state> - << QLatin1String("w3c-ecma/test388.txml") // Qt refuses to set an initial state to a "deep" state << QLatin1String("w3c-ecma/test230.txml") << QLatin1String("w3c-ecma/test250.txml") << QLatin1String("w3c-ecma/test307.txml") @@ -387,7 +385,10 @@ bool TestScion::runTest(QScxmlStateMachine *stateMachine, const QJsonObject &tes return playEvents(stateMachine, testDescription); } else { // Wait for all events (delayed or otherwise) to propagate. - finishedSpy.fastWait(); // Some tests don't have a final state, so don't check for the result. + if (stateMachine->isRunning()) { + finishedSpy.fastWait(); // Some tests don't have a final state, so don't check for the + // result + } return verifyStates(stateMachine, testDescription, QLatin1String("initialConfiguration"), 0); } } diff --git a/tests/auto/statemachine/eventoccurred.scxml b/tests/auto/statemachine/eventoccurred.scxml index 87aaf41..ffceb3f 100644 --- a/tests/auto/statemachine/eventoccurred.scxml +++ b/tests/auto/statemachine/eventoccurred.scxml @@ -41,13 +41,13 @@ <transition event="timeout" target="final"/> </state> <final id="final"/> - </state> - <!-- - The done.state.* events are internal, so expose them to the spy too by re-sending them as - external events: - --> - <transition event="done.state.*" cond="_event.type === 'internal'"> - <send eventexpr="_event.name"/> - </transition> + <!-- + The done.state.* events are internal, so expose them to the spy too by re-sending them as + external events: + --> + <transition event="done.state.*" cond="_event.type === 'internal'"> + <send eventexpr="_event.name"/> + </transition> + </state> </scxml> diff --git a/tests/auto/statemachine/tst_statemachine.cpp b/tests/auto/statemachine/tst_statemachine.cpp index fc20118..e2e0d22 100644 --- a/tests/auto/statemachine/tst_statemachine.cpp +++ b/tests/auto/statemachine/tst_statemachine.cpp @@ -62,18 +62,18 @@ void tst_StateMachine::stateNames_data() << (QStringList() << QString("a1") << QString("a2") << QString("final")); QTest::newRow("stateNames-notCompressed") << QString(":/tst_statemachine/statenames.scxml") << false - << (QStringList() << QString("a") << QString("a1") << QString("a2") << QString("b") << QString("final") << QString("top")); + << (QStringList() << QString("top") << QString("a") << QString("a1") << QString("a2") << QString("b") << QString("final")); QTest::newRow("stateNamesNested-compressed") << QString(":/tst_statemachine/statenamesnested.scxml") << true << (QStringList() << QString("a") << QString("b")); QTest::newRow("stateNamesNested-notCompressed") << QString(":/tst_statemachine/statenamesnested.scxml") << false - << (QStringList() << QString("a") << QString("b") << QString("super_top")); + << (QStringList() << QString("super_top") << QString("a") << QString("b")); QTest::newRow("ids1") << QString(":/tst_statemachine/ids1.scxml") << false - << (QStringList() << QString("_") << QString("foo-bar") - << QString("foo.bar") << QString("foo_bar")); + << (QStringList() << QString("foo.bar") << QString("foo-bar") + << QString("foo_bar") << QString("_")); } void tst_StateMachine::stateNames() @@ -100,13 +100,13 @@ void tst_StateMachine::activeStateNames_data() << (QStringList() << QString("a1") << QString("final")); QTest::newRow("stateNames-notCompressed") << QString(":/tst_statemachine/statenames.scxml") << false - << (QStringList() << QString("a") << QString("a1") << QString("b") << QString("final") << QString("top")); + << (QStringList() << QString("top") << QString("a") << QString("a1") << QString("b") << QString("final")); QTest::newRow("stateNamesNested-compressed") << QString(":/tst_statemachine/statenamesnested.scxml") << true - << (QStringList() << QString("a")<< QString("b")); + << (QStringList() << QString("a") << QString("b")); QTest::newRow("stateNamesNested-notCompressed") << QString(":/tst_statemachine/statenamesnested.scxml") << false - << (QStringList() << QString("a") << QString("b") << QString("super_top")); + << (QStringList() << QString("super_top") << QString("a") << QString("b")); } void tst_StateMachine::activeStateNames() @@ -150,12 +150,19 @@ void tst_StateMachine::eventOccurred() finishedSpy.wait(5000); - QCOMPARE(eventOccurredSpy.count(), 4); - QCOMPARE(qvariant_cast<QScxmlEvent>(eventOccurredSpy.at(0).at(0)).name(), QLatin1String("internalEvent2")); - QCOMPARE(qvariant_cast<QScxmlEvent>(eventOccurredSpy.at(1).at(0)).name(), QLatin1String("externalEvent")); - QCOMPARE(qvariant_cast<QScxmlEvent>(eventOccurredSpy.at(2).at(0)).name(), QLatin1String("timeout")); - QCOMPARE(qvariant_cast<QScxmlEvent>(eventOccurredSpy.at(3).at(0)).name(), QLatin1String("done.state.top")); + auto event = [&eventOccurredSpy](int eventIndex) -> QScxmlEvent { + return qvariant_cast<QScxmlEvent>(eventOccurredSpy.at(eventIndex).at(0)); + }; + QCOMPARE(eventOccurredSpy.count(), 4); + QCOMPARE(event(0).name(), QLatin1String("internalEvent2")); + QCOMPARE(event(0).eventType(), QScxmlEvent::ExternalEvent); + QCOMPARE(event(1).name(), QLatin1String("externalEvent")); + QCOMPARE(event(1).eventType(), QScxmlEvent::ExternalEvent); + QCOMPARE(event(2).name(), QLatin1String("timeout")); + QCOMPARE(event(2).eventType(), QScxmlEvent::ExternalEvent); + QCOMPARE(event(3).name(), QLatin1String("done.state.top")); + QCOMPARE(event(3).eventType(), QScxmlEvent::ExternalEvent); QCOMPARE(externalEventOccurredSpy.count(), 1); QCOMPARE(qvariant_cast<QScxmlEvent>(externalEventOccurredSpy.at(0).at(0)).name(), QLatin1String("externalEvent")); |