From ed6083b521bc607181a4fd6fde389c6a63b00509 Mon Sep 17 00:00:00 2001 From: Bernhard Beschow Date: Mon, 25 Jan 2021 16:31:16 +0100 Subject: [PATCH] AutoTest: Improve type safety in TestParseResult By having TestParseResults take ITestFramework rather than ITestBase as parameter, some base->asFramework() casts can be avoided today which could possibly fail in the future. Moreover, it allows TestTreeItem to take ITestFramework rather than ITestBase as parameter which improves type safety further. This shall be done in a separate commit though. Change-Id: I66594415d68c3423076a0830ecd11080d3b6c186 Reviewed-by: hjk Reviewed-by: David Schulz Reviewed-by: Christian Stenger --- src/plugins/autotest/boost/boosttestparser.cpp | 6 +++--- src/plugins/autotest/boost/boosttestparser.h | 2 +- src/plugins/autotest/boost/boosttesttreeitem.cpp | 2 +- src/plugins/autotest/catch/catchtestparser.cpp | 2 +- src/plugins/autotest/catch/catchtestparser.h | 4 ++-- src/plugins/autotest/catch/catchtreeitem.cpp | 2 +- src/plugins/autotest/gtest/gtestparser.cpp | 2 +- src/plugins/autotest/gtest/gtestparser.h | 2 +- src/plugins/autotest/gtest/gtesttreeitem.cpp | 2 +- src/plugins/autotest/itestparser.h | 6 +++--- src/plugins/autotest/qtest/qttestparser.cpp | 2 +- src/plugins/autotest/qtest/qttestparser.h | 2 +- src/plugins/autotest/qtest/qttesttreeitem.cpp | 2 +- src/plugins/autotest/quick/quicktestparser.cpp | 2 +- src/plugins/autotest/quick/quicktestparser.h | 2 +- src/plugins/autotest/quick/quicktesttreeitem.cpp | 2 +- src/plugins/autotest/testtreemodel.cpp | 4 ++-- 17 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/plugins/autotest/boost/boosttestparser.cpp b/src/plugins/autotest/boost/boosttestparser.cpp index 9d9476c5720..6b01a5477e9 100644 --- a/src/plugins/autotest/boost/boosttestparser.cpp +++ b/src/plugins/autotest/boost/boosttestparser.cpp @@ -57,7 +57,7 @@ TestTreeItem *BoostTestParseResult::createTestTreeItem() const if (itemType == TestTreeItem::Root) return nullptr; - BoostTestTreeItem *item = new BoostTestTreeItem(base, displayName, fileName, itemType); + BoostTestTreeItem *item = new BoostTestTreeItem(framework, displayName, fileName, itemType); item->setProFile(proFile); item->setLine(line); item->setColumn(column); @@ -99,10 +99,10 @@ static bool hasBoostTestMacros(const CPlusPlus::Document::Ptr &doc) } static BoostTestParseResult *createParseResult(const QString &name, const QString &filePath, - const QString &projectFile, ITestBase *base, + const QString &projectFile, ITestFramework *framework, TestTreeItem::Type type, const BoostTestInfo &info) { - BoostTestParseResult *partialSuite = new BoostTestParseResult(base); + BoostTestParseResult *partialSuite = new BoostTestParseResult(framework); partialSuite->itemType = type; partialSuite->fileName = filePath; partialSuite->name = info.fullName; diff --git a/src/plugins/autotest/boost/boosttestparser.h b/src/plugins/autotest/boost/boosttestparser.h index 1e9ab9f5307..bba9640ef2f 100644 --- a/src/plugins/autotest/boost/boosttestparser.h +++ b/src/plugins/autotest/boost/boosttestparser.h @@ -34,7 +34,7 @@ namespace Internal { class BoostTestParseResult : public TestParseResult { public: - explicit BoostTestParseResult(ITestBase *base) : TestParseResult(base) {} + explicit BoostTestParseResult(ITestFramework *framework) : TestParseResult(framework) {} TestTreeItem *createTestTreeItem() const override; // TODO special attributes/states (labeled, timeout,...?) BoostTestTreeItem::TestStates state = BoostTestTreeItem::Enabled; diff --git a/src/plugins/autotest/boost/boosttesttreeitem.cpp b/src/plugins/autotest/boost/boosttesttreeitem.cpp index 083386d5bd5..928bd24420a 100644 --- a/src/plugins/autotest/boost/boosttesttreeitem.cpp +++ b/src/plugins/autotest/boost/boosttesttreeitem.cpp @@ -75,7 +75,7 @@ TestTreeItem *BoostTestTreeItem::find(const TestParseResult *result) switch (type()) { case Root: - if (result->base->asFramework()->grouping()) { + if (result->framework->grouping()) { const QFileInfo fileInfo(bResult->fileName); const QFileInfo base(fileInfo.absolutePath()); for (int row = 0; row < childCount(); ++row) { diff --git a/src/plugins/autotest/catch/catchtestparser.cpp b/src/plugins/autotest/catch/catchtestparser.cpp index 1ed01000111..870ab5ecd68 100644 --- a/src/plugins/autotest/catch/catchtestparser.cpp +++ b/src/plugins/autotest/catch/catchtestparser.cpp @@ -146,7 +146,7 @@ TestTreeItem *CatchParseResult::createTestTreeItem() const if (itemType == TestTreeItem::Root) return nullptr; - CatchTreeItem *item = new CatchTreeItem(base, name, fileName, itemType); + CatchTreeItem *item = new CatchTreeItem(framework, name, fileName, itemType); item->setProFile(proFile); item->setLine(line); item->setColumn(column); diff --git a/src/plugins/autotest/catch/catchtestparser.h b/src/plugins/autotest/catch/catchtestparser.h index ccfca81b91f..4c558aa637e 100644 --- a/src/plugins/autotest/catch/catchtestparser.h +++ b/src/plugins/autotest/catch/catchtestparser.h @@ -33,8 +33,8 @@ namespace Internal { class CatchParseResult : public TestParseResult { public: - explicit CatchParseResult(ITestBase *base) - : TestParseResult(base) {} + explicit CatchParseResult(ITestFramework *framework) + : TestParseResult(framework) {} TestTreeItem *createTestTreeItem() const override; CatchTreeItem::TestStates states; }; diff --git a/src/plugins/autotest/catch/catchtreeitem.cpp b/src/plugins/autotest/catch/catchtreeitem.cpp index 7567dc270c1..e0fbb145a90 100644 --- a/src/plugins/autotest/catch/catchtreeitem.cpp +++ b/src/plugins/autotest/catch/catchtreeitem.cpp @@ -86,7 +86,7 @@ TestTreeItem *CatchTreeItem::find(const TestParseResult *result) switch (type()) { case Root: - if (result->base->asFramework()->grouping()) { + if (result->framework->grouping()) { const QString path = QFileInfo(result->fileName).absolutePath(); for (int row = 0; row < childCount(); ++row) { TestTreeItem *group = childItem(row); diff --git a/src/plugins/autotest/gtest/gtestparser.cpp b/src/plugins/autotest/gtest/gtestparser.cpp index d22842b0f1a..e59251a8774 100644 --- a/src/plugins/autotest/gtest/gtestparser.cpp +++ b/src/plugins/autotest/gtest/gtestparser.cpp @@ -39,7 +39,7 @@ TestTreeItem *GTestParseResult::createTestTreeItem() const { if (itemType != TestTreeItem::TestSuite && itemType != TestTreeItem::TestCase) return nullptr; - GTestTreeItem *item = new GTestTreeItem(base, name, fileName, itemType); + GTestTreeItem *item = new GTestTreeItem(framework, name, fileName, itemType); item->setProFile(proFile); item->setLine(line); item->setColumn(column); diff --git a/src/plugins/autotest/gtest/gtestparser.h b/src/plugins/autotest/gtest/gtestparser.h index 3e46f8a414a..781c9fe9023 100644 --- a/src/plugins/autotest/gtest/gtestparser.h +++ b/src/plugins/autotest/gtest/gtestparser.h @@ -33,7 +33,7 @@ namespace Internal { class GTestParseResult : public TestParseResult { public: - explicit GTestParseResult(ITestBase *base) : TestParseResult(base) {} + explicit GTestParseResult(ITestFramework *framework) : TestParseResult(framework) {} TestTreeItem *createTestTreeItem() const override; bool parameterized = false; bool typed = false; diff --git a/src/plugins/autotest/gtest/gtesttreeitem.cpp b/src/plugins/autotest/gtest/gtesttreeitem.cpp index efbd26913d3..df593b1159d 100644 --- a/src/plugins/autotest/gtest/gtesttreeitem.cpp +++ b/src/plugins/autotest/gtest/gtesttreeitem.cpp @@ -377,7 +377,7 @@ TestTreeItem *GTestTreeItem::find(const TestParseResult *result) states |= GTestTreeItem::Typed; switch (type()) { case Root: - if (result->base->asFramework()->grouping()) { + if (result->framework->grouping()) { if (GTestFramework::groupMode() == GTest::Constants::Directory) { const QFileInfo fileInfo(parseResult->fileName); const QFileInfo base(fileInfo.absolutePath()); diff --git a/src/plugins/autotest/itestparser.h b/src/plugins/autotest/itestparser.h index 02a60f45806..0639797fa1e 100644 --- a/src/plugins/autotest/itestparser.h +++ b/src/plugins/autotest/itestparser.h @@ -35,18 +35,18 @@ namespace Autotest { -class ITestBase; +class ITestFramework; class TestParseResult { public: - explicit TestParseResult(ITestBase *base) : base(base) {} + explicit TestParseResult(ITestFramework *framework) : framework(framework) {} virtual ~TestParseResult() { qDeleteAll(children); } virtual TestTreeItem *createTestTreeItem() const = 0; QVector children; - ITestBase *base; + ITestFramework *framework; TestTreeItem::Type itemType = TestTreeItem::Root; QString displayName; QString fileName; diff --git a/src/plugins/autotest/qtest/qttestparser.cpp b/src/plugins/autotest/qtest/qttestparser.cpp index 259995ef7f0..8fb1344ba08 100644 --- a/src/plugins/autotest/qtest/qttestparser.cpp +++ b/src/plugins/autotest/qtest/qttestparser.cpp @@ -41,7 +41,7 @@ TestTreeItem *QtTestParseResult::createTestTreeItem() const if (itemType == TestTreeItem::Root) return nullptr; - QtTestTreeItem *item = new QtTestTreeItem(base, displayName, fileName, itemType); + QtTestTreeItem *item = new QtTestTreeItem(framework, displayName, fileName, itemType); item->setProFile(proFile); item->setLine(line); item->setColumn(column); diff --git a/src/plugins/autotest/qtest/qttestparser.h b/src/plugins/autotest/qtest/qttestparser.h index 6c9906c530a..56d355e624a 100644 --- a/src/plugins/autotest/qtest/qttestparser.h +++ b/src/plugins/autotest/qtest/qttestparser.h @@ -37,7 +37,7 @@ namespace Internal { class QtTestParseResult : public TestParseResult { public: - explicit QtTestParseResult(ITestBase *base) : TestParseResult(base) {} + explicit QtTestParseResult(ITestFramework *framework) : TestParseResult(framework) {} void setInherited(bool inherited) { m_inherited = inherited; } bool inherited() const { return m_inherited; } TestTreeItem *createTestTreeItem() const override; diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp index 5684601e6aa..8a2dc3a19ec 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.cpp +++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp @@ -310,7 +310,7 @@ TestTreeItem *QtTestTreeItem::find(const TestParseResult *result) switch (type()) { case Root: - if (result->base->asFramework()->grouping()) { + if (result->framework->grouping()) { const QString path = QFileInfo(result->fileName).absolutePath(); for (int row = 0; row < childCount(); ++row) { TestTreeItem *group = childItem(row); diff --git a/src/plugins/autotest/quick/quicktestparser.cpp b/src/plugins/autotest/quick/quicktestparser.cpp index 828fa77ad62..aafe7e07f3f 100644 --- a/src/plugins/autotest/quick/quicktestparser.cpp +++ b/src/plugins/autotest/quick/quicktestparser.cpp @@ -51,7 +51,7 @@ TestTreeItem *QuickTestParseResult::createTestTreeItem() const if (itemType == TestTreeItem::Root || itemType == TestTreeItem::TestDataTag) return nullptr; - QuickTestTreeItem *item = new QuickTestTreeItem(base, name, fileName, itemType); + QuickTestTreeItem *item = new QuickTestTreeItem(framework, name, fileName, itemType); item->setProFile(proFile); item->setLine(line); item->setColumn(column); diff --git a/src/plugins/autotest/quick/quicktestparser.h b/src/plugins/autotest/quick/quicktestparser.h index 0c4652d3d0c..51dde56fe61 100644 --- a/src/plugins/autotest/quick/quicktestparser.h +++ b/src/plugins/autotest/quick/quicktestparser.h @@ -37,7 +37,7 @@ namespace Internal { class QuickTestParseResult : public TestParseResult { public: - explicit QuickTestParseResult(ITestBase *base) : TestParseResult(base) {} + explicit QuickTestParseResult(ITestFramework *framework) : TestParseResult(framework) {} TestTreeItem *createTestTreeItem() const override; }; diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp index ff1a0b6db6a..d93df667590 100644 --- a/src/plugins/autotest/quick/quicktesttreeitem.cpp +++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp @@ -290,7 +290,7 @@ TestTreeItem *QuickTestTreeItem::find(const TestParseResult *result) case Root: if (result->name.isEmpty()) return unnamedQuickTests(); - if (result->base->asFramework()->grouping()) { + if (result->framework->grouping()) { const QString path = QFileInfo(result->fileName).absolutePath(); TestTreeItem *group = findFirstLevelChildItem([path](TestTreeItem *group) { return group->filePath() == path; diff --git a/src/plugins/autotest/testtreemodel.cpp b/src/plugins/autotest/testtreemodel.cpp index 7628c4c6b27..a6135bfbaeb 100644 --- a/src/plugins/autotest/testtreemodel.cpp +++ b/src/plugins/autotest/testtreemodel.cpp @@ -668,7 +668,7 @@ void TestTreeModel::revalidateCheckState(ITestTreeItem *item) void TestTreeModel::onParseResultReady(const TestParseResultPtr result) { - ITestFramework *framework = result->base->asFramework(); + ITestFramework *framework = result->framework; QTC_ASSERT(framework, return); TestTreeItem *rootNode = framework->rootNode(); QTC_ASSERT(rootNode, return); @@ -692,7 +692,7 @@ void Autotest::TestTreeModel::onDataChanged(const QModelIndex &topLeft, void TestTreeModel::handleParseResult(const TestParseResult *result, TestTreeItem *parentNode) { - const bool groupingEnabled = result->base->asFramework()->grouping(); + const bool groupingEnabled = result->framework->grouping(); // lookup existing items if (TestTreeItem *toBeModified = parentNode->find(result)) { // found existing item... Do not remove