From 12038dd01291bec3d01ea55311ff1f8b9001e742 Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Fri, 24 May 2019 14:34:01 +0200 Subject: [PATCH] AutoTest: Enhance reporting passes and fails Depending on the report and log level of Boost UTF the number of test passes and fails might be wrong. Circumvent by providing a way to report a summary. Change-Id: I6d2cb7674550f10a0263e08d21cce42569f3d7a8 Reviewed-by: David Schulz --- src/plugins/autotest/testoutputreader.h | 3 +++ src/plugins/autotest/testresultmodel.cpp | 25 ++++++++++++++++++++++-- src/plugins/autotest/testresultmodel.h | 5 +++-- src/plugins/autotest/testrunner.cpp | 3 +++ src/plugins/autotest/testrunner.h | 1 + 5 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/plugins/autotest/testoutputreader.h b/src/plugins/autotest/testoutputreader.h index b78f9cbecbd..87216a2570c 100644 --- a/src/plugins/autotest/testoutputreader.h +++ b/src/plugins/autotest/testoutputreader.h @@ -48,6 +48,8 @@ public: void createAndReportResult(const QString &message, ResultType type); bool hadValidOutput() const { return m_hadValidOutput; } int disabledTests() const { return m_disabled; } + bool hasSummary() const { return !m_summary.isEmpty(); } + QHash summary() const { return m_summary; } void setId(const QString &id) { m_id = id; } QString id() const { return m_id; } @@ -64,6 +66,7 @@ protected: QProcess *m_testApplication; // not owned QString m_buildDir; QString m_id; + QHash m_summary; int m_disabled = -1; private: bool m_hadValidOutput = false; diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp index 874e813660e..f07bc5f0085 100644 --- a/src/plugins/autotest/testresultmodel.cpp +++ b/src/plugins/autotest/testresultmodel.cpp @@ -23,10 +23,11 @@ ** ****************************************************************************/ +#include "testresultmodel.h" #include "autotesticons.h" #include "autotestplugin.h" #include "testresultdelegate.h" -#include "testresultmodel.h" +#include "testrunner.h" #include "testsettings.h" #include @@ -220,6 +221,10 @@ QString TestResultItem::resultString() const TestResultModel::TestResultModel(QObject *parent) : Utils::TreeModel(new TestResultItem(TestResultPtr()), parent) { + connect(TestRunner::instance(), &TestRunner::reportSummary, + this, [this](const QString &id, const QHash &summary){ + m_reportedSummary.insert(id, summary); + }); } void TestResultModel::updateParent(const TestResultItem *item) @@ -256,7 +261,7 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx return; } - m_testResultCount[testResult->result()]++; + m_testResultCount[testResult->id()][testResult->result()]++; TestResultItem *newItem = new TestResultItem(testResult); TestResultItem *root = nullptr; @@ -314,6 +319,7 @@ void TestResultModel::clearTestResults() { clear(); m_testResultCount.clear(); + m_reportedSummary.clear(); m_disabled = 0; m_fileNames.clear(); m_maxWidthOfFileName = 0; @@ -363,6 +369,21 @@ int TestResultModel::maxWidthOfLineNumber(const QFont &font) return m_widthOfLineNumber; } +int TestResultModel::resultTypeCount(ResultType type) const +{ + int result = 0; + + for (auto resultsForId : m_testResultCount.values()) + result += resultsForId.value(type, 0); + + for (auto id : m_reportedSummary.keys()) { + if (int counted = m_testResultCount.value(id).value(type)) + result -= counted; + result += m_reportedSummary[id].value(type); + } + return result; +} + TestResultItem *TestResultModel::findParentItemFor(const TestResultItem *item, const TestResultItem *startItem) const { diff --git a/src/plugins/autotest/testresultmodel.h b/src/plugins/autotest/testresultmodel.h index 38c880003b6..6370296ac04 100644 --- a/src/plugins/autotest/testresultmodel.h +++ b/src/plugins/autotest/testresultmodel.h @@ -84,7 +84,7 @@ public: int maxWidthOfFileName(const QFont &font); int maxWidthOfLineNumber(const QFont &font); - int resultTypeCount(ResultType type) const { return m_testResultCount.value(type, 0); } + int resultTypeCount(ResultType type) const; int disabledTests() const { return m_disabled; } void raiseDisabledTests(int amount) { m_disabled += amount; } @@ -94,7 +94,8 @@ private: TestResultItem *findParentItemFor(const TestResultItem *item, const TestResultItem *startItem = nullptr) const; void updateParent(const TestResultItem *item); - QMap m_testResultCount; + QHash> m_testResultCount; + QHash> m_reportedSummary; int m_widthOfLineNumber = 0; int m_maxWidthOfFileName = 0; int m_disabled = 0; diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp index e1f4497580c..cf432870e3a 100644 --- a/src/plugins/autotest/testrunner.cpp +++ b/src/plugins/autotest/testrunner.cpp @@ -270,6 +270,9 @@ void TestRunner::onProcessFinished() const int disabled = m_currentOutputReader->disabledTests(); if (disabled > 0) emit hadDisabledTests(disabled); + if (m_currentOutputReader->hasSummary()) + emit reportSummary(m_currentOutputReader->id(), m_currentOutputReader->summary()); + resetInternalPointers(); if (!m_fakeFutureInterface) { diff --git a/src/plugins/autotest/testrunner.h b/src/plugins/autotest/testrunner.h index 79e7a8c389c..5628a6d29eb 100644 --- a/src/plugins/autotest/testrunner.h +++ b/src/plugins/autotest/testrunner.h @@ -71,6 +71,7 @@ signals: void requestStopTestRun(); void testResultReady(const TestResultPtr &result); void hadDisabledTests(int disabled); + void reportSummary(const QString &id, const QHash &summary); private: void buildProject(ProjectExplorer::Project *project);