AutoTest: Limit search for test tree items

If searching for a test tree item matching a GTestResult
we can safely limit searching to the subtree holding
GTests only.

Change-Id: Iae27c5a48f24a2e59fc4ccd0c2917520fc22b053
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2017-10-25 13:08:16 +02:00
parent a3d845815a
commit 16f2ea10bd
2 changed files with 23 additions and 16 deletions

View File

@@ -24,9 +24,12 @@
****************************************************************************/ ****************************************************************************/
#include "gtestresult.h" #include "gtestresult.h"
#include "../testtreemodel.h" #include "gtestconstants.h"
#include "../testframeworkmanager.h"
#include "../testtreeitem.h" #include "../testtreeitem.h"
#include <coreplugin/id.h>
namespace Autotest { namespace Autotest {
namespace Internal { namespace Internal {
@@ -90,17 +93,21 @@ static QString normalizeTestName(const QString &testname)
const TestTreeItem *GTestResult::findTestTreeItem() const const TestTreeItem *GTestResult::findTestTreeItem() const
{ {
const auto item = TestTreeModel::instance()->findNonRootItem([this](const Utils::TreeItem *item) { auto id = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(GTest::Constants::FRAMEWORK_NAME);
const TestTreeItem &treeItem = static_cast<const TestTreeItem &>(*item); const TestTreeItem *rootNode = TestFrameworkManager::instance()->rootNodeForTestFramework(id);
return matches(treeItem); if (!rootNode)
}); return nullptr;
const auto item = rootNode->findAnyChild([this](const Utils::TreeItem *item) {
const auto treeItem = static_cast<const TestTreeItem *>(item);
return treeItem && matches(treeItem);
});
return static_cast<const TestTreeItem *>(item); return static_cast<const TestTreeItem *>(item);
} }
bool GTestResult::matches(const TestTreeItem &treeItem) const bool GTestResult::matches(const TestTreeItem *treeItem) const
{ {
if (treeItem.proFile() != m_projectFile) if (treeItem->proFile() != m_projectFile)
return false; return false;
if (isTest()) if (isTest())
@@ -109,21 +116,21 @@ bool GTestResult::matches(const TestTreeItem &treeItem) const
return matchesTestFunctionOrSet(treeItem); return matchesTestFunctionOrSet(treeItem);
} }
bool GTestResult::matchesTestFunctionOrSet(const TestTreeItem &treeItem) const bool GTestResult::matchesTestFunctionOrSet(const TestTreeItem *treeItem) const
{ {
if (treeItem.type() != TestTreeItem::TestFunctionOrSet) if (treeItem->type() != TestTreeItem::TestFunctionOrSet)
return false; return false;
const QString testItemTestSet = treeItem.parentItem()->name() + '.' + treeItem.name(); const QString testItemTestSet = treeItem->parentItem()->name() + '.' + treeItem->name();
return testItemTestSet == normalizeName(m_testSetName); return testItemTestSet == normalizeName(m_testSetName);
} }
bool GTestResult::matchesTestCase(const TestTreeItem &treeItem) const bool GTestResult::matchesTestCase(const TestTreeItem *treeItem) const
{ {
if (treeItem.type() != TestTreeItem::TestCase) if (treeItem->type() != TestTreeItem::TestCase)
return false; return false;
return treeItem.name() == normalizeTestName(name()); return treeItem->name() == normalizeTestName(name());
} }
} // namespace Internal } // namespace Internal

View File

@@ -46,9 +46,9 @@ private:
bool isTest() const { return m_testSetName.isEmpty(); } bool isTest() const { return m_testSetName.isEmpty(); }
bool isTestSet() const { return !m_testSetName.isEmpty(); } bool isTestSet() const { return !m_testSetName.isEmpty(); }
bool matches(const TestTreeItem &item) const; bool matches(const TestTreeItem *item) const;
bool matchesTestFunctionOrSet(const TestTreeItem &treeItem) const; bool matchesTestFunctionOrSet(const TestTreeItem *treeItem) const;
bool matchesTestCase(const TestTreeItem &treeItem) const; bool matchesTestCase(const TestTreeItem *treeItem) const;
QString m_testSetName; QString m_testSetName;
QString m_projectFile; QString m_projectFile;