ClangStaticAnalyzer: Tests: Fix failing runner tests on Windows

Both runner tests fail on Windows at

	QVERIFY(st.expectStartedSignal());

because QProcess::started() is emitted before ClangStaticAnalyzerRunner::run()
returns and thus before QSignalSpy::wait() is reached.

Watch out for the signal manually before calling run().

Change-Id: Ia786bfc6c859a4a4b420aeccc7e7f7bb0b4c47c0
Reviewed-by: Christian Kandeler <christian.kandeler@theqtcompany.com>
This commit is contained in:
Nikolai Kosjar
2016-01-26 15:36:19 +01:00
parent cfa9dd4c03
commit bfa292cdc9

View File

@@ -81,6 +81,7 @@ public:
bool expectFinishWithFailureSignal(const QString &expectedErrorMessage = QString()); bool expectFinishWithFailureSignal(const QString &expectedErrorMessage = QString());
private: private:
int m_startedSignalEmitted;
QSignalSpy m_spyStarted; QSignalSpy m_spyStarted;
QSignalSpy m_spyFinishedWithFailure; QSignalSpy m_spyFinishedWithFailure;
QSignalSpy m_spyFinishedWithSuccess; QSignalSpy m_spyFinishedWithSuccess;
@@ -88,25 +89,37 @@ private:
ClangStaticAnalyzerRunnerSignalTester::ClangStaticAnalyzerRunnerSignalTester( ClangStaticAnalyzerRunnerSignalTester::ClangStaticAnalyzerRunnerSignalTester(
ClangStaticAnalyzerRunner *runner) ClangStaticAnalyzerRunner *runner)
: m_spyStarted(runner, SIGNAL(started())) : m_startedSignalEmitted(0)
, m_spyStarted(runner, SIGNAL(started()))
, m_spyFinishedWithFailure(runner, SIGNAL(finishedWithFailure(QString,QString))) , m_spyFinishedWithFailure(runner, SIGNAL(finishedWithFailure(QString,QString)))
, m_spyFinishedWithSuccess(runner, SIGNAL(finishedWithSuccess(QString))) , m_spyFinishedWithSuccess(runner, SIGNAL(finishedWithSuccess(QString)))
{ {
// On Windows started() is emitted before ClangStaticAnalyzerRunner::run()
// returns and thus before we reach QSignalSpy::wait(). Ensure that we will
// get notified about those early started() signals.
QObject::connect(runner, &ClangStaticAnalyzerRunner::started, [this] {
++m_startedSignalEmitted;
});
} }
bool ClangStaticAnalyzerRunnerSignalTester::expectStartedSignal() bool ClangStaticAnalyzerRunnerSignalTester::expectStartedSignal()
{ {
if (m_spyStarted.wait()) { if (m_startedSignalEmitted != 0) {
if (m_spyStarted.size() != 1) { if (m_startedSignalEmitted == 1)
qDebug() << "started() emitted more than once."; return true;
return false;
} qDebug() << "started() emitted more than once.";
} else { return false;
qDebug() << "started() not emitted."; } else if (m_spyStarted.wait()) {
if (m_spyStarted.size() == 1)
return true;
qDebug() << "started() emitted more than once.";
return false; return false;
} }
return true; qDebug() << "started() not emitted.";
return false;
} }
bool ClangStaticAnalyzerRunnerSignalTester::expectFinishWithSuccessSignal() bool ClangStaticAnalyzerRunnerSignalTester::expectFinishWithSuccessSignal()