summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@theqtcompany.com>2016-06-08 13:33:26 +0200
committerErik Verbruggen <erik.verbruggen@qt.io>2016-06-09 14:13:57 +0000
commit17899954bffd902b61ee4c9d339095cb618e4346 (patch)
tree6d4a74f2c8e41f3760bf9df4ec982af48cf2b798 /tests
parent60b5508b3f0fabee545e8cfd907ed4875ed55ffc (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.cpp11
-rw-r--r--tests/auto/scion/tst_scion.cpp7
-rw-r--r--tests/auto/statemachine/eventoccurred.scxml16
-rw-r--r--tests/auto/statemachine/tst_statemachine.cpp31
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"));