aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@theqtcompany.com>2015-05-04 14:57:03 +0200
committerChristian Kandeler <christian.kandeler@theqtcompany.com>2015-05-05 11:42:45 +0300
commit59e01e2a89290c0aa4a50d7064bbaade511cc8c3 (patch)
tree7da010396679788ef8eedb6354d443e8e5f12c3f
parent5a493ae38fa74b27b0f7bfb1f7c7a00bd299b9cf (diff)
Unit tests: Explicitly check for success from runner.csa-v3.4.2csa-v3.4.1csa-3.4
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 <nikolai.kosjar@theqtcompany.com>
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.cpp3
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerruncontrol.h3
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzertool.cpp6
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzertool.h2
-rw-r--r--plugins/clangstaticanalyzer/clangstaticanalyzerunittests.cpp8
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::AnalyzeUnit> 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<ClangStaticAnalyzerRunner *>(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<Diagnostic> &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<ClangStaticAnalyzerRunControl *>(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<QVariant> arguments = waiter.takeFirst();
+ QVERIFY(arguments.first().toBool());
QCOMPARE(m_analyzerTool->diagnostics().count(), expectedDiagCount);
}