diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp index e1976771ab0..0d49dfc28e5 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.cpp +++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp @@ -403,8 +403,6 @@ bool GTestTreeItem::modify(const TestParseResult *result) TestTreeItem *GTestTreeItem::createParentGroupNode() const { - if (type() != TestCase) - return nullptr; if (GTestFramework::groupMode() == GTest::Constants::Directory) { const QFileInfo fileInfo(filePath()); const QFileInfo base(fileInfo.absolutePath()); @@ -511,6 +509,11 @@ bool GTestTreeItem::isGroupNodeFor(const TestTreeItem *other) const } } +bool GTestTreeItem::isGroupable() const +{ + return type() == TestCase; +} + TestTreeItem *GTestTreeItem::applyFilters() { if (type() != TestCase) diff --git a/src/plugins/autotest/gtest/gtesttreeitem.h b/src/plugins/autotest/gtest/gtesttreeitem.h index 22225ae7f5d..8f1300007f2 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.h +++ b/src/plugins/autotest/gtest/gtesttreeitem.h @@ -72,6 +72,7 @@ public: QString nameSuffix() const; QSet internalTargets() const override; bool isGroupNodeFor(const TestTreeItem *other) const override; + bool isGroupable() const override; TestTreeItem *applyFilters() override; private: bool modifyTestSetContent(const GTestParseResult *result); diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp index 2f375a484e7..c9917d41bcb 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.cpp +++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp @@ -346,6 +346,11 @@ TestTreeItem *QtTestTreeItem::createParentGroupNode() const return new QtTestTreeItem(base.baseName(), fileInfo.absolutePath(), TestTreeItem::GroupNode); } +bool QtTestTreeItem::isGroupable() const +{ + return type() == TestCase; +} + TestTreeItem *QtTestTreeItem::findChildByNameAndInheritance(const QString &name, bool inherited) const { return findFirstLevelChild([name, inherited](const TestTreeItem *other) { diff --git a/src/plugins/autotest/qtest/qttesttreeitem.h b/src/plugins/autotest/qtest/qttesttreeitem.h index 2de8eb8f821..3c7f9c4bd7d 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.h +++ b/src/plugins/autotest/qtest/qttesttreeitem.h @@ -52,6 +52,7 @@ public: void setInherited(bool inherited) { m_inherited = inherited; } bool inherited() const { return m_inherited; } TestTreeItem *createParentGroupNode() const override; + bool isGroupable() const override; private: TestTreeItem *findChildByNameAndInheritance(const QString &name, bool inherited) const; QString nameSuffix() const; diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index 227c56410fe..94672bcc238 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -401,16 +401,16 @@ bool QuickTestTreeItem::removeOnSweepIfEmpty() const TestTreeItem *QuickTestTreeItem::createParentGroupNode() const { - if (filePath().isEmpty() || name().isEmpty()) - return nullptr; - if (type() == TestFunctionOrSet) - return nullptr; - const QFileInfo fileInfo(filePath()); const QFileInfo base(fileInfo.absolutePath()); return new QuickTestTreeItem(base.baseName(), fileInfo.absolutePath(), TestTreeItem::GroupNode); } +bool QuickTestTreeItem::isGroupable() const +{ + return type() == TestCase && !name().isEmpty() && !filePath().isEmpty(); +} + QSet QuickTestTreeItem::internalTargets() const { QSet result; diff --git a/src/plugins/autotest/quick/quicktesttreeitem.h b/src/plugins/autotest/quick/quicktesttreeitem.h index 97c287f38f2..b1d49065f39 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.h +++ b/src/plugins/autotest/quick/quicktesttreeitem.h @@ -53,6 +53,7 @@ public: bool isGroupNodeFor(const TestTreeItem *other) const override; bool removeOnSweepIfEmpty() const override; TestTreeItem *createParentGroupNode() const override; + bool isGroupable() const override; QSet internalTargets() const override; void markForRemovalRecursively(const QString &filePath) override; private: diff --git a/src/plugins/autotest/testtreeitem.cpp b/src/plugins/autotest/testtreeitem.cpp index c136ed30ab2..c6b5101557d 100644 --- a/src/plugins/autotest/testtreeitem.cpp +++ b/src/plugins/autotest/testtreeitem.cpp @@ -302,6 +302,11 @@ bool TestTreeItem::isGroupNodeFor(const TestTreeItem *other) const return QFileInfo(other->filePath()).absolutePath() == filePath(); } +bool TestTreeItem::isGroupable() const +{ + return true; +} + QSet TestTreeItem::internalTargets() const { auto cppMM = CppTools::CppModelManager::instance(); diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h index 10c5dee29bd..de9e824eda1 100644 --- a/src/plugins/autotest/testtreeitem.h +++ b/src/plugins/autotest/testtreeitem.h @@ -120,6 +120,7 @@ public: virtual TestTreeItem *findChild(const TestTreeItem *other) = 0; virtual bool modify(const TestParseResult *result) = 0; virtual bool isGroupNodeFor(const TestTreeItem *other) const; + virtual bool isGroupable() const; virtual TestTreeItem *createParentGroupNode() const = 0; // based on (internal) filters this will be used to filter out sub items (and remove them) // returns a copy of the item that contains the filtered out children or nullptr diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp index 48e32240328..0b9eaaa4267 100644 --- a/src/plugins/autotest/testtreemodel.cpp +++ b/src/plugins/autotest/testtreemodel.cpp @@ -346,13 +346,13 @@ static void applyParentCheckState(TestTreeItem *parent, TestTreeItem *newItem) void TestTreeModel::insertItemInParent(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled) { TestTreeItem *parentNode = root; - if (groupingEnabled) { + if (groupingEnabled && item->isGroupable()) { parentNode = root->findFirstLevelChild([item] (const TestTreeItem *it) { return it->isGroupNodeFor(item); }); if (!parentNode) { parentNode = item->createParentGroupNode(); - if (!parentNode) // we might not get a group node at all + if (!QTC_GUARD(parentNode)) // we might not get a group node at all parentNode = root; else root->appendChild(parentNode);