AutoTest: Correct updating of summary items

If we get no finish message for a test case or function
we did not update the result of the summary item.
This patch fixes this and also updates the respective
parents accordingly.

Change-Id: I98a8c69735f89d592f6152dbbc7a632e285c3a4d
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2017-12-13 13:10:00 +01:00
parent 8dca82bd9c
commit e4eb4c3d0f
2 changed files with 55 additions and 51 deletions

View File

@@ -101,22 +101,27 @@ void TestResultItem::updateDescription(const QString &description)
m_testResult->setDescription(description); m_testResult->setDescription(description);
} }
void TestResultItem::updateResult() void TestResultItem::updateResult(bool &changed, Result::Type addedChildType)
{ {
if (!TestResult::isMessageCaseStart(m_testResult->result())) changed = false;
const Result::Type old = m_testResult->result();
if (old == Result::MessageTestCaseFailWarn) // can't become worse
return;
if (!TestResult::isMessageCaseStart(old))
return; return;
Result::Type newResult = Result::MessageTestCaseSuccess; Result::Type newResult = Result::MessageTestCaseSuccess;
bool withWarning = false; switch (addedChildType) {
for (Utils::TreeItem *child : *this) {
const TestResult *current = static_cast<TestResultItem *>(child)->testResult();
if (current) {
switch (current->result()) {
case Result::Fail: case Result::Fail:
case Result::MessageFatal: case Result::MessageFatal:
case Result::MessageSystem:
case Result::UnexpectedPass: case Result::UnexpectedPass:
case Result::MessageTestCaseFail: case Result::MessageTestCaseFail:
newResult = Result::MessageTestCaseFail; newResult = (old == Result::MessageTestCaseSuccessWarn) ? Result::MessageTestCaseFailWarn
: Result::MessageTestCaseFail;
break;
case Result::MessageTestCaseFailWarn:
newResult = Result::MessageTestCaseFailWarn;
break; break;
case Result::ExpectedFail: case Result::ExpectedFail:
case Result::MessageWarn: case Result::MessageWarn:
@@ -124,29 +129,20 @@ void TestResultItem::updateResult()
case Result::BlacklistedFail: case Result::BlacklistedFail:
case Result::BlacklistedPass: case Result::BlacklistedPass:
case Result::MessageTestCaseSuccessWarn: case Result::MessageTestCaseSuccessWarn:
case Result::MessageTestCaseFailWarn: newResult = (old == Result::MessageTestCaseFail) ? Result::MessageTestCaseFailWarn
withWarning = true; : Result::MessageTestCaseSuccessWarn;
break; break;
default: {} case Result::Pass:
case Result::MessageTestCaseSuccess:
newResult = (old == Result::MessageIntermediate || old == Result::MessageTestCaseStart)
? Result::MessageTestCaseSuccess : old;
break;
default:
return;
} }
} changed = old != newResult;
} if (changed)
if (withWarning) {
m_testResult->setResult(newResult == Result::MessageTestCaseSuccess
? Result::MessageTestCaseSuccessWarn
: Result::MessageTestCaseFailWarn);
} else {
m_testResult->setResult(newResult); m_testResult->setResult(newResult);
}
}
void TestResultItem::updateIntermediateChildren()
{
for (Utils::TreeItem *child : *this) {
TestResultItem *childItem = static_cast<TestResultItem *>(child);
if (childItem->testResult()->result() == Result::MessageIntermediate)
childItem->updateResult();
}
} }
TestResultItem *TestResultItem::intermediateFor(const TestResultItem *item) const TestResultItem *TestResultItem::intermediateFor(const TestResultItem *item) const
@@ -181,6 +177,22 @@ TestResultModel::TestResultModel(QObject *parent)
{ {
} }
void TestResultModel::updateParent(const TestResultItem *item)
{
QTC_ASSERT(item, return);
QTC_ASSERT(item->testResult(), return);
Utils::TreeItem *parentItem = item->parent();
if (parentItem == rootItem()) // do not update invisible root item
return;
bool changed = false;
TestResultItem *parentResultItem = static_cast<TestResultItem *>(parentItem);
parentResultItem->updateResult(changed, item->testResult()->result());
if (!changed)
return;
emit dataChanged(parentItem->index(), parentItem->index());
updateParent(parentResultItem);
}
void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoExpand) void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoExpand)
{ {
const int lastRow = rootItem()->childCount() - 1; const int lastRow = rootItem()->childCount() - 1;
@@ -211,15 +223,7 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
parentItem->appendChild(newItem); parentItem->appendChild(newItem);
if (autoExpand) if (autoExpand)
parentItem->expand(); parentItem->expand();
if (testResult->result() == Result::MessageTestCaseEnd) { updateParent(newItem);
if (parentItem->childCount()) {
parentItem->updateIntermediateChildren();
emit dataChanged(parentItem->firstChild()->index(),
parentItem->lastChild()->index());
}
parentItem->updateResult();
emit dataChanged(parentItem->index(), parentItem->index());
}
} else { } else {
if (lastRow >= 0) { if (lastRow >= 0) {
TestResultItem *current = static_cast<TestResultItem *>(rootItem()->childAt(lastRow)); TestResultItem *current = static_cast<TestResultItem *>(rootItem()->childAt(lastRow));

View File

@@ -45,8 +45,7 @@ public:
QVariant data(int column, int role) const override; QVariant data(int column, int role) const override;
const TestResult *testResult() const { return m_testResult.data(); } const TestResult *testResult() const { return m_testResult.data(); }
void updateDescription(const QString &description); void updateDescription(const QString &description);
void updateResult(); void updateResult(bool &changed, Result::Type addedChildType);
void updateIntermediateChildren();
TestResultItem *intermediateFor(const TestResultItem *item) const; TestResultItem *intermediateFor(const TestResultItem *item) const;
TestResultItem *createAndAddIntermediateFor(const TestResultItem *child); TestResultItem *createAndAddIntermediateFor(const TestResultItem *child);
@@ -77,6 +76,7 @@ private:
void addFileName(const QString &fileName); void addFileName(const QString &fileName);
TestResultItem *findParentItemFor(const TestResultItem *item, TestResultItem *findParentItemFor(const TestResultItem *item,
const TestResultItem *startItem = 0) const; const TestResultItem *startItem = 0) const;
void updateParent(const TestResultItem *item);
QMap<Result::Type, int> m_testResultCount; QMap<Result::Type, int> m_testResultCount;
int m_widthOfLineNumber = 0; int m_widthOfLineNumber = 0;
int m_maxWidthOfFileName = 0; int m_maxWidthOfFileName = 0;