diff --git a/src/plugins/autotest/ctest/ctestoutputreader.cpp b/src/plugins/autotest/ctest/ctestoutputreader.cpp index f53dd873b00..04efa353ef9 100644 --- a/src/plugins/autotest/ctest/ctestoutputreader.cpp +++ b/src/plugins/autotest/ctest/ctestoutputreader.cpp @@ -65,7 +65,7 @@ void CTestOutputReader::processOutputLine(const QByteArray &outputLine) static const QRegularExpression testResult("^\\s*(?\\d+/\\d+)? " "Test\\s+#(?\\d+): (.*) (\\.+)\\s*" "(Passed|\\*\\*\\*Failed|\\*\\*\\*Not Run|" - ".*\\*\\*\\*Exception:.*)\\s+(.*) sec$"); + ".*\\*\\*\\*Exception:.*)\\s+(.*)(\\d+\\.\\d+) sec$"); static const QRegularExpression testCrash("^\\s*\\d+/\\d+ Test\\s+#\\d+: (.*) (\\.+)\\s*" "Exit code .*$"); static const QRegularExpression summary("^\\d+% tests passed, (\\d+) tests failed " @@ -119,6 +119,8 @@ void CTestOutputReader::processOutputLine(const QByteArray &outputLine) m_result = ResultType::Fail; else m_result = ResultType::MessageFatal; + if (match.hasCaptured(7)) + m_duration = match.captured(7); } else if (ExactMatch match = summary.match(line)) { if (!m_testName.isEmpty()) sendCompleteInformation(); @@ -136,6 +138,7 @@ void CTestOutputReader::processOutputLine(const QByteArray &outputLine) TestResult testResult = createDefaultResult(); testResult.setResult(ResultType::TestEnd); testResult.setDescription(match.captured()); + m_executionDuration = qRound(match.captured(1).toDouble() * 1000.); reportResult(testResult); } else if (ExactMatch match = testCrash.match(line)) { m_description = match.captured(); @@ -169,8 +172,15 @@ void CTestOutputReader::sendCompleteInformation() testResult.setResult(m_result); testResult.setDescription(m_description); reportResult(testResult); + if (!m_duration.isEmpty() && testResult.result() != ResultType::TestEnd) { + testResult.setDescription(Tr::tr("Test execution took %1.").arg(m_duration + " sec")); + testResult.setDuration(QString::number(m_duration.toDouble() * 1000., 'f', 3)); + testResult.setResult(ResultType::TestEnd); + reportResult(testResult); + } m_testName.clear(); m_description.clear(); + m_duration.clear(); m_currentTestNo = -1; m_result = ResultType::Invalid; } diff --git a/src/plugins/autotest/ctest/ctestoutputreader.h b/src/plugins/autotest/ctest/ctestoutputreader.h index 85785d44fca..dbb269f68a0 100644 --- a/src/plugins/autotest/ctest/ctestoutputreader.h +++ b/src/plugins/autotest/ctest/ctestoutputreader.h @@ -24,6 +24,7 @@ private: QString m_project; QString m_testName; QString m_description; + QString m_duration; // sec ResultType m_result = ResultType::Invalid; bool m_expectExceptionFromCrash = false; };