summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Adams <chris.adams@qinetic.com.au>2017-03-17 19:10:00 +1000
committerUlf Hermann <ulf.hermann@qt.io>2017-03-29 15:08:48 +0000
commit59167a6fb64edd533f49124a47a7a0d70616bf33 (patch)
tree12de403a931abb8b5aed5e2c1ef8e7ff68f2de76
parente3ce7e3471957939b4dbc0813c15ac935dddbd87 (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/BLACKLIST2
-rw-r--r--tests/auto/versit/qversitreader/tst_qversitreader.cpp19
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.