diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 9b390ae8302..77d652c357c 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -1063,7 +1063,7 @@ void ClangTool::onRunControlStopped() { if (m_state != State::StoppedByUser && m_state != State::PreparationFailed) setState(State::AnalyzerFinished); - emit finished(m_runWorker->success()); + emit finished(m_infoBarWidget->errorText()); } void ClangTool::update() diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h index 375027a3032..6a7940e63fb 100644 --- a/src/plugins/clangtools/clangtool.h +++ b/src/plugins/clangtools/clangtool.h @@ -109,7 +109,7 @@ public: QAction *startOnCurrentFileAction() const { return m_startOnCurrentFileAction; } signals: - void finished(bool success); // For testing. + void finished(const QString &errorText); // For testing. private: enum class State { diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 4d6dc1502b5..312b4d4b385 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -319,7 +319,6 @@ void ClangToolRunWorker::start() m_runners.clear(); const int parallelRuns = m_runSettings.parallelJobs(); QTC_ASSERT(parallelRuns >= 1, reportFailure(); return); - m_success = true; if (m_queue.isEmpty()) { finalize(); @@ -420,7 +419,6 @@ void ClangToolRunWorker::onRunnerFinishedWithFailure(const QString &errorMessage m_filesAnalyzed.remove(fileToAnalyze); m_filesNotAnalyzed.insert(fileToAnalyze); - m_success = false; const QString message = tr("Failed to analyze \"%1\": %2").arg(fileToAnalyze, errorMessage); appendMessage(message, Utils::StdErrFormat); diff --git a/src/plugins/clangtools/clangtoolruncontrol.h b/src/plugins/clangtools/clangtoolruncontrol.h index 5a9fbbbdd54..bd950d7484d 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.h +++ b/src/plugins/clangtools/clangtoolruncontrol.h @@ -72,8 +72,6 @@ public: const FileInfos &fileInfos, bool buildBeforeAnalysis); - bool success() const { return m_success; } // For testing. - int filesAnalyzed() const { return m_filesAnalyzed.size(); } int filesNotAnalyzed() const { return m_filesNotAnalyzed.size(); } int totalFilesToAnalyze() const { return m_fileInfos.size(); } @@ -125,7 +123,6 @@ private: int m_initialQueueSize = 0; QSet m_filesAnalyzed; QSet m_filesNotAnalyzed; - bool m_success = false; }; } // namespace Internal diff --git a/src/plugins/clangtools/clangtoolsunittests.cpp b/src/plugins/clangtools/clangtoolsunittests.cpp index 1158cf0a44f..fdd9240e0de 100644 --- a/src/plugins/clangtools/clangtoolsunittests.cpp +++ b/src/plugins/clangtools/clangtoolsunittests.cpp @@ -107,19 +107,26 @@ void ClangToolsUnitTests::testProject() QSKIP("This test is mingw specific, does not run for other toolchains"); } + // Open project Tests::ProjectOpenerAndCloser projectManager; const ProjectInfo projectInfo = projectManager.open(projectFilePath, true); - QVERIFY(projectInfo.isValid()); + const bool isProjectOpen = projectInfo.isValid(); + QVERIFY(isProjectOpen); + // Run tool ClangTool *tool = ClangTool::instance(); tool->startTool(ClangTool::FileSelection::AllFiles, ClangToolsSettings::instance()->runSettings(), diagnosticConfig); - QSignalSpy waiter(tool, SIGNAL(finished(bool))); - QVERIFY(waiter.wait(30000)); + QSignalSpy waitForFinishedTool(tool, &ClangTool::finished); + QVERIFY(waitForFinishedTool.wait(30000)); - const QList arguments = waiter.takeFirst(); - QVERIFY(arguments.first().toBool()); + // Check for errors + const QString errorText = waitForFinishedTool.takeFirst().first().toString(); + const bool finishedSuccessfully = errorText.isEmpty(); + if (!finishedSuccessfully) + qWarning("Error: %s", qPrintable(errorText)); + QVERIFY(finishedSuccessfully); QCOMPARE(tool->diagnostics().count(), expectedDiagCount); }