summaryrefslogtreecommitdiffstats
path: root/tests/auto/qthread/tst_qthread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/qthread/tst_qthread.cpp')
-rw-r--r--tests/auto/qthread/tst_qthread.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/auto/qthread/tst_qthread.cpp b/tests/auto/qthread/tst_qthread.cpp
index c56d302546..ee9ac309af 100644
--- a/tests/auto/qthread/tst_qthread.cpp
+++ b/tests/auto/qthread/tst_qthread.cpp
@@ -117,6 +117,7 @@ private slots:
void destroyFinishRace();
void startFinishRace();
void startAndQuitCustomEventLoop();
+ void isRunningInFinished();
void stressTest();
#ifdef Q_OS_SYMBIAN
@@ -1418,5 +1419,39 @@ void tst_QThread::threadNameTest()
}
#endif // Q_OS_SYMBIAN
+class FinishedTestObject : public QObject {
+ Q_OBJECT
+public:
+ FinishedTestObject() : ok(false) {}
+ bool ok;
+public slots:
+ void slotFinished() {
+ QThread *t = qobject_cast<QThread *>(sender());
+ ok = t && t->isFinished() && !t->isRunning();
+ }
+};
+
+void tst_QThread::isRunningInFinished()
+{
+ for (int i = 0; i < 15; i++) {
+ QThread thread;
+ thread.start();
+ FinishedTestObject localObject;
+ FinishedTestObject inThreadObject;
+ localObject.setObjectName("...");
+ inThreadObject.moveToThread(&thread);
+ connect(&thread, SIGNAL(finished()), &localObject, SLOT(slotFinished()));
+ connect(&thread, SIGNAL(finished()), &inThreadObject, SLOT(slotFinished()));
+ QEventLoop loop;
+ connect(&thread, SIGNAL(finished()), &loop, SLOT(quit()));
+ QMetaObject::invokeMethod(&thread, "quit", Qt::QueuedConnection);
+ loop.exec();
+ QVERIFY(!thread.isRunning());
+ QVERIFY(thread.isFinished());
+ QVERIFY(localObject.ok);
+ QVERIFY(inThreadObject.ok);
+ }
+}
+
QTEST_MAIN(tst_QThread)
#include "tst_qthread.moc"