diff options
Diffstat (limited to 'src/plugins/autotest/quick')
-rw-r--r-- | src/plugins/autotest/quick/quicktest_utils.cpp | 4 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktest_utils.h | 5 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestconfiguration.cpp | 18 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestconfiguration.h | 2 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestframework.cpp | 19 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestframework.h | 5 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestparser.cpp | 24 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktestparser.h | 6 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktesttreeitem.cpp | 22 | ||||
-rw-r--r-- | src/plugins/autotest/quick/quicktesttreeitem.h | 8 |
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 ¯o) 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 ¯o); -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; |