diff options
author | Chris Adams <chris.adams@qinetic.com.au> | 2017-03-17 19:10:00 +1000 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2017-03-29 15:08:48 +0000 |
commit | 59167a6fb64edd533f49124a47a7a0d70616bf33 (patch) | |
tree | 12de403a931abb8b5aed5e2c1ef8e7ff68f2de76 | |
parent | e3ce7e3471957939b4dbc0813c15ac935dddbd87 (diff) |
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 <ulf.hermann@qt.io>
Reviewed-by: Robin Burchell <robin.burchell@crimson.no>
-rw-r--r-- | tests/auto/versit/qversitreader/BLACKLIST | 2 | ||||
-rw-r--r-- | 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. |