forked from qt-creator/qt-creator
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:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user