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') 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 From c7dac6469c3bc804a70e1afcc0dc7865afc28e5a Mon Sep 17 00:00:00 2001 From: Kari Oikarinen Date: Mon, 26 Mar 2018 17:28:46 +0300 Subject: tst_QThread: Use QTRY_VERIFY instead of qWaits These two places were sort of manually implementing QTRY_VERIFY except that they never time out. Change-Id: I136e6c7400194327c0475c6acfc019825ccec1b5 Reviewed-by: Friedemann Kleint Reviewed-by: Olivier Goffart (Woboq GmbH) Reviewed-by: Sami Nurmenniemi --- tests/auto/corelib/thread/qthread/tst_qthread.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp index 0405896ca7..aee243d880 100644 --- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp +++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp @@ -988,9 +988,7 @@ void tst_QThread::exitAndStart() connect(&sync2, SIGNAL(propChanged(int)), &sync1, SLOT(setProp(int)), Qt::QueuedConnection); connect(&sync1, SIGNAL(propChanged(int)), &thread, SLOT(quit()), Qt::QueuedConnection); QMetaObject::invokeMethod(&sync2, "setProp", Qt::QueuedConnection , Q_ARG(int, 89)); - QTest::qWait(50); - while(!thread.wait(10)) - QTest::qWait(10); + QTRY_VERIFY(thread.wait(10)); QCOMPARE(sync2.m_prop, 89); QCOMPARE(sync1.m_prop, 89); } @@ -1026,9 +1024,7 @@ void tst_QThread::exitAndExec() connect(&sync2, SIGNAL(propChanged(int)), &sync1, SLOT(setProp(int)), Qt::QueuedConnection); connect(&sync1, SIGNAL(propChanged(int)), &thread, SLOT(quit()), Qt::QueuedConnection); QMetaObject::invokeMethod(&sync2, "setProp", Qt::QueuedConnection , Q_ARG(int, 89)); - QTest::qWait(50); - while(!thread.wait(10)) - QTest::qWait(10); + QTRY_VERIFY(thread.wait(10)); QCOMPARE(sync2.m_prop, 89); QCOMPARE(sync1.m_prop, 89); } -- cgit v1.2.3 From d31a68146d0c13a76b3da0cd2e3a7dcc524b7a8f Mon Sep 17 00:00:00 2001 From: Kari Oikarinen Date: Thu, 29 Mar 2018 16:31:42 +0300 Subject: Narrow tst_QDnsLookup::lookup blacklist to only CI It is suspected that the fault actually lies in CI infra. Amends e3cf2a1ae959b69957c98f4b9213c4cbc632e888. Task-number: QTBUG-66311 Change-Id: I967da283f0b94be1d0b99481d0cbd15ca7f98d45 Reviewed-by: Sami Nurmenniemi Reviewed-by: Thiago Macieira --- tests/auto/network/kernel/qdnslookup/BLACKLIST | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests/auto') diff --git a/tests/auto/network/kernel/qdnslookup/BLACKLIST b/tests/auto/network/kernel/qdnslookup/BLACKLIST index f07a8ce9a3..edf6436384 100644 --- a/tests/auto/network/kernel/qdnslookup/BLACKLIST +++ b/tests/auto/network/kernel/qdnslookup/BLACKLIST @@ -1,2 +1,2 @@ [lookup] -* +ci -- cgit v1.2.3 From 3e1ecdd74cfb85d1c73f96289fc2114708881c6b Mon Sep 17 00:00:00 2001 From: Kari Oikarinen Date: Mon, 26 Mar 2018 16:30:25 +0300 Subject: tst_QStateMachine: Don't use unconditional waits Instead use QSignalSpy to wait directly for the expected events. Change-Id: I319302ea7177fe690b5d885347c505454904518e Reviewed-by: Sami Nurmenniemi Reviewed-by: Erik Verbruggen --- .../auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp index 17763f31f9..810698fb4e 100644 --- a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp +++ b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp @@ -4667,11 +4667,14 @@ void tst_QStateMachine::clonedSignals() s1->addTransition(t1); machine.setInitialState(s1); + QSignalSpy startedSpy(&machine, &QStateMachine::started); machine.start(); - QTest::qWait(1); + QVERIFY(startedSpy.wait()); + QSignalSpy transitionSpy(t1, &CloneSignalTransition::triggered); emitter.emitSignalWithDefaultArg(); - QTest::qWait(1); + QTRY_COMPARE(transitionSpy.count(), 1); + QCOMPARE(t1->eventSignalIndex, emitter.metaObject()->indexOfSignal("signalWithDefaultArg()")); TEST_ACTIVE_CHANGED(s1, 2); TEST_ACTIVE_CHANGED(s2, 1); -- cgit v1.2.3 From 559964849af0d2dfcb409169dcc9e40d01c6fae2 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Fri, 23 Mar 2018 11:09:18 +0100 Subject: Add lancelot based benchmark Uses the scripts and tests we already have for lancelot as a painting benchmark. Change-Id: Idf8a55e2261162e619f6dbb567dc19f8dc96da4e Reviewed-by: Eirik Aavitsland --- tests/auto/other/lancelot/paintcommands.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/other/lancelot/paintcommands.cpp b/tests/auto/other/lancelot/paintcommands.cpp index 4e0cb3b835..074644393d 100644 --- a/tests/auto/other/lancelot/paintcommands.cpp +++ b/tests/auto/other/lancelot/paintcommands.cpp @@ -192,7 +192,7 @@ QList > PaintCommands::s_enumsTable = QList PaintCommands::s_commandHash; #define DECL_PAINTCOMMAND(identifier, method, regexp, syntax, sample) \ - s_commandInfoTable << PaintCommandInfos(QLatin1String(identifier), &PaintCommands::method, QRegularExpression(regexp, QRegularExpression::OptimizeOnFirstUsageOption), \ + s_commandInfoTable << PaintCommandInfos(QLatin1String(identifier), &PaintCommands::method, QRegularExpression(regexp), \ QLatin1String(syntax), QLatin1String(sample) ); #define DECL_PAINTCOMMANDSECTION(title) \ @@ -615,6 +615,8 @@ void PaintCommands::staticInit() // populate the command lookup hash for (int i=0; i indices = s_commandHash.values(firstWord); foreach(int idx, indices) { PaintCommandInfos command = s_commandInfoTable.at(idx); -- cgit v1.2.3