diff --git a/src/plugins/autotest/quick/quicktest_utils.h b/src/plugins/autotest/quick/quicktest_utils.h index 950328abaf7..f7a17ad538c 100644 --- a/src/plugins/autotest/quick/quicktest_utils.h +++ b/src/plugins/autotest/quick/quicktest_utils.h @@ -25,6 +25,10 @@ #pragma once +#include "../testframeworkmanager.h" + +#include + #include namespace Autotest { @@ -38,6 +42,36 @@ public: static const QByteArrayList valid = {"QUICK_TEST_MAIN", "QUICK_TEST_OPENGL_MAIN"}; return valid.contains(macro); } + + static QHash proFilesForQmlFiles(const Core::Id &id, const QStringList &files) + { + QHash result; + TestTreeItem *rootNode = TestFrameworkManager::instance()->rootNodeForTestFramework(id); + QTC_ASSERT(rootNode, return result); + + if (files.isEmpty()) + return result; + + for (int row = 0, rootCount = rootNode->childCount(); row < rootCount; ++row) { + const TestTreeItem *child = rootNode->childItem(row); + const QString &file = child->filePath(); + if (!file.isEmpty() && files.contains(file)) { + const QString &proFile = child->proFile(); + if (!proFile.isEmpty()) + result.insert(file, proFile); + } + for (int subRow = 0, subCount = child->childCount(); subRow < subCount; ++subRow) { + const TestTreeItem *grandChild = child->childItem(subRow); + const QString &file = grandChild->filePath(); + if (!file.isEmpty() && files.contains(file)) { + const QString &proFile = grandChild->proFile(); + if (!proFile.isEmpty()) + result.insert(file, proFile); + } + } + } + return result; + } }; } // namespace Internal diff --git a/src/plugins/autotest/quick/quicktestparser.cpp b/src/plugins/autotest/quick/quicktestparser.cpp index 49ad52c6712..c31e54a34e4 100644 --- a/src/plugins/autotest/quick/quicktestparser.cpp +++ b/src/plugins/autotest/quick/quicktestparser.cpp @@ -220,6 +220,7 @@ static bool handleQtQuickTest(QFutureInterface futureInterfa void QuickTestParser::init(const QStringList &filesToParse) { m_qmlSnapshot = QmlJSTools::Internal::ModelManager::instance()->snapshot(); + m_proFilesForQmlFiles = QuickTestUtils::proFilesForQmlFiles(id(), filesToParse); CppParser::init(filesToParse); } @@ -227,8 +228,11 @@ bool QuickTestParser::processDocument(QFutureInterface futur const QString &fileName) { if (fileName.endsWith(".qml")) { + const QString &proFile = m_proFilesForQmlFiles.value(fileName); + if (proFile.isEmpty()) + return false; QmlJS::Document::Ptr qmlJSDoc = m_qmlSnapshot.document(fileName); - return checkQmlDocumentForQuickTestCode(futureInterface, qmlJSDoc, id()); + return checkQmlDocumentForQuickTestCode(futureInterface, qmlJSDoc, id(), proFile); } if (!m_cppSnapshot.contains(fileName) || !selectedForBuilding(fileName)) return false; diff --git a/src/plugins/autotest/quick/quicktestparser.h b/src/plugins/autotest/quick/quicktestparser.h index 76ace6e435e..8f1c5ed6a0c 100644 --- a/src/plugins/autotest/quick/quicktestparser.h +++ b/src/plugins/autotest/quick/quicktestparser.h @@ -47,6 +47,7 @@ public: const QString &fileName) override; private: QmlJS::Snapshot m_qmlSnapshot; + QHash m_proFilesForQmlFiles; }; } // namespace Internal