summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKari Oikarinen <kari.oikarinen@qt.io>2018-03-27 10:20:59 +0300
committerKari Oikarinen <kari.oikarinen@qt.io>2018-04-03 10:20:27 +0000
commit231ac1b878cf3246b0b4cf00bc63e956abd1c4fd (patch)
treeb19dddbe8ad014755f989ed088c182790cbaf085
parent8b9a9651d6efbd84cda476c47f962ff0a600b234 (diff)
tst_QFutureWatcher: Avoid unconditional qWait()s
Use QSignalSpy::wait or QTRY_VERIFY instead. This shaved off ~200 ms of the running time of the test and is more reliable. Some unconditional qWait()s still remain in this test. They are giving an opportunity for the wrong thing to happen and thus are not waiting for any specific condition to be fulfilled. Task-number: QTBUG-63992 Change-Id: I25a4470fe8d6a5b8b5039b3ed77321d24faa1707 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io> Reviewed-by: Sami Nurmenniemi <sami.nurmenniemi@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
-rw-r--r--tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp46
1 files changed, 24 insertions, 22 deletions
diff --git a/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp b/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp
index a16e9e377c..b2ef516b4e 100644
--- a/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp
+++ b/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp
@@ -82,11 +82,11 @@ void tst_QFutureWatcher::startFinish()
QVERIFY(finishedSpy.isValid());
futureWatcher.setFuture(QtConcurrent::run(sleeper));
- QTest::qWait(10); // spin the event loop to deliver queued signals.
+ QVERIFY(startedSpy.wait());
QCOMPARE(startedSpy.count(), 1);
QCOMPARE(finishedSpy.count(), 0);
futureWatcher.future().waitForFinished();
- QTest::qWait(10);
+ QVERIFY(finishedSpy.wait());
QCOMPARE(startedSpy.count(), 1);
QCOMPARE(finishedSpy.count(), 1);
}
@@ -232,13 +232,12 @@ void tst_QFutureWatcher::resultAt()
void tst_QFutureWatcher::resultReadyAt()
{
QFutureWatcher<int> futureWatcher;
- QObject::connect(&futureWatcher, SIGNAL(resultReadyAt(int)), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
+ QSignalSpy resultSpy(&futureWatcher, &QFutureWatcher<int>::resultReadyAt);
QFuture<int> future = (new IntTask())->start();
futureWatcher.setFuture(future);
- QTestEventLoop::instance().enterLoop(1);
- QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(resultSpy.wait());
// Setting the future again should give us another signal.
// (this is to prevent the race where the task associated
@@ -246,8 +245,7 @@ void tst_QFutureWatcher::resultReadyAt()
futureWatcher.setFuture(QFuture<int>());
futureWatcher.setFuture(future);
- QTestEventLoop::instance().enterLoop(1);
- QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY(resultSpy.wait());
}
class SignalSlotObject : public QObject
@@ -320,19 +318,17 @@ void tst_QFutureWatcher::futureSignals()
const int progress = 1;
a.setProgressValue(progress);
- QTest::qWait(10);
- QCOMPARE(progressSpy.count(), 2);
+ QTRY_COMPARE(progressSpy.count(), 2);
QCOMPARE(progressSpy.takeFirst().at(0).toInt(), 0);
QCOMPARE(progressSpy.takeFirst().at(0).toInt(), 1);
const int result = 10;
a.reportResult(&result);
- QTest::qWait(10);
+ QVERIFY(resultReadySpy.wait());
QCOMPARE(resultReadySpy.count(), 1);
a.reportFinished(&result);
- QTest::qWait(10);
- QCOMPARE(resultReadySpy.count(), 2);
+ QTRY_COMPARE(resultReadySpy.count(), 2);
QCOMPARE(resultReadySpy.takeFirst().at(0).toInt(), 0); // check the index
QCOMPARE(resultReadySpy.takeFirst().at(0).toInt(), 1);
@@ -373,7 +369,7 @@ void tst_QFutureWatcher::watchFinishedFuture()
QVERIFY(canceledSpy.isValid());
watcher.setFuture(f);
- QTest::qWait(10);
+ QVERIFY(finishedSpy.wait());
QCOMPARE(startedSpy.count(), 1);
QCOMPARE(finishedSpy.count(), 1);
@@ -407,7 +403,7 @@ void tst_QFutureWatcher::watchCanceledFuture()
QVERIFY(canceledSpy.isValid());
watcher.setFuture(f);
- QTest::qWait(10);
+ QVERIFY(finishedSpy.wait());
QCOMPARE(startedSpy.count(), 1);
QCOMPARE(finishedSpy.count(), 1);
@@ -434,7 +430,7 @@ void tst_QFutureWatcher::disconnectRunningFuture()
const int result = 10;
a.reportResult(&result);
- QTest::qWait(10);
+ QVERIFY(resultReadySpy.wait());
QCOMPARE(resultReadySpy.count(), 1);
delete watcher;
@@ -624,7 +620,7 @@ void tst_QFutureWatcher::changeFuture()
QSignalSpy resultReadySpy(&watcher, &QFutureWatcher<int>::resultReadyAt);
QVERIFY(resultReadySpy.isValid());
- watcher.setFuture(a); // Watch 'a' which will genere a resultReady event.
+ watcher.setFuture(a); // Watch 'a' which will generate a resultReady event.
watcher.setFuture(b); // But oh no! we're switching to another future
QTest::qWait(10); // before the event gets delivered.
@@ -633,7 +629,7 @@ void tst_QFutureWatcher::changeFuture()
watcher.setFuture(a);
watcher.setFuture(b);
watcher.setFuture(a); // setting it back gets us one event, not two.
- QTest::qWait(10);
+ QVERIFY(resultReadySpy.wait());
QCOMPARE(resultReadySpy.count(), 1);
}
@@ -653,13 +649,15 @@ void tst_QFutureWatcher::cancelEvents()
SignalSlotObject object;
connect(&watcher, SIGNAL(resultReadyAt(int)), &object, SLOT(resultReadyAt(int)));
+ QSignalSpy finishedSpy(&watcher, &QFutureWatcher<int>::finished);
QSignalSpy resultReadySpy(&watcher, &QFutureWatcher<int>::resultReadyAt);
+ QVERIFY(finishedSpy.isValid());
QVERIFY(resultReadySpy.isValid());
watcher.setFuture(a);
watcher.cancel();
- QTest::qWait(10);
+ QVERIFY(finishedSpy.wait());
QCOMPARE(resultReadySpy.count(), 0);
}
@@ -730,15 +728,17 @@ void tst_QFutureWatcher::finishedState()
iface.reportStarted();
QFuture<int> future = iface.future();
QFutureWatcher<int> watcher;
+ QSignalSpy startedSpy(&watcher, &QFutureWatcher<int>::started);
+ QSignalSpy finishedSpy(&watcher, &QFutureWatcher<int>::finished);
watcher.setFuture(future);
- QTest::qWait(10);
+ QVERIFY(startedSpy.wait());
iface.reportFinished();
QVERIFY(future.isFinished());
QVERIFY(!watcher.isFinished());
- QTest::qWait(10);
+ QVERIFY(finishedSpy.wait());
QVERIFY(watcher.isFinished());
}
@@ -752,18 +752,20 @@ void tst_QFutureWatcher::throttling()
iface.reportStarted();
QFuture<int> future = iface.future();
QFutureWatcher<int> watcher;
+ QSignalSpy resultSpy(&watcher, &QFutureWatcher<int>::resultReadyAt);
watcher.setFuture(future);
QVERIFY(!iface.isThrottled());
- for (int i = 0; i < 1000; ++i) {
+ const int resultCount = 1000;
+ for (int i = 0; i < resultCount; ++i) {
int result = 0;
iface.reportResult(result);
}
QVERIFY(iface.isThrottled());
- QTest::qWait(100); // process events.
+ QTRY_COMPARE(resultSpy.count(), resultCount); // Process the results
QVERIFY(!iface.isThrottled());