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 <hjk@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Bernhard Beschow
2021-01-25 16:31:16 +01:00
parent 3d075d30d0
commit ed6083b521
17 changed files with 23 additions and 23 deletions

View File

@@ -57,7 +57,7 @@ TestTreeItem *BoostTestParseResult::createTestTreeItem() const
if (itemType == TestTreeItem::Root) if (itemType == TestTreeItem::Root)
return nullptr; return nullptr;
BoostTestTreeItem *item = new BoostTestTreeItem(base, displayName, fileName, itemType); BoostTestTreeItem *item = new BoostTestTreeItem(framework, displayName, fileName, itemType);
item->setProFile(proFile); item->setProFile(proFile);
item->setLine(line); item->setLine(line);
item->setColumn(column); item->setColumn(column);
@@ -99,10 +99,10 @@ static bool hasBoostTestMacros(const CPlusPlus::Document::Ptr &doc)
} }
static BoostTestParseResult *createParseResult(const QString &name, const QString &filePath, 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) TestTreeItem::Type type, const BoostTestInfo &info)
{ {
BoostTestParseResult *partialSuite = new BoostTestParseResult(base); BoostTestParseResult *partialSuite = new BoostTestParseResult(framework);
partialSuite->itemType = type; partialSuite->itemType = type;
partialSuite->fileName = filePath; partialSuite->fileName = filePath;
partialSuite->name = info.fullName; partialSuite->name = info.fullName;

View File

@@ -34,7 +34,7 @@ namespace Internal {
class BoostTestParseResult : public TestParseResult class BoostTestParseResult : public TestParseResult
{ {
public: public:
explicit BoostTestParseResult(ITestBase *base) : TestParseResult(base) {} explicit BoostTestParseResult(ITestFramework *framework) : TestParseResult(framework) {}
TestTreeItem *createTestTreeItem() const override; TestTreeItem *createTestTreeItem() const override;
// TODO special attributes/states (labeled, timeout,...?) // TODO special attributes/states (labeled, timeout,...?)
BoostTestTreeItem::TestStates state = BoostTestTreeItem::Enabled; BoostTestTreeItem::TestStates state = BoostTestTreeItem::Enabled;

View File

@@ -75,7 +75,7 @@ TestTreeItem *BoostTestTreeItem::find(const TestParseResult *result)
switch (type()) { switch (type()) {
case Root: case Root:
if (result->base->asFramework()->grouping()) { if (result->framework->grouping()) {
const QFileInfo fileInfo(bResult->fileName); const QFileInfo fileInfo(bResult->fileName);
const QFileInfo base(fileInfo.absolutePath()); const QFileInfo base(fileInfo.absolutePath());
for (int row = 0; row < childCount(); ++row) { for (int row = 0; row < childCount(); ++row) {

View File

@@ -146,7 +146,7 @@ TestTreeItem *CatchParseResult::createTestTreeItem() const
if (itemType == TestTreeItem::Root) if (itemType == TestTreeItem::Root)
return nullptr; return nullptr;
CatchTreeItem *item = new CatchTreeItem(base, name, fileName, itemType); CatchTreeItem *item = new CatchTreeItem(framework, name, fileName, itemType);
item->setProFile(proFile); item->setProFile(proFile);
item->setLine(line); item->setLine(line);
item->setColumn(column); item->setColumn(column);

View File

@@ -33,8 +33,8 @@ namespace Internal {
class CatchParseResult : public TestParseResult class CatchParseResult : public TestParseResult
{ {
public: public:
explicit CatchParseResult(ITestBase *base) explicit CatchParseResult(ITestFramework *framework)
: TestParseResult(base) {} : TestParseResult(framework) {}
TestTreeItem *createTestTreeItem() const override; TestTreeItem *createTestTreeItem() const override;
CatchTreeItem::TestStates states; CatchTreeItem::TestStates states;
}; };

View File

@@ -86,7 +86,7 @@ TestTreeItem *CatchTreeItem::find(const TestParseResult *result)
switch (type()) { switch (type()) {
case Root: case Root:
if (result->base->asFramework()->grouping()) { if (result->framework->grouping()) {
const QString path = QFileInfo(result->fileName).absolutePath(); const QString path = QFileInfo(result->fileName).absolutePath();
for (int row = 0; row < childCount(); ++row) { for (int row = 0; row < childCount(); ++row) {
TestTreeItem *group = childItem(row); TestTreeItem *group = childItem(row);

View File

@@ -39,7 +39,7 @@ TestTreeItem *GTestParseResult::createTestTreeItem() const
{ {
if (itemType != TestTreeItem::TestSuite && itemType != TestTreeItem::TestCase) if (itemType != TestTreeItem::TestSuite && itemType != TestTreeItem::TestCase)
return nullptr; return nullptr;
GTestTreeItem *item = new GTestTreeItem(base, name, fileName, itemType); GTestTreeItem *item = new GTestTreeItem(framework, name, fileName, itemType);
item->setProFile(proFile); item->setProFile(proFile);
item->setLine(line); item->setLine(line);
item->setColumn(column); item->setColumn(column);

View File

@@ -33,7 +33,7 @@ namespace Internal {
class GTestParseResult : public TestParseResult class GTestParseResult : public TestParseResult
{ {
public: public:
explicit GTestParseResult(ITestBase *base) : TestParseResult(base) {} explicit GTestParseResult(ITestFramework *framework) : TestParseResult(framework) {}
TestTreeItem *createTestTreeItem() const override; TestTreeItem *createTestTreeItem() const override;
bool parameterized = false; bool parameterized = false;
bool typed = false; bool typed = false;

View File

@@ -377,7 +377,7 @@ TestTreeItem *GTestTreeItem::find(const TestParseResult *result)
states |= GTestTreeItem::Typed; states |= GTestTreeItem::Typed;
switch (type()) { switch (type()) {
case Root: case Root:
if (result->base->asFramework()->grouping()) { if (result->framework->grouping()) {
if (GTestFramework::groupMode() == GTest::Constants::Directory) { if (GTestFramework::groupMode() == GTest::Constants::Directory) {
const QFileInfo fileInfo(parseResult->fileName); const QFileInfo fileInfo(parseResult->fileName);
const QFileInfo base(fileInfo.absolutePath()); const QFileInfo base(fileInfo.absolutePath());

View File

@@ -35,18 +35,18 @@
namespace Autotest { namespace Autotest {
class ITestBase; class ITestFramework;
class TestParseResult class TestParseResult
{ {
public: public:
explicit TestParseResult(ITestBase *base) : base(base) {} explicit TestParseResult(ITestFramework *framework) : framework(framework) {}
virtual ~TestParseResult() { qDeleteAll(children); } virtual ~TestParseResult() { qDeleteAll(children); }
virtual TestTreeItem *createTestTreeItem() const = 0; virtual TestTreeItem *createTestTreeItem() const = 0;
QVector<TestParseResult *> children; QVector<TestParseResult *> children;
ITestBase *base; ITestFramework *framework;
TestTreeItem::Type itemType = TestTreeItem::Root; TestTreeItem::Type itemType = TestTreeItem::Root;
QString displayName; QString displayName;
QString fileName; QString fileName;

View File

@@ -41,7 +41,7 @@ TestTreeItem *QtTestParseResult::createTestTreeItem() const
if (itemType == TestTreeItem::Root) if (itemType == TestTreeItem::Root)
return nullptr; return nullptr;
QtTestTreeItem *item = new QtTestTreeItem(base, displayName, fileName, itemType); QtTestTreeItem *item = new QtTestTreeItem(framework, displayName, fileName, itemType);
item->setProFile(proFile); item->setProFile(proFile);
item->setLine(line); item->setLine(line);
item->setColumn(column); item->setColumn(column);

View File

@@ -37,7 +37,7 @@ namespace Internal {
class QtTestParseResult : public TestParseResult class QtTestParseResult : public TestParseResult
{ {
public: public:
explicit QtTestParseResult(ITestBase *base) : TestParseResult(base) {} explicit QtTestParseResult(ITestFramework *framework) : TestParseResult(framework) {}
void setInherited(bool inherited) { m_inherited = inherited; } void setInherited(bool inherited) { m_inherited = inherited; }
bool inherited() const { return m_inherited; } bool inherited() const { return m_inherited; }
TestTreeItem *createTestTreeItem() const override; TestTreeItem *createTestTreeItem() const override;

View File

@@ -310,7 +310,7 @@ TestTreeItem *QtTestTreeItem::find(const TestParseResult *result)
switch (type()) { switch (type()) {
case Root: case Root:
if (result->base->asFramework()->grouping()) { if (result->framework->grouping()) {
const QString path = QFileInfo(result->fileName).absolutePath(); const QString path = QFileInfo(result->fileName).absolutePath();
for (int row = 0; row < childCount(); ++row) { for (int row = 0; row < childCount(); ++row) {
TestTreeItem *group = childItem(row); TestTreeItem *group = childItem(row);

View File

@@ -51,7 +51,7 @@ TestTreeItem *QuickTestParseResult::createTestTreeItem() const
if (itemType == TestTreeItem::Root || itemType == TestTreeItem::TestDataTag) if (itemType == TestTreeItem::Root || itemType == TestTreeItem::TestDataTag)
return nullptr; return nullptr;
QuickTestTreeItem *item = new QuickTestTreeItem(base, name, fileName, itemType); QuickTestTreeItem *item = new QuickTestTreeItem(framework, name, fileName, itemType);
item->setProFile(proFile); item->setProFile(proFile);
item->setLine(line); item->setLine(line);
item->setColumn(column); item->setColumn(column);

View File

@@ -37,7 +37,7 @@ namespace Internal {
class QuickTestParseResult : public TestParseResult class QuickTestParseResult : public TestParseResult
{ {
public: public:
explicit QuickTestParseResult(ITestBase *base) : TestParseResult(base) {} explicit QuickTestParseResult(ITestFramework *framework) : TestParseResult(framework) {}
TestTreeItem *createTestTreeItem() const override; TestTreeItem *createTestTreeItem() const override;
}; };

View File

@@ -290,7 +290,7 @@ TestTreeItem *QuickTestTreeItem::find(const TestParseResult *result)
case Root: case Root:
if (result->name.isEmpty()) if (result->name.isEmpty())
return unnamedQuickTests(); return unnamedQuickTests();
if (result->base->asFramework()->grouping()) { if (result->framework->grouping()) {
const QString path = QFileInfo(result->fileName).absolutePath(); const QString path = QFileInfo(result->fileName).absolutePath();
TestTreeItem *group = findFirstLevelChildItem([path](TestTreeItem *group) { TestTreeItem *group = findFirstLevelChildItem([path](TestTreeItem *group) {
return group->filePath() == path; return group->filePath() == path;

View File

@@ -668,7 +668,7 @@ void TestTreeModel::revalidateCheckState(ITestTreeItem *item)
void TestTreeModel::onParseResultReady(const TestParseResultPtr result) void TestTreeModel::onParseResultReady(const TestParseResultPtr result)
{ {
ITestFramework *framework = result->base->asFramework(); ITestFramework *framework = result->framework;
QTC_ASSERT(framework, return); QTC_ASSERT(framework, return);
TestTreeItem *rootNode = framework->rootNode(); TestTreeItem *rootNode = framework->rootNode();
QTC_ASSERT(rootNode, return); QTC_ASSERT(rootNode, return);
@@ -692,7 +692,7 @@ void Autotest::TestTreeModel::onDataChanged(const QModelIndex &topLeft,
void TestTreeModel::handleParseResult(const TestParseResult *result, TestTreeItem *parentNode) void TestTreeModel::handleParseResult(const TestParseResult *result, TestTreeItem *parentNode)
{ {
const bool groupingEnabled = result->base->asFramework()->grouping(); const bool groupingEnabled = result->framework->grouping();
// lookup existing items // lookup existing items
if (TestTreeItem *toBeModified = parentNode->find(result)) { if (TestTreeItem *toBeModified = parentNode->find(result)) {
// found existing item... Do not remove // found existing item... Do not remove