From 479f6c8129d5387448ed57236a8bbb023ab44bc7 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Wed, 23 Sep 2020 09:17:39 +0200 Subject: [PATCH] AutoTest: Fix handling of summary Avoid overwriting already gathered results and handle special cases like parameterized boost tests correctly. Beside this take into account that fatals on the boost side are treated as failures when printing the summary. Amends 6ab70135797c. Change-Id: I3815f79cbb4d16fd7b3d286617d79b30e94ccdd8 Reviewed-by: David Schulz Reviewed-by: Christian Stenger --- src/plugins/autotest/boost/boosttestoutputreader.cpp | 6 ++++-- src/plugins/autotest/testresultmodel.cpp | 9 +++------ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/plugins/autotest/boost/boosttestoutputreader.cpp b/src/plugins/autotest/boost/boosttestoutputreader.cpp index 84cd3e45a08..551b19fea02 100644 --- a/src/plugins/autotest/boost/boosttestoutputreader.cpp +++ b/src/plugins/autotest/boost/boosttestoutputreader.cpp @@ -140,6 +140,7 @@ void BoostTestOutputReader::handleMessageMatch(const QRegularExpressionMatch &ma if (m_currentTest.isEmpty() || m_logLevel > LogLevel::UnitScope) m_currentTest = caseFromContent(content); m_result = ResultType::MessageFatal; + ++m_summary[ResultType::MessageFatal]; m_description = content; } else if (content.startsWith("last checkpoint:")) { if (m_currentTest.isEmpty() || m_logLevel > LogLevel::UnitScope) @@ -337,8 +338,9 @@ void BoostTestOutputReader::processOutputLine(const QByteArray &outputLine) sendCompleteInformation(); BoostTestResult *result = new BoostTestResult(id(), m_projectFile, QString()); int failed = match.captured(1).toInt(); + int fatals = m_summary.value(ResultType::MessageFatal); QString txt = tr("%1 failures detected in %2.").arg(failed).arg(match.captured(3)); - int passed = (m_testCaseCount != -1) ? m_testCaseCount - failed : -1; + int passed = qMax(0, m_testCaseCount - failed); if (m_testCaseCount != -1) txt.append(' ').append(tr("%1 tests passed.").arg(passed)); result->setDescription(txt); @@ -346,7 +348,7 @@ void BoostTestOutputReader::processOutputLine(const QByteArray &outputLine) reportResult(TestResultPtr(result)); if (m_reportLevel == ReportLevel::Confirm) { // for the final summary m_summary[ResultType::Pass] += passed; - m_summary[ResultType::Fail] += failed; + m_summary[ResultType::Fail] += failed - fatals; } m_testCaseCount = -1; return; diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp index 7ea5f7d9d8f..cd38cfea762 100644 --- a/src/plugins/autotest/testresultmodel.cpp +++ b/src/plugins/autotest/testresultmodel.cpp @@ -376,13 +376,10 @@ int TestResultModel::resultTypeCount(ResultType type) const { int result = 0; - for (const auto &resultsForId : m_testResultCount.values()) - result += resultsForId.value(type, 0); - for (const auto &id : m_reportedSummary.keys()) { - if (int counted = m_testResultCount.value(id).value(type)) - result -= counted; - result += m_reportedSummary[id].value(type); + // if we got a result count from the framework prefer that over our counted results + int reported = m_reportedSummary[id].value(type); + result += reported != 0 ? reported : m_testResultCount.value(id).value(type); } return result; }