From 59167a6fb64edd533f49124a47a7a0d70616bf33 Mon Sep 17 00:00:00 2001 From: Chris Adams Date: Fri, 17 Mar 2017 19:10:00 +1000 Subject: Fix QVersitReader::testReading unit test The reader spawns a worker thread to perform reading and parsing, which then emits state change signals back to the main thread. Previously, signals emitted in one test case could interfere with another test, as the event queue was not drained prior to performing condition verification. This commit applies more strict verification to the first test and then ensures that the signals have been received before beginning the second test. Task-number: QTBUG-59434 Change-Id: I5b006ae182723989aff640164431fb731896921e Reviewed-by: Ulf Hermann Reviewed-by: Robin Burchell --- tests/auto/versit/qversitreader/BLACKLIST | 2 -- tests/auto/versit/qversitreader/tst_qversitreader.cpp | 19 +++++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/tests/auto/versit/qversitreader/BLACKLIST b/tests/auto/versit/qversitreader/BLACKLIST index 598396600..e69de29bb 100644 --- a/tests/auto/versit/qversitreader/BLACKLIST +++ b/tests/auto/versit/qversitreader/BLACKLIST @@ -1,2 +0,0 @@ -[testReading] -* diff --git a/tests/auto/versit/qversitreader/tst_qversitreader.cpp b/tests/auto/versit/qversitreader/tst_qversitreader.cpp index 43064b20b..00c9a804a 100644 --- a/tests/auto/versit/qversitreader/tst_qversitreader.cpp +++ b/tests/auto/versit/qversitreader/tst_qversitreader.cpp @@ -472,10 +472,19 @@ void tst_QVersitReader::testReading() // calling setData directly on reader mReader->setData(validDocumentsAndGroupedDocument); - QVERIFY(mReader->startReading()); - mReader->waitForFinished(); + mSignalCatcher->mStateChanges.clear(); + mSignalCatcher->mResultsCount = 0; + QVERIFY2(mReader->startReading(), QString::number(mReader->error()).toLatin1().data()); + QVERIFY2(mReader->waitForFinished(), QString::number(mReader->error()).toLatin1().data()); + QTRY_VERIFY(mSignalCatcher->mStateChanges.count() >= 2); // signals sent from other thread, so wait for delivery + QCOMPARE(mSignalCatcher->mStateChanges.at(0), QVersitReader::ActiveState); + QCOMPARE(mSignalCatcher->mStateChanges.at(1), QVersitReader::FinishedState); + QCOMPARE(mReader->state(), QVersitReader::FinishedState); + QCOMPARE(mReader->error(), QVersitReader::NoError); QCOMPARE(mReader->results().size(), 5); + qApp->processEvents(); // clean up before we start sniffing signals + // Asynchronous reading mReader->setDevice(mInputDevice); mInputDevice->close(); @@ -485,13 +494,15 @@ void tst_QVersitReader::testReading() mSignalCatcher->mStateChanges.clear(); mSignalCatcher->mResultsCount = 0; QVERIFY2(mReader->startReading(), QString::number(mReader->error()).toLatin1().data()); - QTRY_VERIFY(mSignalCatcher->mStateChanges.count() >= 2); + QTRY_VERIFY(mSignalCatcher->mStateChanges.count() >= 2); // signals sent from other thread, so wait for delivery QCOMPARE(mSignalCatcher->mStateChanges.at(0), QVersitReader::ActiveState); QCOMPARE(mSignalCatcher->mStateChanges.at(1), QVersitReader::FinishedState); QVERIFY(mSignalCatcher->mResultsCount >= 2); QCOMPARE(mReader->results().size(), 2); QCOMPARE(mReader->error(), QVersitReader::NoError); + qApp->processEvents(); // clean up before we start sniffing signals + // Cancelling mInputDevice->close(); mInputDevice->setData(twoDocuments); @@ -502,7 +513,7 @@ void tst_QVersitReader::testReading() QVERIFY2(mReader->startReading(), QString::number(mReader->error()).toLatin1().data()); mReader->cancel(); mReader->waitForFinished(); - QTRY_VERIFY(mSignalCatcher->mStateChanges.count() >= 2); + QTRY_VERIFY(mSignalCatcher->mStateChanges.count() >= 2); // signals sent from other thread, so wait for delivery QCOMPARE(mSignalCatcher->mStateChanges.at(0), QVersitReader::ActiveState); QVersitReader::State state(mSignalCatcher->mStateChanges.at(1)); // It's possible that it finishes before it cancels. -- cgit v1.2.3