From 59e01e2a89290c0aa4a50d7064bbaade511cc8c3 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 May 2015 14:57:03 +0200 Subject: Unit tests: Explicitly check for success from runner. We will otherwise miss runner failures for any file that does not contribute to the diagnostics count. Note: The tool can also fail during the building stage, but in this case we will get notified by the signal spy timing out. Change-Id: Ia9aa797d658b1752e3da6e08a652ee55868955ba Reviewed-by: Nikolai Kosjar --- plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp | 3 +++ plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h | 3 +++ plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp | 6 +++--- plugins/clangstaticanalyzer/clangstaticanalyzertool.h | 2 +- plugins/clangstaticanalyzer/clangstaticanalyzerunittests.cpp | 8 ++++---- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp index 4ef7cacfa9..0bdbe1da0c 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp +++ b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp @@ -214,6 +214,7 @@ QList ClangStaticAnalyzerRunControl: bool ClangStaticAnalyzerRunControl::startEngine() { + m_success = false; emit starting(this); QTC_ASSERT(m_projectInfo.isValid(), emit finished(); return false); @@ -277,6 +278,7 @@ bool ClangStaticAnalyzerRunControl::startEngine() m_runners.clear(); const int parallelRuns = ClangStaticAnalyzerSettings::instance()->simultaneousProcesses(); QTC_ASSERT(parallelRuns >= 1, emit finished(); return false); + m_success = true; while (m_runners.size() < parallelRuns && !m_unitsToProcess.isEmpty()) analyzeNextFile(); return true; @@ -373,6 +375,7 @@ void ClangStaticAnalyzerRunControl::onRunnerFinishedWithFailure(const QString &e qCDebug(LOG) << "onRunnerFinishedWithFailure:" << errorMessage << errorDetails; ++m_filesNotAnalyzed; + m_success = false; const QString filePath = qobject_cast(sender())->filePath(); appendMessage(tr("Failed to analyze \"%1\": %2").arg(filePath, errorMessage) + QLatin1Char('\n') diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h index 1da8598ffb..f5782714f5 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h +++ b/plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h @@ -52,6 +52,8 @@ public: bool startEngine(); void stopEngine(); + bool success() const { return m_success; } // For testing. + signals: void newDiagnosticsAvailable(const QList &diagnostics); @@ -80,6 +82,7 @@ private: int m_initialFilesToProcessSize; int m_filesAnalyzed; int m_filesNotAnalyzed; + bool m_success; }; } // namespace Internal diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp index 4e98a28ddd..ce5fc9b3d3 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp +++ b/plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp @@ -228,10 +228,10 @@ void ClangStaticAnalyzerTool::startTool() m_diagnosticModel->clear(); setBusyCursor(true); Project *project = SessionManager::startupProject(); - QTC_ASSERT(project, return); + QTC_ASSERT(project, emit finished(false); return); m_diagnosticFilterModel->setProject(project); m_projectInfoBeforeBuild = CppTools::CppModelManager::instance()->projectInfo(project); - QTC_ASSERT(m_projectInfoBeforeBuild.isValid(), return); + QTC_ASSERT(m_projectInfoBeforeBuild.isValid(), emit finished(false); return); m_running = true; handleStateUpdate(); @@ -284,7 +284,7 @@ void ClangStaticAnalyzerTool::onEngineFinished() resetCursorAndProjectInfoBeforeBuild(); m_running = false; handleStateUpdate(); - emit finished(); + emit finished(static_cast(sender())->success()); } void ClangStaticAnalyzerTool::setBusyCursor(bool busy) diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzertool.h b/plugins/clangstaticanalyzer/clangstaticanalyzertool.h index 4334884c7e..24bf7dbd12 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzertool.h +++ b/plugins/clangstaticanalyzer/clangstaticanalyzertool.h @@ -57,7 +57,7 @@ public: void startTool(); signals: - void finished(); // For testing. + void finished(bool success); // For testing. private: void onEngineIsStarting(); diff --git a/plugins/clangstaticanalyzer/clangstaticanalyzerunittests.cpp b/plugins/clangstaticanalyzer/clangstaticanalyzerunittests.cpp index 4eed420574..62fb91351b 100644 --- a/plugins/clangstaticanalyzer/clangstaticanalyzerunittests.cpp +++ b/plugins/clangstaticanalyzer/clangstaticanalyzerunittests.cpp @@ -83,10 +83,10 @@ void ClangStaticAnalyzerUnitTests::testProject() QVERIFY(projectInfo.isValid()); AnalyzerManager::selectTool(ClangStaticAnalyzerToolId); AnalyzerManager::startTool(); - if (m_analyzerTool->isRunning()) { - QSignalSpy waiter(m_analyzerTool, SIGNAL(finished())); - QVERIFY(waiter.wait(30000)); - } + QSignalSpy waiter(m_analyzerTool, SIGNAL(finished(bool))); + QVERIFY(waiter.wait(30000)); + const QList arguments = waiter.takeFirst(); + QVERIFY(arguments.first().toBool()); QCOMPARE(m_analyzerTool->diagnostics().count(), expectedDiagCount); } -- cgit v1.2.3