diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index a1b04f33fe2..6d3a2b99f48 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -348,6 +348,12 @@ bool QuickTestTreeItem::isGroupNodeFor(const TestTreeItem *other) const return TestTreeItem::isGroupNodeFor(other); } +bool QuickTestTreeItem::removeOnSweepIfEmpty() const +{ + return TestTreeItem::removeOnSweepIfEmpty() + || (type() == TestCase && name().isEmpty()); // remove pseudo item '' +} + TestTreeItem *QuickTestTreeItem::createParentGroupNode() const { if (filePath().isEmpty() || name().isEmpty()) diff --git a/src/plugins/autotest/quick/quicktesttreeitem.h b/src/plugins/autotest/quick/quicktesttreeitem.h index b7116125e30..30b5efd317b 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.h +++ b/src/plugins/autotest/quick/quicktesttreeitem.h @@ -48,6 +48,7 @@ public: bool modify(const TestParseResult *result) override; bool lessThan(const TestTreeItem *other, SortMode mode) const override; bool isGroupNodeFor(const TestTreeItem *other) const override; + bool removeOnSweepIfEmpty() const override; TestTreeItem *createParentGroupNode() const override; QSet internalTargets() const override; private: diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h index 8234321bc03..012104f91f9 100644 --- a/src/plugins/autotest/testtreeitem.h +++ b/src/plugins/autotest/testtreeitem.h @@ -94,6 +94,7 @@ public: void markForRemoval(bool mark); void markForRemovalRecursively(bool mark); virtual void markForRemovalRecursively(const QString &filePath); + virtual bool removeOnSweepIfEmpty() const { return m_type == GroupNode; } bool markedForRemoval() const { return m_status == MarkedForRemoval; } bool newlyAdded() const { return m_status == NewlyAdded; } TestTreeItem *parentItem() const; diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp index a4dea3c8e00..f189c6472d6 100644 --- a/src/plugins/autotest/testtreemodel.cpp +++ b/src/plugins/autotest/testtreemodel.cpp @@ -255,6 +255,10 @@ bool TestTreeModel::sweepChildren(TestTreeItem *item) hasChanged = true; } else if (child->hasChildren()) { hasChanged |= sweepChildren(child); + if (!child->hasChildren() && child->removeOnSweepIfEmpty()) { + destroyItem(child); + revalidateCheckState(item); + } } else { hasChanged |= child->newlyAdded(); } @@ -285,7 +289,7 @@ void TestTreeModel::insertItemInParent(TestTreeItem *item, TestTreeItem *root, b void TestTreeModel::revalidateCheckState(TestTreeItem *item) { QTC_ASSERT(item, return); - QTC_ASSERT(item->hasChildren(), return); + const TestTreeItem::Type type = item->type(); if (type == TestTreeItem::TestSpecialFunction || type == TestTreeItem::TestDataFunction || type == TestTreeItem::TestDataTag) {