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)
|
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;
|
||||||
|
@@ -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;
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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());
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user