forked from qt-creator/qt-creator
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:
@@ -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;
|
||||
|
@@ -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;
|
||||
|
@@ -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) {
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
};
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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());
|
||||
|
@@ -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<TestParseResult *> children;
|
||||
ITestBase *base;
|
||||
ITestFramework *framework;
|
||||
TestTreeItem::Type itemType = TestTreeItem::Root;
|
||||
QString displayName;
|
||||
QString fileName;
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
|
@@ -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);
|
||||
|
@@ -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);
|
||||
|
@@ -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;
|
||||
};
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user