summaryrefslogtreecommitdiff
path: root/src/plugins/autotest/quick
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/autotest/quick')
-rw-r--r--src/plugins/autotest/quick/quicktest_utils.cpp4
-rw-r--r--src/plugins/autotest/quick/quicktest_utils.h5
-rw-r--r--src/plugins/autotest/quick/quicktestconfiguration.cpp18
-rw-r--r--src/plugins/autotest/quick/quicktestconfiguration.h2
-rw-r--r--src/plugins/autotest/quick/quicktestframework.cpp19
-rw-r--r--src/plugins/autotest/quick/quicktestframework.h5
-rw-r--r--src/plugins/autotest/quick/quicktestparser.cpp24
-rw-r--r--src/plugins/autotest/quick/quicktestparser.h6
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.cpp22
-rw-r--r--src/plugins/autotest/quick/quicktesttreeitem.h8
10 files changed, 61 insertions, 52 deletions
diff --git a/src/plugins/autotest/quick/quicktest_utils.cpp b/src/plugins/autotest/quick/quicktest_utils.cpp
index 92a36a9a19..eab91c9324 100644
--- a/src/plugins/autotest/quick/quicktest_utils.cpp
+++ b/src/plugins/autotest/quick/quicktest_utils.cpp
@@ -43,10 +43,10 @@ bool isQuickTestMacro(const QByteArray &macro)
return valid.contains(macro);
}
-QHash<QString, QString> proFilesForQmlFiles(const Core::Id &id, const QStringList &files)
+QHash<QString, QString> proFilesForQmlFiles(ITestFramework *framework, const QStringList &files)
{
QHash<QString, QString> result;
- TestTreeItem *rootNode = TestFrameworkManager::instance()->rootNodeForTestFramework(id);
+ TestTreeItem *rootNode = framework->rootNode();
QTC_ASSERT(rootNode, return result);
if (files.isEmpty())
diff --git a/src/plugins/autotest/quick/quicktest_utils.h b/src/plugins/autotest/quick/quicktest_utils.h
index af5cfdb7bf..8eca2a2569 100644
--- a/src/plugins/autotest/quick/quicktest_utils.h
+++ b/src/plugins/autotest/quick/quicktest_utils.h
@@ -30,11 +30,14 @@
namespace Core { class Id; }
namespace Autotest {
+
+class ITestFramework;
+
namespace Internal {
namespace QuickTestUtils {
bool isQuickTestMacro(const QByteArray &macro);
-QHash<QString, QString> proFilesForQmlFiles(const Core::Id &id, const QStringList &files);
+QHash<QString, QString> proFilesForQmlFiles(ITestFramework *framework, const QStringList &files);
} // namespace QuickTestUtils
} // namespace Internal
diff --git a/src/plugins/autotest/quick/quicktestconfiguration.cpp b/src/plugins/autotest/quick/quicktestconfiguration.cpp
index 57d075fe7d..e61c4f12d8 100644
--- a/src/plugins/autotest/quick/quicktestconfiguration.cpp
+++ b/src/plugins/autotest/quick/quicktestconfiguration.cpp
@@ -29,13 +29,14 @@
#include "../qtest/qttestsettings.h"
#include "../qtest/qttest_utils.h"
#include "../autotestplugin.h"
-#include "../testframeworkmanager.h"
+#include "../itestframework.h"
#include "../testsettings.h"
namespace Autotest {
namespace Internal {
-QuickTestConfiguration::QuickTestConfiguration()
+QuickTestConfiguration::QuickTestConfiguration(ITestFramework *framework)
+ : DebuggableTestConfiguration(framework)
{
setMixedDebugging(true);
}
@@ -43,10 +44,7 @@ QuickTestConfiguration::QuickTestConfiguration()
TestOutputReader *QuickTestConfiguration::outputReader(const QFutureInterface<TestResultPtr> &fi,
QProcess *app) const
{
- static const Core::Id id
- = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME);
- TestFrameworkManager *manager = TestFrameworkManager::instance();
- auto qtSettings = qSharedPointerCast<QtTestSettings>(manager->settingsForTestFramework(id));
+ auto qtSettings = dynamic_cast<QtTestSettings *>(framework()->frameworkSettings());
const QtTestOutputReader::OutputMode mode = qtSettings && qtSettings->useXMLOutput
? QtTestOutputReader::XML
: QtTestOutputReader::PlainText;
@@ -56,9 +54,6 @@ TestOutputReader *QuickTestConfiguration::outputReader(const QFutureInterface<Te
QStringList QuickTestConfiguration::argumentsForTestRunner(QStringList *omitted) const
{
- static const Core::Id id
- = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME);
-
QStringList arguments;
if (AutotestPlugin::settings()->processArgs) {
arguments.append(QTestUtils::filterInterfering
@@ -66,9 +61,8 @@ QStringList QuickTestConfiguration::argumentsForTestRunner(QStringList *omitted)
omitted, true));
}
- TestFrameworkManager *manager = TestFrameworkManager::instance();
- auto qtSettings = qSharedPointerCast<QtTestSettings>(manager->settingsForTestFramework(id));
- if (qtSettings.isNull())
+ auto qtSettings = dynamic_cast<QtTestSettings *>(framework()->frameworkSettings());
+ if (!qtSettings)
return arguments;
if (qtSettings->useXMLOutput)
arguments << "-xml";
diff --git a/src/plugins/autotest/quick/quicktestconfiguration.h b/src/plugins/autotest/quick/quicktestconfiguration.h
index 286b891741..ae1e46797c 100644
--- a/src/plugins/autotest/quick/quicktestconfiguration.h
+++ b/src/plugins/autotest/quick/quicktestconfiguration.h
@@ -33,7 +33,7 @@ namespace Internal {
class QuickTestConfiguration : public DebuggableTestConfiguration
{
public:
- QuickTestConfiguration();
+ explicit QuickTestConfiguration(ITestFramework *framework);
TestOutputReader *outputReader(const QFutureInterface<TestResultPtr> &fi,
QProcess *app) const override;
QStringList argumentsForTestRunner(QStringList *omitted = nullptr) const override;
diff --git a/src/plugins/autotest/quick/quicktestframework.cpp b/src/plugins/autotest/quick/quicktestframework.cpp
index 81642ae6fd..50d46c7e1e 100644
--- a/src/plugins/autotest/quick/quicktestframework.cpp
+++ b/src/plugins/autotest/quick/quicktestframework.cpp
@@ -27,17 +27,20 @@
#include "quicktestparser.h"
#include "quicktesttreeitem.h"
+#include "../testframeworkmanager.h"
+#include "../qtest/qttestconstants.h"
+
namespace Autotest {
namespace Internal {
-ITestParser *QuickTestFramework::createTestParser() const
+ITestParser *QuickTestFramework::createTestParser()
{
- return new QuickTestParser;
+ return new QuickTestParser(this);
}
-TestTreeItem *QuickTestFramework::createRootNode() const
+TestTreeItem *QuickTestFramework::createRootNode()
{
- return new QuickTestTreeItem(QCoreApplication::translate("QuickTestFramework", "Quick Test"),
+ return new QuickTestTreeItem(this, QCoreApplication::translate("QuickTestFramework", "Quick Test"),
QString(), TestTreeItem::Root);
}
@@ -51,5 +54,13 @@ unsigned QuickTestFramework::priority() const
return 5;
}
+IFrameworkSettings *QuickTestFramework::frameworkSettings()
+{
+ static const Core::Id id
+ = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(QtTest::Constants::FRAMEWORK_NAME);
+ ITestFramework *qtTestFramework = TestFrameworkManager::frameworkForId(id);
+ return qtTestFramework->frameworkSettings();
+}
+
} // namespace Internal
} // namespace Autotest
diff --git a/src/plugins/autotest/quick/quicktestframework.h b/src/plugins/autotest/quick/quicktestframework.h
index 80befb53d1..a50b224c8d 100644
--- a/src/plugins/autotest/quick/quicktestframework.h
+++ b/src/plugins/autotest/quick/quicktestframework.h
@@ -44,10 +44,11 @@ public:
QuickTestFramework() : ITestFramework(true) {}
const char *name() const override;
unsigned priority() const override;
+ IFrameworkSettings *frameworkSettings() override;
protected:
- ITestParser *createTestParser() const override;
- TestTreeItem *createRootNode() const override;
+ ITestParser *createTestParser() override;
+ TestTreeItem *createRootNode() override;
};
} // namespace Internal
diff --git a/src/plugins/autotest/quick/quicktestparser.cpp b/src/plugins/autotest/quick/quicktestparser.cpp
index 478735048c..5ee01e1c90 100644
--- a/src/plugins/autotest/quick/quicktestparser.cpp
+++ b/src/plugins/autotest/quick/quicktestparser.cpp
@@ -49,7 +49,7 @@ TestTreeItem *QuickTestParseResult::createTestTreeItem() const
if (itemType == TestTreeItem::Root || itemType == TestTreeItem::TestDataTag)
return nullptr;
- QuickTestTreeItem *item = new QuickTestTreeItem(name, fileName, itemType);
+ QuickTestTreeItem *item = new QuickTestTreeItem(framework, name, fileName, itemType);
item->setProFile(proFile);
item->setLine(line);
item->setColumn(column);
@@ -179,7 +179,7 @@ QList<Document::Ptr> QuickTestParser::scanDirectoryForQuickTestQmlFiles(const QS
static bool checkQmlDocumentForQuickTestCode(QFutureInterface<TestParseResultPtr> futureInterface,
const Document::Ptr &qmlJSDoc,
- const Core::Id &id,
+ ITestFramework *framework,
const QString &proFile = QString())
{
if (qmlJSDoc.isNull())
@@ -197,7 +197,7 @@ static bool checkQmlDocumentForQuickTestCode(QFutureInterface<TestParseResultPtr
for (const QuickTestCaseSpec &testCase : testCases) {
const QString testCaseName = testCase.m_caseName;
- QuickTestParseResult *parseResult = new QuickTestParseResult(id);
+ QuickTestParseResult *parseResult = new QuickTestParseResult(framework);
parseResult->proFile = proFile;
parseResult->itemType = TestTreeItem::TestCase;
if (!testCaseName.isEmpty()) {
@@ -208,7 +208,7 @@ static bool checkQmlDocumentForQuickTestCode(QFutureInterface<TestParseResultPtr
}
for (auto function : testCase.m_functions) {
- QuickTestParseResult *funcResult = new QuickTestParseResult(id);
+ QuickTestParseResult *funcResult = new QuickTestParseResult(framework);
funcResult->name = function.m_functionName;
funcResult->displayName = function.m_functionName;
funcResult->itemType = function.m_locationAndType.m_type;
@@ -227,7 +227,7 @@ static bool checkQmlDocumentForQuickTestCode(QFutureInterface<TestParseResultPtr
bool QuickTestParser::handleQtQuickTest(QFutureInterface<TestParseResultPtr> futureInterface,
CPlusPlus::Document::Ptr document,
- const Core::Id &id)
+ ITestFramework *framework)
{
const CppTools::CppModelManager *modelManager = CppTools::CppModelManager::instance();
if (quickTestName(document, m_cppSnapshot).isEmpty())
@@ -250,7 +250,7 @@ bool QuickTestParser::handleQtQuickTest(QFutureInterface<TestParseResultPtr> fut
for (const Document::Ptr &qmlJSDoc : qmlDocs) {
if (futureInterface.isCanceled())
break;
- result |= checkQmlDocumentForQuickTestCode(futureInterface, qmlJSDoc, id, proFile);
+ result |= checkQmlDocumentForQuickTestCode(futureInterface, qmlJSDoc, framework, proFile);
}
return result;
}
@@ -269,7 +269,7 @@ void QuickTestParser::handleDirectoryChanged(const QString &directory)
{
const QMap<QString, QDateTime> &filesAndDates = qmlFilesWithMTime(directory);
const QMap<QString, QDateTime> &watched = m_watchedFiles.value(directory);
- const QStringList &keys = watched.keys();
+ const QList<QString> &keys = watched.keys();
if (filesAndDates.keys() != keys) { // removed or added files
m_watchedFiles[directory] = filesAndDates;
TestTreeModel::instance()->parser()->emitUpdateTestTree(this);
@@ -298,8 +298,8 @@ void QuickTestParser::doUpdateWatchPaths(const QStringList &directories)
}
}
-QuickTestParser::QuickTestParser()
- : CppParser()
+QuickTestParser::QuickTestParser(ITestFramework *framework)
+ : CppParser(framework)
{
connect(ProjectExplorer::SessionManager::instance(),
&ProjectExplorer::SessionManager::startupProjectChanged, [this] {
@@ -319,7 +319,7 @@ void QuickTestParser::init(const QStringList &filesToParse, bool fullParse)
m_qmlSnapshot = QmlJSTools::Internal::ModelManager::instance()->snapshot();
if (!fullParse) {
// in a full parse we get the correct entry points by the respective main
- m_proFilesForQmlFiles = QuickTestUtils::proFilesForQmlFiles(id(), filesToParse);
+ m_proFilesForQmlFiles = QuickTestUtils::proFilesForQmlFiles(framework(), filesToParse);
// get rid of cached main cpp files that are going to get processed anyhow
for (const QString &file : filesToParse) {
if (m_mainCppFiles.contains(file)) {
@@ -350,14 +350,14 @@ bool QuickTestParser::processDocument(QFutureInterface<TestParseResultPtr> futur
if (proFile.isEmpty())
return false;
Document::Ptr qmlJSDoc = m_qmlSnapshot.document(fileName);
- return checkQmlDocumentForQuickTestCode(futureInterface, qmlJSDoc, id(), proFile);
+ return checkQmlDocumentForQuickTestCode(futureInterface, qmlJSDoc, framework(), proFile);
}
if (!m_cppSnapshot.contains(fileName) || !selectedForBuilding(fileName))
return false;
CPlusPlus::Document::Ptr document = m_cppSnapshot.find(fileName).value();
if (!includesQtQuickTest(document, m_cppSnapshot))
return false;
- return handleQtQuickTest(futureInterface, document, id());
+ return handleQtQuickTest(futureInterface, document, framework());
}
QString QuickTestParser::projectFileForMainCppFile(const QString &fileName) const
diff --git a/src/plugins/autotest/quick/quicktestparser.h b/src/plugins/autotest/quick/quicktestparser.h
index c05fa607dd..21e7667832 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(const Core::Id &id) : TestParseResult(id) {}
+ explicit QuickTestParseResult(ITestFramework *framework) : TestParseResult(framework) {}
TestTreeItem *createTestTreeItem() const override;
};
@@ -45,7 +45,7 @@ class QuickTestParser : public QObject, public CppParser
{
Q_OBJECT
public:
- QuickTestParser();
+ explicit QuickTestParser(ITestFramework *framework);
void init(const QStringList &filesToParse, bool fullParse) override;
void release() override;
bool processDocument(QFutureInterface<TestParseResultPtr> futureInterface,
@@ -55,7 +55,7 @@ signals:
void updateWatchPaths(const QStringList &directories) const;
private:
bool handleQtQuickTest(QFutureInterface<TestParseResultPtr> futureInterface,
- CPlusPlus::Document::Ptr document, const Core::Id &id);
+ CPlusPlus::Document::Ptr document, ITestFramework *framework);
void handleDirectoryChanged(const QString &directory);
void doUpdateWatchPaths(const QStringList &directories);
QList<QmlJS::Document::Ptr> scanDirectoryForQuickTestQmlFiles(const QString &srcDir) const;
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.cpp b/src/plugins/autotest/quick/quicktesttreeitem.cpp
index bb09159af1..5274a27099 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.cpp
+++ b/src/plugins/autotest/quick/quicktesttreeitem.cpp
@@ -38,7 +38,7 @@ namespace Internal {
TestTreeItem *QuickTestTreeItem::copyWithoutChildren()
{
- QuickTestTreeItem *copied = new QuickTestTreeItem;
+ QuickTestTreeItem *copied = new QuickTestTreeItem(framework());
copied->copyBasicDataFrom(this);
return copied;
}
@@ -137,7 +137,7 @@ TestConfiguration *QuickTestTreeItem::testConfiguration() const
if (child->type() == TestTreeItem::TestFunction)
testFunctions << testName + "::" + child->name();
});
- config = new QuickTestConfiguration;
+ config = new QuickTestConfiguration(framework());
config->setTestCases(testFunctions);
config->setProjectFile(proFile());
config->setProject(project);
@@ -146,7 +146,7 @@ TestConfiguration *QuickTestTreeItem::testConfiguration() const
case TestFunction: {
TestTreeItem *parent = parentItem();
QStringList testFunction(parent->name() + "::" + name());
- config = new QuickTestConfiguration;
+ config = new QuickTestConfiguration(framework());
config->setTestCases(testFunction);
config->setProjectFile(parent->proFile());
config->setProject(project);
@@ -186,7 +186,7 @@ static void testConfigurationFromCheckState(const TestTreeItem *item,
oldFunctions << testFunctions;
tc->setTestCases(oldFunctions);
} else {
- tc = new QuickTestConfiguration;
+ tc = new QuickTestConfiguration(item->framework());
tc->setTestCases(testFunctions);
tc->setProjectFile(item->proFile());
tc->setProject(ProjectExplorer::SessionManager::startupProject());
@@ -244,7 +244,7 @@ QList<TestConfiguration *> QuickTestTreeItem::getAllTestConfigurations() const
});
// create TestConfiguration for each project file
for (auto it = testsForProfile.begin(), end = testsForProfile.end(); it != end; ++it) {
- QuickTestConfiguration *tc = new QuickTestConfiguration;
+ QuickTestConfiguration *tc = new QuickTestConfiguration(framework());
tc->setTestCaseCount(it.value().testCount);
tc->setProjectFile(it.key());
tc->setProject(project);
@@ -318,7 +318,7 @@ TestTreeItem *QuickTestTreeItem::find(const TestParseResult *result)
case Root:
if (result->name.isEmpty())
return unnamedQuickTests();
- if (TestFrameworkManager::instance()->groupingEnabled(result->frameworkId)) {
+ if (result->framework->grouping()) {
const QString path = QFileInfo(result->fileName).absolutePath();
TestTreeItem *group = findFirstLevelChild([path](TestTreeItem *group) {
return group->filePath() == path;
@@ -404,7 +404,7 @@ TestTreeItem *QuickTestTreeItem::createParentGroupNode() const
{
const QFileInfo fileInfo(filePath());
const QFileInfo base(fileInfo.absolutePath());
- return new QuickTestTreeItem(base.baseName(), fileInfo.absolutePath(), TestTreeItem::GroupNode);
+ return new QuickTestTreeItem(framework(), base.baseName(), fileInfo.absolutePath(), TestTreeItem::GroupNode);
}
bool QuickTestTreeItem::isGroupable() const
@@ -430,14 +430,10 @@ QSet<QString> QuickTestTreeItem::internalTargets() const
void QuickTestTreeItem::markForRemovalRecursively(const QString &filePath)
{
- static const Core::Id id = Core::Id(Constants::FRAMEWORK_PREFIX).withSuffix(
- QuickTest::Constants::FRAMEWORK_NAME);
- TestTreeItem::markForRemovalRecursively(filePath);
- auto parser = dynamic_cast<QuickTestParser *>(TestFrameworkManager::instance()
- ->testParserForTestFramework(id));
+ auto parser = dynamic_cast<QuickTestParser *>(framework()->testParser());
const QString proFile = parser->projectFileForMainCppFile(filePath);
if (!proFile.isEmpty()) {
- TestTreeItem *root = TestFrameworkManager::instance()->rootNodeForTestFramework(id);
+ TestTreeItem *root = framework()->rootNode();
root->forAllChildren([proFile](TestTreeItem *it) {
if (it->proFile() == proFile)
it->markForRemoval(true);
diff --git a/src/plugins/autotest/quick/quicktesttreeitem.h b/src/plugins/autotest/quick/quicktesttreeitem.h
index f99db4ce54..050c7c4dd1 100644
--- a/src/plugins/autotest/quick/quicktesttreeitem.h
+++ b/src/plugins/autotest/quick/quicktesttreeitem.h
@@ -33,8 +33,12 @@ namespace Internal {
class QuickTestTreeItem : public TestTreeItem
{
public:
- explicit QuickTestTreeItem(const QString &name = QString(), const QString &filePath = QString(),
- Type type = Root) : TestTreeItem(name, filePath, type) {}
+ explicit QuickTestTreeItem(ITestFramework *framework,
+ const QString &name = QString(),
+ const QString &filePath = QString(),
+ Type type = Root)
+ : TestTreeItem(framework, name, filePath, type)
+ {}
TestTreeItem *copyWithoutChildren() override;
QVariant data(int column, int role) const override;