From ea415e20607016651f3cef02dff109235d84eb4d Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Thu, 22 Dec 2011 17:16:48 +1000 Subject: Cleanup corelib autotests. When using QSignalSpy, always verify that the signal spy is valid. This will cause the test to give a meaningful failure when spying on a non-existant signal. Without this change, tests that spy on a signal to ensure that it is not emitted (i.e. by comparing the spy count to zero) could pass erroneously if something went wrong when creating the signal spy, as an invalid QSignalSpy will always return a count of zero. Change-Id: I41f4a63d9f0de9190a86de237662dc96be802446 Reviewed-by: Thiago Macieira Reviewed-by: Rohan McGovern --- tests/auto/corelib/io/qfile/tst_qfile.cpp | 5 +-- .../qfilesystemwatcher/tst_qfilesystemwatcher.cpp | 4 +++ tests/auto/corelib/io/qprocess/tst_qprocess.cpp | 38 ++++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) (limited to 'tests/auto/corelib/io') diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp index fdb0a7e59c..cae97f80c4 100644 --- a/tests/auto/corelib/io/qfile/tst_qfile.cpp +++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp @@ -1483,14 +1483,15 @@ void tst_QFile::tailFile() QVERIFY(tailFile.open(QFile::ReadOnly)); tailFile.seek(file.size()); - QSignalSpy readSignal(&tailFile, SIGNAL(readyRead())); + QSignalSpy readSignalSpy(&tailFile, SIGNAL(readyRead())); + QVERIFY(readSignalSpy.isValid()); file.write("", 1); QTestEventLoop::instance().enterLoop(5); QVERIFY(!QTestEventLoop::instance().timeout()); - QCOMPARE(readSignal.count(), 1); + QCOMPARE(readSignalSpy.count(), 1); } void tst_QFile::flush() diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp index b9840bdb75..0f2c163e24 100644 --- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp +++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp @@ -138,6 +138,7 @@ void tst_QFileSystemWatcher::basicTest() watcher.addPath(testFile.fileName()); QSignalSpy changedSpy(&watcher, SIGNAL(fileChanged(const QString &))); + QVERIFY(changedSpy.isValid()); QEventLoop eventLoop; QTimer timer; connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); @@ -273,6 +274,7 @@ void tst_QFileSystemWatcher::watchDirectory() watcher.addPath(testDir.dirName()); QSignalSpy changedSpy(&watcher, SIGNAL(directoryChanged(const QString &))); + QVERIFY(changedSpy.isValid()); QEventLoop eventLoop; QTimer timer; connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); @@ -423,6 +425,8 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory() QSignalSpy fileChangedSpy(&watcher, SIGNAL(fileChanged(const QString &))); QSignalSpy dirChangedSpy(&watcher, SIGNAL(directoryChanged(const QString &))); + QVERIFY(fileChangedSpy.isValid()); + QVERIFY(dirChangedSpy.isValid()); QEventLoop eventLoop; QTimer timer; connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit())); diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp index 9d0121307c..d8b0b38b0c 100644 --- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp +++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp @@ -239,6 +239,7 @@ void tst_QProcess::simpleStart() process = new QProcess; QSignalSpy spy(process, SIGNAL(stateChanged(QProcess::ProcessState))); + QVERIFY(spy.isValid()); connect(process, SIGNAL(readyRead()), this, SLOT(readFromProcess())); /* valgrind dislike SUID binaries(those that have the `s'-flag set), which @@ -303,6 +304,7 @@ void tst_QProcess::crashTest() #endif process = new QProcess; QSignalSpy stateSpy(process, SIGNAL(stateChanged(QProcess::ProcessState))); + QVERIFY(stateSpy.isValid()); process->start("testProcessCrash/testProcessCrash"); QVERIFY(process->waitForStarted(5000)); @@ -312,6 +314,9 @@ void tst_QProcess::crashTest() QSignalSpy spy(process, SIGNAL(error(QProcess::ProcessError))); QSignalSpy spy2(process, SIGNAL(finished(int, QProcess::ExitStatus))); + QVERIFY(spy.isValid()); + QVERIFY(spy2.isValid()); + QVERIFY(process->waitForFinished(30000)); QCOMPARE(spy.count(), 1); @@ -347,6 +352,9 @@ void tst_QProcess::crashTest2() QSignalSpy spy(process, SIGNAL(error(QProcess::ProcessError))); QSignalSpy spy2(process, SIGNAL(finished(int, QProcess::ExitStatus))); + QVERIFY(spy.isValid()); + QVERIFY(spy2.isValid()); + QObject::connect(process, SIGNAL(finished(int)), this, SLOT(exitLoopSlot())); QTestEventLoop::instance().enterLoop(30); @@ -461,6 +469,9 @@ void tst_QProcess::echoTest2() QSignalSpy spy1(process, SIGNAL(readyReadStandardOutput())); QSignalSpy spy2(process, SIGNAL(readyReadStandardError())); + QVERIFY(spy1.isValid()); + QVERIFY(spy2.isValid()); + QTime stopWatch; stopWatch.start(); forever { @@ -516,6 +527,7 @@ void tst_QProcess::echoTest_performance() qint64 totalBytes = 0; QByteArray dump; QSignalSpy readyReadSpy(&process, SIGNAL(readyRead())); + QVERIFY(readyReadSpy.isValid()); while (stopWatch.elapsed() < 2000) { process.write(array); while (process.bytesToWrite() > 0) { @@ -697,6 +709,7 @@ void tst_QProcess::readTimeoutAndThenCrash() qRegisterMetaType("QProcess::ProcessError"); QSignalSpy spy(process, SIGNAL(error(QProcess::ProcessError))); + QVERIFY(spy.isValid()); process->kill(); @@ -926,6 +939,7 @@ void tst_QProcess::emitReadyReadOnlyWhenNewDataArrives() QProcess proc; connect(&proc, SIGNAL(readyRead()), this, SLOT(exitLoopSlot())); QSignalSpy spy(&proc, SIGNAL(readyRead())); + QVERIFY(spy.isValid()); #ifdef Q_OS_MAC proc.start("testProcessEcho/testProcessEcho.app"); @@ -1307,6 +1321,7 @@ void tst_QProcess::waitForReadyReadInAReadyReadSlot() QVERIFY(process->waitForStarted(5000)); QSignalSpy spy(process, SIGNAL(readyRead())); + QVERIFY(spy.isValid()); process->write("foo"); QTestEventLoop::instance().enterLoop(30); QVERIFY(!QTestEventLoop::instance().timeout()); @@ -1353,6 +1368,7 @@ void tst_QProcess::waitForBytesWrittenInABytesWrittenSlot() qRegisterMetaType("qint64"); QSignalSpy spy(process, SIGNAL(bytesWritten(qint64))); + QVERIFY(spy.isValid()); process->write("f"); QTestEventLoop::instance().enterLoop(30); QVERIFY(!QTestEventLoop::instance().timeout()); @@ -1572,6 +1588,11 @@ void tst_QProcess::failToStart() QSignalSpy finishedSpy(&process, SIGNAL(finished(int))); QSignalSpy finishedSpy2(&process, SIGNAL(finished(int, QProcess::ExitStatus))); + QVERIFY(stateSpy.isValid()); + QVERIFY(errorSpy.isValid()); + QVERIFY(finishedSpy.isValid()); + QVERIFY(finishedSpy2.isValid()); + // Mac OS X and HP-UX have a really low default process limit (~100), so spawning // to many processes here will cause test failures later on. #if defined Q_OS_HPUX @@ -1633,6 +1654,10 @@ void tst_QProcess::failToStartWithWait() QSignalSpy finishedSpy(&process, SIGNAL(finished(int))); QSignalSpy finishedSpy2(&process, SIGNAL(finished(int, QProcess::ExitStatus))); + QVERIFY(errorSpy.isValid()); + QVERIFY(finishedSpy.isValid()); + QVERIFY(finishedSpy2.isValid()); + for (int i = 0; i < 50; ++i) { process.start("/blurp", QStringList() << "-v" << "-debug"); process.waitForStarted(); @@ -1656,6 +1681,10 @@ void tst_QProcess::failToStartWithEventLoop() QSignalSpy finishedSpy(&process, SIGNAL(finished(int))); QSignalSpy finishedSpy2(&process, SIGNAL(finished(int, QProcess::ExitStatus))); + QVERIFY(errorSpy.isValid()); + QVERIFY(finishedSpy.isValid()); + QVERIFY(finishedSpy2.isValid()); + // The error signal may be emitted before start() returns connect(&process, SIGNAL(error(QProcess::ProcessError)), &loop, SLOT(quit()), Qt::QueuedConnection); @@ -1896,6 +1925,11 @@ void tst_QProcess::waitForReadyReadForNonexistantProcess() QSignalSpy errorSpy(&process, SIGNAL(error(QProcess::ProcessError))); QSignalSpy finishedSpy1(&process, SIGNAL(finished(int))); QSignalSpy finishedSpy2(&process, SIGNAL(finished(int, QProcess::ExitStatus))); + + QVERIFY(errorSpy.isValid()); + QVERIFY(finishedSpy1.isValid()); + QVERIFY(finishedSpy2.isValid()); + QVERIFY(!process.waitForReadyRead()); // used to crash process.start("doesntexist"); QVERIFY(!process.waitForReadyRead()); @@ -2233,6 +2267,7 @@ void tst_QProcess::invalidProgramString() qRegisterMetaType("QProcess::ProcessError"); QSignalSpy spy(&process, SIGNAL(error(QProcess::ProcessError))); + QVERIFY(spy.isValid()); process.start(programString); QCOMPARE(process.error(), QProcess::FailedToStart); @@ -2249,6 +2284,9 @@ void tst_QProcess::onlyOneStartedSignal() QSignalSpy spyStarted(&process, SIGNAL(started())); QSignalSpy spyFinished(&process, SIGNAL(finished(int, QProcess::ExitStatus))); + QVERIFY(spyStarted.isValid()); + QVERIFY(spyFinished.isValid()); + process.start("testProcessNormal/testProcessNormal"); QVERIFY(process.waitForStarted(5000)); QVERIFY(process.waitForFinished(5000)); -- cgit v1.2.3