summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorUlf Hermann <ulf.hermann@qt.io>2016-07-07 15:41:22 +0200
committerUlf Hermann <ulf.hermann@qt.io>2016-07-13 13:45:10 +0000
commit7b94a6394ed744c1132a679ac699231b097f416d (patch)
tree4158eeafd17369f0e582ba6edf57dd60ec376967 /tests
parente971720ccd51781ad93c74db94c72817a7cd2068 (diff)
Provide Qt5-style syntax for connectToState
We should not force people to use the string-based connection syntax. Using modern C++ we can add more convenience here. Unfortunately we have to duplicate some code from QMetaObject, but this is worth it. Change-Id: I4daa1f7cfea9feb3de0159636a508ee64a849f55 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/statemachine/tst_statemachine.cpp57
1 files changed, 52 insertions, 5 deletions
diff --git a/tests/auto/statemachine/tst_statemachine.cpp b/tests/auto/statemachine/tst_statemachine.cpp
index e2e0d22..b3c7251 100644
--- a/tests/auto/statemachine/tst_statemachine.cpp
+++ b/tests/auto/statemachine/tst_statemachine.cpp
@@ -45,7 +45,7 @@ private Q_SLOTS:
void stateNames();
void activeStateNames_data();
void activeStateNames();
- void connectToFinal();
+ void connections();
void eventOccurred();
void doneDotStateEvent();
@@ -127,13 +127,60 @@ void tst_StateMachine::activeStateNames()
QCOMPARE(stateMachine->activeStateNames(compressed), expectedStates);
}
-void tst_StateMachine::connectToFinal()
+class Receiver : public QObject {
+ Q_OBJECT
+public slots:
+ void a(bool enabled)
+ {
+ aReached = aReached || enabled;
+ }
+
+ void b(bool enabled)
+ {
+ bReached = bReached || enabled;
+ }
+
+public:
+ bool aReached = false;
+ bool bReached = false;
+
+};
+
+void tst_StateMachine::connections()
{
- QScopedPointer<QScxmlStateMachine> stateMachine(QScxmlStateMachine::fromFile(QString(":/tst_statemachine/statenames.scxml")));
+ QScopedPointer<QScxmlStateMachine> stateMachine(
+ QScxmlStateMachine::fromFile(QString(":/tst_statemachine/statenames.scxml")));
QVERIFY(!stateMachine.isNull());
+ Receiver receiver;
+
+ bool a1Reached = false;
+ bool finalReached = false;
+ QMetaObject::Connection a = stateMachine->connectToState("a", &receiver, &Receiver::a);
+ QVERIFY(a);
+ QMetaObject::Connection b = stateMachine->connectToState("b", &receiver, SLOT(b(bool)));
+ QVERIFY(b);
+ QMetaObject::Connection a1 = stateMachine->connectToState("a1", &receiver,
+ [&a1Reached](bool enabled) {
+ a1Reached = a1Reached || enabled;
+ });
+ QVERIFY(a1);
+ QMetaObject::Connection final = stateMachine->connectToState("final",
+ [&finalReached](bool enabled) {
+ finalReached = finalReached || enabled;
+ });
+ QVERIFY(final);
+
+ stateMachine->start();
+
+ QTRY_VERIFY(a1Reached);
+ QTRY_VERIFY(finalReached);
+ QTRY_VERIFY(receiver.aReached);
+ QTRY_VERIFY(receiver.bReached);
- QState dummy;
- QVERIFY(stateMachine->connectToState(QString("final"), &dummy, SLOT(deleteLater())));
+ QVERIFY(disconnect(a));
+ QVERIFY(disconnect(b));
+ QVERIFY(disconnect(a1));
+ QVERIFY(disconnect(final));
}
void tst_StateMachine::eventOccurred()