forked from qt-creator/qt-creator
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:
@@ -101,52 +101,48 @@ 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) {
|
case Result::Fail:
|
||||||
const TestResult *current = static_cast<TestResultItem *>(child)->testResult();
|
case Result::MessageFatal:
|
||||||
if (current) {
|
case Result::MessageSystem:
|
||||||
switch (current->result()) {
|
case Result::UnexpectedPass:
|
||||||
case Result::Fail:
|
case Result::MessageTestCaseFail:
|
||||||
case Result::MessageFatal:
|
newResult = (old == Result::MessageTestCaseSuccessWarn) ? Result::MessageTestCaseFailWarn
|
||||||
case Result::UnexpectedPass:
|
: Result::MessageTestCaseFail;
|
||||||
case Result::MessageTestCaseFail:
|
break;
|
||||||
newResult = Result::MessageTestCaseFail;
|
case Result::MessageTestCaseFailWarn:
|
||||||
break;
|
newResult = Result::MessageTestCaseFailWarn;
|
||||||
case Result::ExpectedFail:
|
break;
|
||||||
case Result::MessageWarn:
|
case Result::ExpectedFail:
|
||||||
case Result::Skip:
|
case Result::MessageWarn:
|
||||||
case Result::BlacklistedFail:
|
case Result::Skip:
|
||||||
case Result::BlacklistedPass:
|
case Result::BlacklistedFail:
|
||||||
case Result::MessageTestCaseSuccessWarn:
|
case Result::BlacklistedPass:
|
||||||
case Result::MessageTestCaseFailWarn:
|
case Result::MessageTestCaseSuccessWarn:
|
||||||
withWarning = true;
|
newResult = (old == Result::MessageTestCaseFail) ? Result::MessageTestCaseFailWarn
|
||||||
break;
|
: Result::MessageTestCaseSuccessWarn;
|
||||||
default: {}
|
break;
|
||||||
}
|
case Result::Pass:
|
||||||
}
|
case Result::MessageTestCaseSuccess:
|
||||||
|
newResult = (old == Result::MessageIntermediate || old == Result::MessageTestCaseStart)
|
||||||
|
? Result::MessageTestCaseSuccess : old;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (withWarning) {
|
changed = old != newResult;
|
||||||
m_testResult->setResult(newResult == Result::MessageTestCaseSuccess
|
if (changed)
|
||||||
? 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));
|
||||||
|
@@ -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;
|
||||||
|
Reference in New Issue
Block a user