diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2016-07-07 15:41:22 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2016-07-13 13:45:10 +0000 |
commit | 7b94a6394ed744c1132a679ac699231b097f416d (patch) | |
tree | 4158eeafd17369f0e582ba6edf57dd60ec376967 /tests | |
parent | e971720ccd51781ad93c74db94c72817a7cd2068 (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.cpp | 57 |
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() |