From 231ac1b878cf3246b0b4cf00bc63e956abd1c4fd Mon Sep 17 00:00:00 2001 From: Kari Oikarinen Date: Tue, 27 Mar 2018 10:20:59 +0300 Subject: tst_QFutureWatcher: Avoid unconditional qWait()s MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Sami Nurmenniemi Reviewed-by: Edward Welbourne --- .../thread/qfuturewatcher/tst_qfuturewatcher.cpp | 46 +++++++++++----------- 1 file changed, 24 insertions(+), 22 deletions(-) (limited to 'tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp') 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 futureWatcher; - QObject::connect(&futureWatcher, SIGNAL(resultReadyAt(int)), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection); + QSignalSpy resultSpy(&futureWatcher, &QFutureWatcher::resultReadyAt); QFuture 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()); 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::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::finished); QSignalSpy resultReadySpy(&watcher, &QFutureWatcher::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 future = iface.future(); QFutureWatcher watcher; + QSignalSpy startedSpy(&watcher, &QFutureWatcher::started); + QSignalSpy finishedSpy(&watcher, &QFutureWatcher::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 future = iface.future(); QFutureWatcher watcher; + QSignalSpy resultSpy(&watcher, &QFutureWatcher::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()); -- cgit v1.2.3