AutoTest: Handle test crashes inside ctest appropriate

If a ctest run fails to start the test application it will
provide some hints we ignored for the visual output, which
ended up in no result for this test.

Change-Id: Id90c4855163c742484f55f7b422a6f307e7fd861
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2021-06-30 10:42:32 +02:00
parent 58f0f3928c
commit 2971aac8c2
2 changed files with 12 additions and 0 deletions

View File

@@ -84,6 +84,8 @@ void CTestOutputReader::processOutputLine(const QByteArray &outputLine)
static const QRegularExpression testResult("^\\s*\\d+/\\d+ Test\\s+#\\d+: (.*) (\\.+)\\s*"
"(Passed|\\*\\*\\*Failed|\\*\\*\\*Not Run|"
".*\\*\\*\\*Exception:.*)\\s+(.*) sec$");
static const QRegularExpression testCrash("^\\s*\\d+/\\d+ Test\\s+#\\d+: (.*) (\\.+)\\s*"
"Exit code .*$");
static const QRegularExpression summary("^\\d+% tests passed, (\\d+) tests failed "
"out of (\\d+)");
static const QRegularExpression summaryTime("^Total Test time .* =\\s+(.*) sec$");
@@ -137,10 +139,19 @@ void CTestOutputReader::processOutputLine(const QByteArray &outputLine)
testResult->setResult(ResultType::TestEnd);
testResult->setDescription(match.captured());
reportResult(testResult);
} else if (ExactMatch match = testCrash.match(line)) {
m_description = match.captured();
m_testName = match.captured(1);
m_result = ResultType::Fail;
m_expectExceptionFromCrash = true;
} else {
if (!m_description.isEmpty())
m_description.append('\n');
m_description.append(line);
if (m_expectExceptionFromCrash) {
if (QTC_GUARD(line.startsWith("***Exception:")))
m_expectExceptionFromCrash = false;
}
}
}

View File

@@ -46,6 +46,7 @@ protected:
QString m_testName;
QString m_description;
ResultType m_result = ResultType::Invalid;
bool m_expectExceptionFromCrash = false;
};
} // namespace Internal