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:
@@ -21,7 +21,7 @@ namespace Internal {
|
||||
|
||||
/********************************* TestResultItem ******************************************/
|
||||
|
||||
TestResultItem::TestResultItem(const TestResultPtr &testResult)
|
||||
TestResultItem::TestResultItem(const TestResult &testResult)
|
||||
: m_testResult(testResult)
|
||||
{
|
||||
}
|
||||
@@ -71,9 +71,9 @@ QVariant TestResultItem::data(int column, int role) const
|
||||
{
|
||||
switch (role) {
|
||||
case Qt::DecorationRole: {
|
||||
if (!m_testResult)
|
||||
return QVariant();
|
||||
const ResultType result = m_testResult->result();
|
||||
if (!m_testResult.isValid())
|
||||
return {};
|
||||
const ResultType result = m_testResult.result();
|
||||
if (result == ResultType::MessageLocation && parent())
|
||||
return parent()->data(column, role);
|
||||
if (result == ResultType::TestStart)
|
||||
@@ -81,7 +81,7 @@ QVariant TestResultItem::data(int column, int role) const
|
||||
return testResultIcon(result);
|
||||
}
|
||||
case Qt::DisplayRole:
|
||||
return m_testResult ? m_testResult->outputString(true) : QVariant();
|
||||
return m_testResult.isValid() ? m_testResult.outputString(true) : QVariant();
|
||||
default:
|
||||
return Utils::TreeItem::data(column, role);
|
||||
}
|
||||
@@ -89,9 +89,8 @@ QVariant TestResultItem::data(int column, int role) const
|
||||
|
||||
void TestResultItem::updateDescription(const QString &description)
|
||||
{
|
||||
QTC_ASSERT(m_testResult, return);
|
||||
|
||||
m_testResult->setDescription(description);
|
||||
QTC_ASSERT(m_testResult.isValid(), return);
|
||||
m_testResult.setDescription(description);
|
||||
}
|
||||
|
||||
static bool isSignificant(ResultType type)
|
||||
@@ -117,7 +116,7 @@ void TestResultItem::updateResult(bool &changed, ResultType addedChildType,
|
||||
const std::optional<SummaryEvaluation> &summary)
|
||||
{
|
||||
changed = false;
|
||||
if (m_testResult->result() != ResultType::TestStart)
|
||||
if (m_testResult.result() != ResultType::TestStart)
|
||||
return;
|
||||
|
||||
if (!isSignificant(addedChildType) || (addedChildType == ResultType::TestStart && !summary))
|
||||
@@ -165,13 +164,13 @@ void TestResultItem::updateResult(bool &changed, ResultType addedChildType,
|
||||
TestResultItem *TestResultItem::intermediateFor(const TestResultItem *item) const
|
||||
{
|
||||
QTC_ASSERT(item, return nullptr);
|
||||
const TestResult *otherResult = item->testResult();
|
||||
const TestResult otherResult = item->testResult();
|
||||
for (int row = childCount() - 1; row >= 0; --row) {
|
||||
TestResultItem *child = childAt(row);
|
||||
const TestResult *testResult = child->testResult();
|
||||
if (testResult->result() != ResultType::TestStart)
|
||||
const TestResult testResult = child->testResult();
|
||||
if (testResult.result() != ResultType::TestStart)
|
||||
continue;
|
||||
if (testResult->isIntermediateFor(otherResult))
|
||||
if (testResult.isIntermediateFor(otherResult))
|
||||
return child;
|
||||
}
|
||||
return nullptr;
|
||||
@@ -179,9 +178,9 @@ TestResultItem *TestResultItem::intermediateFor(const TestResultItem *item) cons
|
||||
|
||||
TestResultItem *TestResultItem::createAndAddIntermediateFor(const TestResultItem *child)
|
||||
{
|
||||
TestResultPtr result(child->testResult()->createIntermediateResult());
|
||||
QTC_ASSERT(!result.isNull(), return nullptr);
|
||||
result->setResult(ResultType::TestStart);
|
||||
TestResult result = child->testResult().intermediateResult();
|
||||
QTC_ASSERT(result.isValid(), return nullptr);
|
||||
result.setResult(ResultType::TestStart);
|
||||
TestResultItem *intermediate = new TestResultItem(result);
|
||||
appendChild(intermediate);
|
||||
return intermediate;
|
||||
@@ -189,17 +188,17 @@ TestResultItem *TestResultItem::createAndAddIntermediateFor(const TestResultItem
|
||||
|
||||
QString TestResultItem::resultString() const
|
||||
{
|
||||
if (testResult()->result() != ResultType::TestStart)
|
||||
return TestResult::resultToString(testResult()->result());
|
||||
if (testResult().result() != ResultType::TestStart)
|
||||
return TestResult::resultToString(testResult().result());
|
||||
if (!m_summaryResult)
|
||||
return QString();
|
||||
return {};
|
||||
return m_summaryResult->failed ? QString("FAIL") : QString("PASS");
|
||||
}
|
||||
|
||||
/********************************* TestResultModel *****************************************/
|
||||
|
||||
TestResultModel::TestResultModel(QObject *parent)
|
||||
: Utils::TreeModel<TestResultItem>(new TestResultItem(TestResultPtr()), parent)
|
||||
: Utils::TreeModel<TestResultItem>(new TestResultItem({}), parent)
|
||||
{
|
||||
connect(TestRunner::instance(), &TestRunner::reportSummary,
|
||||
this, [this](const QString &id, const QHash<ResultType, int> &summary){
|
||||
@@ -210,12 +209,12 @@ TestResultModel::TestResultModel(QObject *parent)
|
||||
void TestResultModel::updateParent(const TestResultItem *item)
|
||||
{
|
||||
QTC_ASSERT(item, return);
|
||||
QTC_ASSERT(item->testResult(), return);
|
||||
QTC_ASSERT(item->testResult().isValid(), return);
|
||||
TestResultItem *parentItem = item->parent();
|
||||
if (parentItem == rootItem()) // do not update invisible root item
|
||||
return;
|
||||
bool changed = false;
|
||||
parentItem->updateResult(changed, item->testResult()->result(), item->summaryResult());
|
||||
parentItem->updateResult(changed, item->testResult().result(), item->summaryResult());
|
||||
if (!changed)
|
||||
return;
|
||||
emit dataChanged(parentItem->index(), parentItem->index());
|
||||
@@ -232,16 +231,16 @@ static bool isFailed(ResultType type)
|
||||
}
|
||||
}
|
||||
|
||||
void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoExpand)
|
||||
void TestResultModel::addTestResult(const TestResult &testResult, bool autoExpand)
|
||||
{
|
||||
const int lastRow = rootItem()->childCount() - 1;
|
||||
if (testResult->result() == ResultType::MessageCurrentTest) {
|
||||
if (testResult.result() == ResultType::MessageCurrentTest) {
|
||||
// MessageCurrentTest should always be the last top level item
|
||||
if (lastRow >= 0) {
|
||||
TestResultItem *current = rootItem()->childAt(lastRow);
|
||||
const TestResult *result = current->testResult();
|
||||
if (result && result->result() == ResultType::MessageCurrentTest) {
|
||||
current->updateDescription(testResult->description());
|
||||
const TestResult result = current->testResult();
|
||||
if (result.isValid() && result.result() == ResultType::MessageCurrentTest) {
|
||||
current->updateDescription(testResult.description());
|
||||
emit dataChanged(current->index(), current->index());
|
||||
return;
|
||||
}
|
||||
@@ -251,22 +250,22 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
||||
return;
|
||||
}
|
||||
|
||||
m_testResultCount[testResult->id()][testResult->result()]++;
|
||||
m_testResultCount[testResult.id()][testResult.result()]++;
|
||||
|
||||
TestResultItem *newItem = new TestResultItem(testResult);
|
||||
TestResultItem *root = nullptr;
|
||||
if (AutotestPlugin::settings()->displayApplication) {
|
||||
const QString application = testResult->id();
|
||||
const QString application = testResult.id();
|
||||
if (!application.isEmpty()) {
|
||||
root = rootItem()->findFirstLevelChild([&application](TestResultItem *child) {
|
||||
QTC_ASSERT(child, return false);
|
||||
return child->testResult()->id() == application;
|
||||
return child->testResult().id() == application;
|
||||
});
|
||||
|
||||
if (!root) {
|
||||
TestResult *tmpAppResult = new TestResult(application, application);
|
||||
tmpAppResult->setResult(ResultType::Application);
|
||||
root = new TestResultItem(TestResultPtr(tmpAppResult));
|
||||
TestResult tmpAppResult(application, application);
|
||||
tmpAppResult.setResult(ResultType::Application);
|
||||
root = new TestResultItem(tmpAppResult);
|
||||
if (lastRow >= 0)
|
||||
rootItem()->insertChild(lastRow, root);
|
||||
else
|
||||
@@ -276,7 +275,7 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
||||
}
|
||||
|
||||
TestResultItem *parentItem = findParentItemFor(newItem, root);
|
||||
addFileName(testResult->fileName().fileName()); // ensure we calculate the results pane correctly
|
||||
addFileName(testResult.fileName().fileName()); // ensure we calculate the results pane correctly
|
||||
if (parentItem) {
|
||||
parentItem->appendChild(newItem);
|
||||
if (autoExpand) {
|
||||
@@ -288,8 +287,8 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
||||
} else {
|
||||
if (lastRow >= 0) {
|
||||
TestResultItem *current = rootItem()->childAt(lastRow);
|
||||
const TestResult *result = current->testResult();
|
||||
if (result && result->result() == ResultType::MessageCurrentTest) {
|
||||
const TestResult result = current->testResult();
|
||||
if (result.isValid() && result.result() == ResultType::MessageCurrentTest) {
|
||||
rootItem()->insertChild(current->index().row(), newItem);
|
||||
return;
|
||||
}
|
||||
@@ -298,8 +297,8 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
||||
rootItem()->appendChild(newItem);
|
||||
}
|
||||
|
||||
if (isFailed(testResult->result())) {
|
||||
if (const ITestTreeItem *it = testResult->findTestTreeItem()) {
|
||||
if (isFailed(testResult.result())) {
|
||||
if (const ITestTreeItem *it = testResult.findTestTreeItem()) {
|
||||
TestTreeModel *model = TestTreeModel::instance();
|
||||
model->setData(model->indexForItem(it), true, FailedRole);
|
||||
}
|
||||
@@ -309,7 +308,7 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
||||
void TestResultModel::removeCurrentTestMessage()
|
||||
{
|
||||
TestResultItem *currentMessageItem = rootItem()->findFirstLevelChild([](TestResultItem *it) {
|
||||
return (it->testResult()->result() == ResultType::MessageCurrentTest);
|
||||
return (it->testResult().result() == ResultType::MessageCurrentTest);
|
||||
});
|
||||
if (currentMessageItem)
|
||||
destroyItem(currentMessageItem);
|
||||
@@ -326,12 +325,11 @@ void TestResultModel::clearTestResults()
|
||||
m_widthOfLineNumber = 0;
|
||||
}
|
||||
|
||||
const TestResult *TestResultModel::testResult(const QModelIndex &idx)
|
||||
TestResult TestResultModel::testResult(const QModelIndex &idx)
|
||||
{
|
||||
if (idx.isValid())
|
||||
return itemForIndex(idx)->testResult();
|
||||
|
||||
return nullptr;
|
||||
return {};
|
||||
}
|
||||
|
||||
void TestResultModel::recalculateMaxWidthOfFileName(const QFont &font)
|
||||
@@ -383,15 +381,15 @@ TestResultItem *TestResultModel::findParentItemFor(const TestResultItem *item,
|
||||
{
|
||||
QTC_ASSERT(item, return nullptr);
|
||||
TestResultItem *root = startItem ? const_cast<TestResultItem *>(startItem) : nullptr;
|
||||
const TestResult *result = item->testResult();
|
||||
const QString &name = result->name();
|
||||
const QString &id = result->id();
|
||||
const TestResult result = item->testResult();
|
||||
const QString &name = result.name();
|
||||
const QString &id = result.id();
|
||||
|
||||
if (root == nullptr && !name.isEmpty()) {
|
||||
for (int row = rootItem()->childCount() - 1; row >= 0; --row) {
|
||||
TestResultItem *tmp = rootItem()->childAt(row);
|
||||
auto tmpTestResult = tmp->testResult();
|
||||
if (tmpTestResult->id() == id && tmpTestResult->name() == name) {
|
||||
const TestResult tmpTestResult = tmp->testResult();
|
||||
if (tmpTestResult.id() == id && tmpTestResult.name() == name) {
|
||||
root = tmp;
|
||||
break;
|
||||
}
|
||||
@@ -403,7 +401,7 @@ TestResultItem *TestResultModel::findParentItemFor(const TestResultItem *item,
|
||||
bool needsIntermediate = false;
|
||||
auto predicate = [result, &needsIntermediate](Utils::TreeItem *it) {
|
||||
TestResultItem *currentItem = static_cast<TestResultItem *>(it);
|
||||
return currentItem->testResult()->isDirectParentOf(result, &needsIntermediate);
|
||||
return currentItem->testResult().isDirectParentOf(result, &needsIntermediate);
|
||||
};
|
||||
TestResultItem *parent = root->reverseFindAnyChild(predicate);
|
||||
if (parent) {
|
||||
@@ -480,7 +478,7 @@ bool TestResultFilterModel::hasResults()
|
||||
return rowCount(QModelIndex());
|
||||
}
|
||||
|
||||
const TestResult *TestResultFilterModel::testResult(const QModelIndex &index) const
|
||||
TestResult TestResultFilterModel::testResult(const QModelIndex &index) const
|
||||
{
|
||||
return m_sourceModel->testResult(mapToSource(index));
|
||||
}
|
||||
@@ -495,7 +493,7 @@ bool TestResultFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &s
|
||||
QModelIndex index = m_sourceModel->index(sourceRow, 0, sourceParent);
|
||||
if (!index.isValid())
|
||||
return false;
|
||||
ResultType resultType = m_sourceModel->testResult(index)->result();
|
||||
const ResultType resultType = m_sourceModel->testResult(index).result();
|
||||
if (resultType == ResultType::TestStart) {
|
||||
TestResultItem *item = m_sourceModel->itemForIndex(index);
|
||||
QTC_ASSERT(item, return false);
|
||||
@@ -511,7 +509,7 @@ bool TestResultFilterModel::acceptTestCaseResult(const QModelIndex &srcIndex) co
|
||||
for (int row = 0, count = m_sourceModel->rowCount(srcIndex); row < count; ++row) {
|
||||
const QModelIndex &child = m_sourceModel->index(row, 0, srcIndex);
|
||||
TestResultItem *item = m_sourceModel->itemForIndex(child);
|
||||
ResultType type = item->testResult()->result();
|
||||
const ResultType type = item->testResult().result();
|
||||
|
||||
if (type == ResultType::TestStart) {
|
||||
if (!item->summaryResult())
|
||||
|
||||
Reference in New Issue
Block a user