AutoTest: Reparse only newly added frameworks

Instead of re-parsing all test frameworks trigger a reparse
just for the newly added as results for the other should not
have changed.

Change-Id: I6eb53da04bb927a884d6431e137bfe68f391f2ad
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Stenger
2019-09-12 14:14:54 +02:00
parent 829cacfb87
commit 89ae78fd89
2 changed files with 17 additions and 19 deletions

View File

@@ -126,7 +126,6 @@ void TestCodeParser::syncTestFrameworks(const QList<Core::Id> &frameworkIds)
QTC_ASSERT(testParser, continue);
m_testCodeParsers.append(testParser);
}
updateTestTree();
}
void TestCodeParser::emitUpdateTestTree(ITestParser *parser)

View File

@@ -220,27 +220,26 @@ void TestTreeModel::synchronizeTestFrameworks()
// pre-check to avoid further processing when frameworks are unchanged
Utils::TreeItem *invisibleRoot = rootItem();
const int count = invisibleRoot->childCount();
if (count == sortedIds.size()) {
bool different = false;
QList<Core::Id> registered = manager->sortedRegisteredFrameworkIds();
for (int i = 0; i < count; ++i) {
if (manager->rootNodeForTestFramework(sortedIds[i]) != invisibleRoot->childAt(i)) {
different = true;
break;
}
}
if (!different)
return;
}
QSet<Core::Id> newlyAdded;
QList<Utils::TreeItem *> oldFrameworkRoots;
for (Utils::TreeItem *oldFrameworkRoot : *invisibleRoot)
oldFrameworkRoots.append(oldFrameworkRoot);
// remove all currently registered
removeTestRootNodes();
for (Utils::TreeItem *oldFrameworkRoot : oldFrameworkRoots)
takeItem(oldFrameworkRoot); // do NOT delete the ptr is still held by TestFrameworkManager
for (const Core::Id &id : sortedIds)
rootItem()->appendChild(manager->rootNodeForTestFramework(id));
for (const Core::Id &id : sortedIds) {
TestTreeItem *frameworkRootNode = manager->rootNodeForTestFramework(id);
invisibleRoot->appendChild(frameworkRootNode);
if (!oldFrameworkRoots.removeOne(frameworkRootNode))
newlyAdded.insert(id);
}
for (Utils::TreeItem *oldFrameworkRoot : oldFrameworkRoots)
oldFrameworkRoot->removeChildren();
m_parser->syncTestFrameworks(sortedIds);
if (!newlyAdded.isEmpty())
m_parser->updateTestTree(newlyAdded);
emit updatedActiveFrameworks(sortedIds.size());
}