summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
authorStephen Kelly <stephen.kelly@kdab.com>2012-07-09 09:56:58 +0200
committerQt by Nokia <qt-info@nokia.com>2012-07-13 01:51:47 +0200
commitf108fceb2c548687a115ec7ba6186f674db34a02 (patch)
tree4be2223be614bbdd98d5b9a9c5f81ae24ccfb32b /tests/auto/corelib
parent536ec793b69c16611e73cff4360c6f49b644f740 (diff)
Make it possible to connect to QAbstract{State,Transtion} private signals.
Use the same trick as used for private signals in the models. Change-Id: I4235788490cae0e3d554565621d145652dc5b0ca Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/statemachine/qstate/tst_qstate.cpp121
1 files changed, 121 insertions, 0 deletions
diff --git a/tests/auto/corelib/statemachine/qstate/tst_qstate.cpp b/tests/auto/corelib/statemachine/qstate/tst_qstate.cpp
index 841a111070..ee87b3633e 100644
--- a/tests/auto/corelib/statemachine/qstate/tst_qstate.cpp
+++ b/tests/auto/corelib/statemachine/qstate/tst_qstate.cpp
@@ -57,6 +57,7 @@ private slots:
void assignPropertyTwice();
void historyInitialState();
void transitions();
+ void privateSignals();
private:
bool functionCalled;
@@ -237,5 +238,125 @@ void tst_QState::transitions()
QCOMPARE(s21->transitions().first(), t3);
}
+class MyState : public QState
+{
+ Q_OBJECT
+public:
+ MyState(QState *parent = 0)
+ : QState(parent)
+ {
+
+ }
+
+ void emitPrivateSignals()
+ {
+ // These deliberately do not compile
+// emit entered();
+// emit exited();
+//
+// emit entered(QPrivateSignal());
+// emit exited(QPrivateSignal());
+//
+// emit entered(QAbstractState::QPrivateSignal());
+// emit exited(QAbstractState::QPrivateSignal());
+ }
+
+};
+
+class MyTransition : public QSignalTransition
+{
+ Q_OBJECT
+public:
+ MyTransition(QObject * sender, const char * signal, QState *sourceState = 0)
+ : QSignalTransition(sender, signal, sourceState)
+ {
+
+ }
+
+ void emitPrivateSignals()
+ {
+ // These deliberately do not compile
+// emit triggered();
+//
+// emit triggered(QPrivateSignal());
+//
+// emit triggered(QAbstractTransition::QPrivateSignal());
+ }
+};
+
+class SignalConnectionTester : public QObject
+{
+ Q_OBJECT
+public:
+ SignalConnectionTester(QObject *parent = 0)
+ : QObject(parent), testPassed(false)
+ {
+
+ }
+
+public Q_SLOTS:
+ void testSlot()
+ {
+ testPassed = true;
+ }
+
+public:
+ bool testPassed;
+};
+
+class TestTrigger : public QObject
+{
+ Q_OBJECT
+public:
+ TestTrigger(QObject *parent = 0)
+ : QObject(parent)
+ {
+
+ }
+
+ void emitTrigger()
+ {
+ emit trigger();
+ }
+
+signals:
+ void trigger();
+};
+
+void tst_QState::privateSignals()
+{
+ QStateMachine machine;
+
+ QState *s1 = new QState(&machine);
+ MyState *s2 = new MyState(&machine);
+
+ TestTrigger testTrigger;
+
+ MyTransition *t1 = new MyTransition(&testTrigger, SIGNAL(trigger()), s1);
+ s1->addTransition(t1);
+ t1->setTargetState(s2);
+
+ machine.setInitialState(s1);
+ machine.start();
+ QCoreApplication::processEvents();
+
+ SignalConnectionTester s1Tester;
+ SignalConnectionTester s2Tester;
+ SignalConnectionTester t1Tester;
+
+ QObject::connect(s1, &QState::exited, &s1Tester, &SignalConnectionTester::testSlot);
+ QObject::connect(s2, &QState::entered, &s2Tester, &SignalConnectionTester::testSlot);
+ QObject::connect(t1, &QSignalTransition::triggered, &t1Tester, &SignalConnectionTester::testSlot);
+
+ testTrigger.emitTrigger();
+
+ QCoreApplication::processEvents();
+
+ QVERIFY(s1Tester.testPassed);
+ QVERIFY(s2Tester.testPassed);
+ QVERIFY(t1Tester.testPassed);
+
+}
+
QTEST_MAIN(tst_QState)
#include "tst_qstate.moc"