AutoTest: Use TestResult as value type

Don't construct it on heap and don't use shared pointer for it.

Change-Id: I51c9da405ed14d24b5f20242b4d049f9e2958f09
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2023-01-14 16:25:51 +01:00
parent 3ff5661327
commit d05c5b7d07
54 changed files with 396 additions and 437 deletions

View File

@@ -15,7 +15,7 @@
namespace Autotest {
namespace Internal {
GTestOutputReader::GTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface,
GTestOutputReader::GTestOutputReader(const QFutureInterface<TestResult> &futureInterface,
Utils::QtcProcess *testApplication,
const Utils::FilePath &buildDirectory,
const Utils::FilePath &projectFile)
@@ -70,9 +70,9 @@ void GTestOutputReader::processOutputLine(const QByteArray &outputLine)
m_description = line;
if (m_iteration > 1)
m_description.append(' ' + Tr::tr("(iteration %1)").arg(m_iteration));
TestResultPtr testResult = TestResultPtr(new GTestResult(id(), {}, m_projectFile));
testResult->setResult(ResultType::MessageInternal);
testResult->setDescription(m_description);
GTestResult testResult(id(), {}, m_projectFile);
testResult.setResult(ResultType::MessageInternal);
testResult.setDescription(m_description);
reportResult(testResult);
m_description.clear();
} else if (ExactMatch match = disabledTests.match(line)) {
@@ -83,66 +83,66 @@ void GTestOutputReader::processOutputLine(const QByteArray &outputLine)
}
if (ExactMatch match = testEnds.match(line)) {
TestResultPtr testResult = createDefaultResult();
testResult->setResult(ResultType::TestEnd);
testResult->setDescription(Tr::tr("Test execution took %1").arg(match.captured(2)));
TestResult testResult = createDefaultResult();
testResult.setResult(ResultType::TestEnd);
testResult.setDescription(Tr::tr("Test execution took %1").arg(match.captured(2)));
reportResult(testResult);
m_currentTestSuite.clear();
m_currentTestCase.clear();
} else if (ExactMatch match = newTestStarts.match(line)) {
setCurrentTestSuite(match.captured(1));
TestResultPtr testResult = createDefaultResult();
testResult->setResult(ResultType::TestStart);
TestResult testResult = createDefaultResult();
testResult.setResult(ResultType::TestStart);
if (m_iteration > 1) {
testResult->setDescription(Tr::tr("Repeating test suite %1 (iteration %2)")
testResult.setDescription(Tr::tr("Repeating test suite %1 (iteration %2)")
.arg(m_currentTestSuite).arg(m_iteration));
} else {
testResult->setDescription(Tr::tr("Executing test suite %1").arg(m_currentTestSuite));
testResult.setDescription(Tr::tr("Executing test suite %1").arg(m_currentTestSuite));
}
reportResult(testResult);
} else if (ExactMatch match = newTestSetStarts.match(line)) {
m_testSetStarted = true;
setCurrentTestCase(match.captured(1));
TestResultPtr testResult = TestResultPtr(new GTestResult({}, {}, m_projectFile));
testResult->setResult(ResultType::MessageCurrentTest);
testResult->setDescription(Tr::tr("Entering test case %1").arg(m_currentTestCase));
GTestResult testResult("internal", {}, m_projectFile);
testResult.setResult(ResultType::MessageCurrentTest);
testResult.setDescription(Tr::tr("Entering test case %1").arg(m_currentTestCase));
reportResult(testResult);
m_description.clear();
} else if (ExactMatch match = testSetSuccess.match(line)) {
m_testSetStarted = false;
TestResultPtr testResult = createDefaultResult();
testResult->setResult(ResultType::Pass);
testResult->setDescription(m_description);
TestResult testResult = createDefaultResult();
testResult.setResult(ResultType::Pass);
testResult.setDescription(m_description);
reportResult(testResult);
m_description.clear();
testResult = createDefaultResult();
testResult->setResult(ResultType::MessageInternal);
testResult->setDescription(Tr::tr("Execution took %1.").arg(match.captured(2)));
testResult.setResult(ResultType::MessageInternal);
testResult.setDescription(Tr::tr("Execution took %1.").arg(match.captured(2)));
reportResult(testResult);
m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1);
} else if (ExactMatch match = testSetFail.match(line)) {
m_testSetStarted = false;
TestResultPtr testResult = createDefaultResult();
testResult->setResult(ResultType::Fail);
TestResult testResult = createDefaultResult();
testResult.setResult(ResultType::Fail);
m_description.chop(1);
handleDescriptionAndReportResult(testResult);
testResult = createDefaultResult();
testResult->setResult(ResultType::MessageInternal);
testResult->setDescription(Tr::tr("Execution took %1.").arg(match.captured(2)));
testResult.setResult(ResultType::MessageInternal);
testResult.setDescription(Tr::tr("Execution took %1.").arg(match.captured(2)));
reportResult(testResult);
m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1);
} else if (ExactMatch match = testSetSkipped.match(line)) {
if (!m_testSetStarted) // ignore SKIPPED at summary
return;
m_testSetStarted = false;
TestResultPtr testResult = createDefaultResult();
testResult->setResult(ResultType::Skip);
TestResult testResult = createDefaultResult();
testResult.setResult(ResultType::Skip);
m_description.chop(1);
m_description.prepend(match.captured(1) + '\n');
handleDescriptionAndReportResult(testResult);
testResult = createDefaultResult();
testResult->setResult(ResultType::MessageInternal);
testResult->setDescription(Tr::tr("Execution took %1.").arg(match.captured(2)));
testResult.setResult(ResultType::MessageInternal);
testResult.setDescription(Tr::tr("Execution took %1.").arg(match.captured(2)));
reportResult(testResult);
} else if (ExactMatch match = logging.match(line)) {
const QString severity = match.captured(1).trimmed();
@@ -153,13 +153,13 @@ void GTestOutputReader::processOutputLine(const QByteArray &outputLine)
case 'E': type = ResultType::MessageError; break; // ERROR
case 'F': type = ResultType::MessageFatal; break; // FATAL
}
TestResultPtr testResult = createDefaultResult();
testResult->setResult(type);
testResult->setLine(match.captured(3).toInt());
TestResult testResult = createDefaultResult();
testResult.setResult(type);
testResult.setLine(match.captured(3).toInt());
const Utils::FilePath file = constructSourceFilePath(m_buildDir, match.captured(2));
if (file.exists())
testResult->setFileName(file);
testResult->setDescription(match.captured(4));
testResult.setFileName(file);
testResult.setDescription(match.captured(4));
reportResult(testResult);
} else if (ExactMatch match = testDeath.match(line)) {
m_description.append(line);
@@ -175,19 +175,15 @@ void GTestOutputReader::processStdError(const QByteArray &outputLine)
emit newOutputLineAvailable(outputLine, OutputChannel::StdErr);
}
TestResultPtr GTestOutputReader::createDefaultResult() const
TestResult GTestOutputReader::createDefaultResult() const
{
GTestResult *result = new GTestResult(id(), m_currentTestSuite, m_projectFile,
m_currentTestCase, m_iteration);
const ITestTreeItem *testItem = result->findTestTreeItem();
GTestResult result(id(), m_currentTestSuite, m_projectFile, m_currentTestCase, m_iteration);
const ITestTreeItem *testItem = result.findTestTreeItem();
if (testItem && testItem->line()) {
result->setFileName(testItem->filePath());
result->setLine(testItem->line());
result.setFileName(testItem->filePath());
result.setLine(testItem->line());
}
return TestResultPtr(result);
return result;
}
void GTestOutputReader::setCurrentTestCase(const QString &testCase)
@@ -200,13 +196,13 @@ void GTestOutputReader::setCurrentTestSuite(const QString &testSuite)
m_currentTestSuite = testSuite;
}
void GTestOutputReader::handleDescriptionAndReportResult(TestResultPtr testResult)
void GTestOutputReader::handleDescriptionAndReportResult(const TestResult &testResult)
{
static const QRegularExpression failureLocation("^(.*):(\\d+): Failure$");
static const QRegularExpression skipOrErrorLocation("^(.*)\\((\\d+)\\): (Skipped|error:.*)$");
QStringList resultDescription;
TestResult result = testResult;
for (const QString &output : m_description.split('\n')) {
QRegularExpressionMatch innerMatch = failureLocation.match(output);
if (!innerMatch.hasMatch()) {
@@ -216,20 +212,20 @@ void GTestOutputReader::handleDescriptionAndReportResult(TestResultPtr testResul
continue;
}
}
testResult->setDescription(resultDescription.join('\n'));
result.setDescription(resultDescription.join('\n'));
reportResult(testResult);
resultDescription.clear();
testResult = createDefaultResult();
testResult->setResult(ResultType::MessageLocation);
testResult->setLine(innerMatch.captured(2).toInt());
result = createDefaultResult();
result.setResult(ResultType::MessageLocation);
result.setLine(innerMatch.captured(2).toInt());
const Utils::FilePath file = constructSourceFilePath(m_buildDir, innerMatch.captured(1));
if (file.exists())
testResult->setFileName(file);
result.setFileName(file);
resultDescription << output;
}
testResult->setDescription(resultDescription.join('\n'));
reportResult(testResult);
result.setDescription(resultDescription.join('\n'));
reportResult(result);
m_description.clear();
}