forked from qt-creator/qt-creator
AutoTest: Use TypedTreeItem for TestResultItem
Simplifies code and reduces (visible) static_casts on the auto test plugin's side. Change-Id: I31ae3e4f1a32d3e74527ccb36080944848f3b1fa Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -148,6 +148,11 @@ public:
|
|||||||
};
|
};
|
||||||
TreeItem::insertOrderedChild(item, cmp0);
|
TreeItem::insertOrderedChild(item, cmp0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ChildType *reverseFindAnyChild(const std::function<bool(TreeItem *)> &pred) const
|
||||||
|
{
|
||||||
|
return static_cast<ChildType *>(TreeItem::reverseFindAnyChild(pred));
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class QTCREATOR_UTILS_EXPORT StaticTreeItem : public TreeItem
|
class QTCREATOR_UTILS_EXPORT StaticTreeItem : public TreeItem
|
||||||
|
@@ -163,7 +163,7 @@ TestResultItem *TestResultItem::intermediateFor(const TestResultItem *item) cons
|
|||||||
QTC_ASSERT(item, return nullptr);
|
QTC_ASSERT(item, return nullptr);
|
||||||
const TestResult *otherResult = item->testResult();
|
const TestResult *otherResult = item->testResult();
|
||||||
for (int row = childCount() - 1; row >= 0; --row) {
|
for (int row = childCount() - 1; row >= 0; --row) {
|
||||||
TestResultItem *child = static_cast<TestResultItem *>(childAt(row));
|
TestResultItem *child = childAt(row);
|
||||||
const TestResult *testResult = child->testResult();
|
const TestResult *testResult = child->testResult();
|
||||||
if (testResult->result() != Result::MessageIntermediate)
|
if (testResult->result() != Result::MessageIntermediate)
|
||||||
continue;
|
continue;
|
||||||
@@ -186,7 +186,7 @@ TestResultItem *TestResultItem::createAndAddIntermediateFor(const TestResultItem
|
|||||||
/********************************* TestResultModel *****************************************/
|
/********************************* TestResultModel *****************************************/
|
||||||
|
|
||||||
TestResultModel::TestResultModel(QObject *parent)
|
TestResultModel::TestResultModel(QObject *parent)
|
||||||
: Utils::TreeModel<>(parent)
|
: Utils::TreeModel<TestResultItem>(new TestResultItem(TestResultPtr()), parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,16 +194,15 @@ void TestResultModel::updateParent(const TestResultItem *item)
|
|||||||
{
|
{
|
||||||
QTC_ASSERT(item, return);
|
QTC_ASSERT(item, return);
|
||||||
QTC_ASSERT(item->testResult(), return);
|
QTC_ASSERT(item->testResult(), return);
|
||||||
Utils::TreeItem *parentItem = item->parent();
|
TestResultItem *parentItem = item->parent();
|
||||||
if (parentItem == rootItem()) // do not update invisible root item
|
if (parentItem == rootItem()) // do not update invisible root item
|
||||||
return;
|
return;
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
TestResultItem *parentResultItem = static_cast<TestResultItem *>(parentItem);
|
parentItem->updateResult(changed, item->testResult()->result());
|
||||||
parentResultItem->updateResult(changed, item->testResult()->result());
|
|
||||||
if (!changed)
|
if (!changed)
|
||||||
return;
|
return;
|
||||||
emit dataChanged(parentItem->index(), parentItem->index());
|
emit dataChanged(parentItem->index(), parentItem->index());
|
||||||
updateParent(parentResultItem);
|
updateParent(parentItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoExpand)
|
void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoExpand)
|
||||||
@@ -212,7 +211,7 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
|||||||
if (testResult->result() == Result::MessageCurrentTest) {
|
if (testResult->result() == Result::MessageCurrentTest) {
|
||||||
// MessageCurrentTest should always be the last top level item
|
// MessageCurrentTest should always be the last top level item
|
||||||
if (lastRow >= 0) {
|
if (lastRow >= 0) {
|
||||||
TestResultItem *current = static_cast<TestResultItem *>(rootItem()->childAt(lastRow));
|
TestResultItem *current = rootItem()->childAt(lastRow);
|
||||||
const TestResult *result = current->testResult();
|
const TestResult *result = current->testResult();
|
||||||
if (result && result->result() == Result::MessageCurrentTest) {
|
if (result && result->result() == Result::MessageCurrentTest) {
|
||||||
current->updateDescription(testResult->description());
|
current->updateDescription(testResult->description());
|
||||||
@@ -235,14 +234,11 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
|||||||
if (AutotestPlugin::settings()->displayApplication) {
|
if (AutotestPlugin::settings()->displayApplication) {
|
||||||
const QString application = testResult->id();
|
const QString application = testResult->id();
|
||||||
if (!application.isEmpty()) {
|
if (!application.isEmpty()) {
|
||||||
for (int row = rootItem()->childCount() - 1; row >= 0; --row) {
|
root = rootItem()->findFirstLevelChild([&application](TestResultItem *child) {
|
||||||
TestResultItem *tmp = static_cast<TestResultItem *>(rootItem()->childAt(row));
|
QTC_ASSERT(child, return false);
|
||||||
auto tmpTestResult = tmp->testResult();
|
return child->testResult()->id() == application;
|
||||||
if (tmpTestResult->id() == application) {
|
});
|
||||||
root = tmp;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!root) {
|
if (!root) {
|
||||||
TestResult *tmpAppResult = new TestResult(application, application);
|
TestResult *tmpAppResult = new TestResult(application, application);
|
||||||
tmpAppResult->setResult(Result::Application);
|
tmpAppResult->setResult(Result::Application);
|
||||||
@@ -264,7 +260,7 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
|||||||
updateParent(newItem);
|
updateParent(newItem);
|
||||||
} else {
|
} else {
|
||||||
if (lastRow >= 0) {
|
if (lastRow >= 0) {
|
||||||
TestResultItem *current = static_cast<TestResultItem *>(rootItem()->childAt(lastRow));
|
TestResultItem *current = rootItem()->childAt(lastRow);
|
||||||
const TestResult *result = current->testResult();
|
const TestResult *result = current->testResult();
|
||||||
if (result && result->result() == Result::MessageCurrentTest) {
|
if (result && result->result() == Result::MessageCurrentTest) {
|
||||||
rootItem()->insertChild(current->index().row(), newItem);
|
rootItem()->insertChild(current->index().row(), newItem);
|
||||||
@@ -278,15 +274,11 @@ void TestResultModel::addTestResult(const TestResultPtr &testResult, bool autoEx
|
|||||||
|
|
||||||
void TestResultModel::removeCurrentTestMessage()
|
void TestResultModel::removeCurrentTestMessage()
|
||||||
{
|
{
|
||||||
std::vector<Utils::TreeItem *> topLevelItems(rootItem()->begin(), rootItem()->end());
|
TestResultItem *currentMessageItem = rootItem()->findFirstLevelChild([](TestResultItem *it) {
|
||||||
auto end = topLevelItems.rend();
|
return (it->testResult()->result() == Result::MessageCurrentTest);
|
||||||
for (auto it = topLevelItems.rbegin(); it != end; ++it) {
|
});
|
||||||
TestResultItem *current = static_cast<TestResultItem *>(*it);
|
if (currentMessageItem)
|
||||||
if (current->testResult()->result() == Result::MessageCurrentTest) {
|
destroyItem(currentMessageItem);
|
||||||
destroyItem(current);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestResultModel::clearTestResults()
|
void TestResultModel::clearTestResults()
|
||||||
@@ -302,7 +294,7 @@ void TestResultModel::clearTestResults()
|
|||||||
const TestResult *TestResultModel::testResult(const QModelIndex &idx)
|
const TestResult *TestResultModel::testResult(const QModelIndex &idx)
|
||||||
{
|
{
|
||||||
if (idx.isValid())
|
if (idx.isValid())
|
||||||
return static_cast<TestResultItem *>(itemForIndex(idx))->testResult();
|
return itemForIndex(idx)->testResult();
|
||||||
|
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@@ -353,7 +345,7 @@ TestResultItem *TestResultModel::findParentItemFor(const TestResultItem *item,
|
|||||||
|
|
||||||
if (root == nullptr && !name.isEmpty()) {
|
if (root == nullptr && !name.isEmpty()) {
|
||||||
for (int row = rootItem()->childCount() - 1; row >= 0; --row) {
|
for (int row = rootItem()->childCount() - 1; row >= 0; --row) {
|
||||||
TestResultItem *tmp = static_cast<TestResultItem *>(rootItem()->childAt(row));
|
TestResultItem *tmp = rootItem()->childAt(row);
|
||||||
auto tmpTestResult = tmp->testResult();
|
auto tmpTestResult = tmp->testResult();
|
||||||
if (tmpTestResult->id() == id && tmpTestResult->name() == name) {
|
if (tmpTestResult->id() == id && tmpTestResult->name() == name) {
|
||||||
root = tmp;
|
root = tmp;
|
||||||
@@ -369,7 +361,7 @@ TestResultItem *TestResultModel::findParentItemFor(const TestResultItem *item,
|
|||||||
TestResultItem *currentItem = static_cast<TestResultItem *>(it);
|
TestResultItem *currentItem = static_cast<TestResultItem *>(it);
|
||||||
return currentItem->testResult()->isDirectParentOf(result, &needsIntermediate);
|
return currentItem->testResult()->isDirectParentOf(result, &needsIntermediate);
|
||||||
};
|
};
|
||||||
TestResultItem *parent = static_cast<TestResultItem *>(root->reverseFindAnyChild(predicate));
|
TestResultItem *parent = root->reverseFindAnyChild(predicate);
|
||||||
if (parent) {
|
if (parent) {
|
||||||
if (needsIntermediate) {
|
if (needsIntermediate) {
|
||||||
// check if the intermediate is present already
|
// check if the intermediate is present already
|
||||||
|
@@ -37,7 +37,7 @@
|
|||||||
namespace Autotest {
|
namespace Autotest {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
class TestResultItem : public Utils::TreeItem
|
class TestResultItem : public Utils::TypedTreeItem<TestResultItem, TestResultItem>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit TestResultItem(const TestResultPtr &testResult);
|
explicit TestResultItem(const TestResultPtr &testResult);
|
||||||
@@ -53,7 +53,7 @@ private:
|
|||||||
TestResultPtr m_testResult;
|
TestResultPtr m_testResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TestResultModel : public Utils::TreeModel<>
|
class TestResultModel : public Utils::TreeModel<TestResultItem>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit TestResultModel(QObject *parent = nullptr);
|
explicit TestResultModel(QObject *parent = nullptr);
|
||||||
|
Reference in New Issue
Block a user