forked from qt-creator/qt-creator
Autotest: Use QPromise for async calls
Change-Id: I57d2feed36eeb1871b2b00cf7720c48f6a0e81b5 Reviewed-by: Christian Stenger <christian.stenger@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
@@ -96,7 +96,7 @@ static BoostTestParseResult *createParseResult(const QString &name, const FilePa
|
||||
|
||||
}
|
||||
|
||||
bool BoostTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool BoostTestParser::processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const FilePath &fileName)
|
||||
{
|
||||
CPlusPlus::Document::Ptr doc = document(fileName);
|
||||
@@ -148,7 +148,7 @@ bool BoostTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futu
|
||||
locationAndType.m_type,
|
||||
tmpInfo);
|
||||
currentSuite->children.append(funcResult);
|
||||
futureInterface.reportResult(TestParseResultPtr(topLevelSuite));
|
||||
promise.addResult(TestParseResultPtr(topLevelSuite));
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -22,7 +22,7 @@ class BoostTestParser : public CppParser
|
||||
{
|
||||
public:
|
||||
explicit BoostTestParser(ITestFramework *framework) : CppParser(framework) {}
|
||||
bool processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const Utils::FilePath &fileName) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ static bool hasCatchNames(const CPlusPlus::Document::Ptr &document)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CatchTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool CatchTestParser::processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const FilePath &fileName)
|
||||
{
|
||||
CPlusPlus::Document::Ptr doc = document(fileName);
|
||||
@@ -144,7 +144,7 @@ bool CatchTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futu
|
||||
parseResult->children.append(testCase);
|
||||
}
|
||||
|
||||
futureInterface.reportResult(TestParseResultPtr(parseResult));
|
||||
promise.addResult(TestParseResultPtr(parseResult));
|
||||
|
||||
return !foundTests.isEmpty();
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ class CatchTestParser : public CppParser
|
||||
public:
|
||||
CatchTestParser(ITestFramework *framework)
|
||||
: CppParser(framework) {}
|
||||
bool processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const Utils::FilePath &fileName) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -70,7 +70,7 @@ static bool hasGTestNames(const CPlusPlus::Document::Ptr &document)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool GTestParser::processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const FilePath &fileName)
|
||||
{
|
||||
CPlusPlus::Document::Ptr doc = document(fileName);
|
||||
@@ -124,7 +124,7 @@ bool GTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futureIn
|
||||
parseResult->children.append(testSet);
|
||||
}
|
||||
|
||||
futureInterface.reportResult(TestParseResultPtr(parseResult));
|
||||
promise.addResult(TestParseResultPtr(parseResult));
|
||||
}
|
||||
return !result.isEmpty();
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ class GTestParser : public CppParser
|
||||
{
|
||||
public:
|
||||
explicit GTestParser(ITestFramework *framework) : CppParser(framework) {}
|
||||
bool processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool processDocument(QPromise<TestParseResultPtr> &futureInterface,
|
||||
const Utils::FilePath &fileName) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
#include <cppeditor/cppworkingcopy.h>
|
||||
#include <qmljs/qmljsdocument.h>
|
||||
|
||||
#include <QFutureInterface>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
template <class T>
|
||||
class QPromise;
|
||||
class QRegularExpression;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
@@ -46,7 +46,7 @@ public:
|
||||
explicit ITestParser(ITestFramework *framework) : m_framework(framework) {}
|
||||
virtual ~ITestParser() { }
|
||||
virtual void init(const Utils::FilePaths &filesToParse, bool fullParse) = 0;
|
||||
virtual bool processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
virtual bool processDocument(QPromise<TestParseResultPtr> &futureInterface,
|
||||
const Utils::FilePath &fileName) = 0;
|
||||
|
||||
virtual QStringList supportedExtensions() const { return {}; }
|
||||
|
||||
@@ -292,7 +292,7 @@ static bool isQObject(const CPlusPlus::Document::Ptr &declaringDoc)
|
||||
|| file.endsWith("QtCore/qobject.h") || file.endsWith("kernel/qobject.h");
|
||||
}
|
||||
|
||||
bool QtTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool QtTestParser::processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const FilePath &fileName)
|
||||
{
|
||||
CPlusPlus::Document::Ptr doc = document(fileName);
|
||||
@@ -325,7 +325,7 @@ bool QtTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futureI
|
||||
data.multipleTestCases = testCase.multipleTestCases;
|
||||
QtTestParseResult *parseResult
|
||||
= createParseResult(testCase.name, data, projectParts.first()->projectFile);
|
||||
futureInterface.reportResult(TestParseResultPtr(parseResult));
|
||||
promise.addResult(TestParseResultPtr(parseResult));
|
||||
reported = true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
|
||||
void init(const Utils::FilePaths &filesToParse, bool fullParse) override;
|
||||
void release() override;
|
||||
bool processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const Utils::FilePath &fileName) override;
|
||||
|
||||
private:
|
||||
|
||||
@@ -196,7 +196,7 @@ QList<Document::Ptr> QuickTestParser::scanDirectoryForQuickTestQmlFiles(const Fi
|
||||
return foundDocs;
|
||||
}
|
||||
|
||||
static bool checkQmlDocumentForQuickTestCode(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
static bool checkQmlDocumentForQuickTestCode(QPromise<TestParseResultPtr> &promise,
|
||||
const Document::Ptr &qmlJSDoc,
|
||||
ITestFramework *framework,
|
||||
const FilePath &proFile = {},
|
||||
@@ -240,12 +240,12 @@ static bool checkQmlDocumentForQuickTestCode(QFutureInterface<TestParseResultPtr
|
||||
parseResult->children.append(funcResult);
|
||||
}
|
||||
|
||||
futureInterface.reportResult(TestParseResultPtr(parseResult));
|
||||
promise.addResult(TestParseResultPtr(parseResult));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QuickTestParser::handleQtQuickTest(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool QuickTestParser::handleQtQuickTest(QPromise<TestParseResultPtr> &promise,
|
||||
CPlusPlus::Document::Ptr document,
|
||||
ITestFramework *framework)
|
||||
{
|
||||
@@ -263,17 +263,14 @@ bool QuickTestParser::handleQtQuickTest(QFutureInterface<TestParseResultPtr> &fu
|
||||
if (srcDir.isEmpty())
|
||||
return false;
|
||||
|
||||
if (futureInterface.isCanceled())
|
||||
if (promise.isCanceled())
|
||||
return false;
|
||||
const QList<Document::Ptr> qmlDocs = scanDirectoryForQuickTestQmlFiles(srcDir);
|
||||
bool result = false;
|
||||
for (const Document::Ptr &qmlJSDoc : qmlDocs) {
|
||||
if (futureInterface.isCanceled())
|
||||
if (promise.isCanceled())
|
||||
break;
|
||||
result |= checkQmlDocumentForQuickTestCode(futureInterface,
|
||||
qmlJSDoc,
|
||||
framework,
|
||||
proFile,
|
||||
result |= checkQmlDocumentForQuickTestCode(promise, qmlJSDoc, framework, proFile,
|
||||
m_checkForDerivedTests);
|
||||
}
|
||||
return result;
|
||||
@@ -370,7 +367,7 @@ void QuickTestParser::release()
|
||||
CppParser::release();
|
||||
}
|
||||
|
||||
bool QuickTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool QuickTestParser::processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const FilePath &fileName)
|
||||
{
|
||||
if (fileName.endsWith(".qml")) {
|
||||
@@ -378,7 +375,7 @@ bool QuickTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futu
|
||||
if (proFile.isEmpty())
|
||||
return false;
|
||||
Document::Ptr qmlJSDoc = m_qmlSnapshot.document(fileName);
|
||||
return checkQmlDocumentForQuickTestCode(futureInterface,
|
||||
return checkQmlDocumentForQuickTestCode(promise,
|
||||
qmlJSDoc,
|
||||
framework(),
|
||||
proFile,
|
||||
@@ -389,7 +386,7 @@ bool QuickTestParser::processDocument(QFutureInterface<TestParseResultPtr> &futu
|
||||
if (cppdoc.isNull() || !includesQtQuickTest(cppdoc, m_cppSnapshot))
|
||||
return false;
|
||||
|
||||
return handleQtQuickTest(futureInterface, cppdoc, framework());
|
||||
return handleQtQuickTest(promise, cppdoc, framework());
|
||||
}
|
||||
|
||||
FilePath QuickTestParser::projectFileForMainCppFile(const FilePath &fileName) const
|
||||
|
||||
@@ -26,13 +26,13 @@ public:
|
||||
explicit QuickTestParser(ITestFramework *framework);
|
||||
void init(const Utils::FilePaths &filesToParse, bool fullParse) override;
|
||||
void release() override;
|
||||
bool processDocument(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool processDocument(QPromise<TestParseResultPtr> &promise,
|
||||
const Utils::FilePath &fileName) override;
|
||||
Utils::FilePath projectFileForMainCppFile(const Utils::FilePath &fileName) const;
|
||||
QStringList supportedExtensions() const override { return {"qml"}; };
|
||||
|
||||
private:
|
||||
bool handleQtQuickTest(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
bool handleQtQuickTest(QPromise<TestParseResultPtr> &promise,
|
||||
CPlusPlus::Document::Ptr document,
|
||||
ITestFramework *framework);
|
||||
void handleDirectoryChanged(const QString &directory);
|
||||
|
||||
@@ -254,13 +254,13 @@ bool TestCodeParser::postponed(const FilePaths &fileList)
|
||||
QTC_ASSERT(false, return false); // should not happen at all
|
||||
}
|
||||
|
||||
static void parseFileForTests(QFutureInterface<TestParseResultPtr> &futureInterface,
|
||||
static void parseFileForTests(QPromise<TestParseResultPtr> &promise,
|
||||
const QList<ITestParser *> &parsers, const FilePath &fileName)
|
||||
{
|
||||
for (ITestParser *parser : parsers) {
|
||||
if (futureInterface.isCanceled())
|
||||
if (promise.isCanceled())
|
||||
return;
|
||||
if (parser->processDocument(futureInterface, fileName))
|
||||
if (parser->processDocument(promise, fileName))
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -359,7 +359,7 @@ void TestCodeParser::scanForTests(const FilePaths &fileList, const QList<ITestPa
|
||||
QList<TaskItem> tasks{parallel}; // TODO: use ParallelLimit(N) and add to settings?
|
||||
for (const FilePath &file : filteredList) {
|
||||
const auto setup = [this, codeParsers, file](AsyncTask<TestParseResultPtr> &async) {
|
||||
async.setAsyncCallData(parseFileForTests, codeParsers, file);
|
||||
async.setConcurrentCallData(parseFileForTests, codeParsers, file);
|
||||
async.setThreadPool(m_threadPool);
|
||||
async.setPriority(QThread::LowestPriority);
|
||||
async.setFutureSynchronizer(&m_futureSynchronizer);
|
||||
|
||||
Reference in New Issue
Block a user