diff options
Diffstat (limited to 'src/plugins/autotest/qtest')
-rw-r--r-- | src/plugins/autotest/qtest/qttestoutputreader.cpp | 47 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestoutputreader.h | 4 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestparser.cpp | 4 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestresult.cpp | 25 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestresult.h | 1 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttesttreeitem.cpp | 20 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttesttreeitem.h | 2 | ||||
-rw-r--r-- | src/plugins/autotest/qtest/qttestvisitors.cpp | 2 |
8 files changed, 56 insertions, 49 deletions
diff --git a/src/plugins/autotest/qtest/qttestoutputreader.cpp b/src/plugins/autotest/qtest/qttestoutputreader.cpp index a74c24dccd..d71fd65509 100644 --- a/src/plugins/autotest/qtest/qttestoutputreader.cpp +++ b/src/plugins/autotest/qtest/qttestoutputreader.cpp @@ -34,6 +34,8 @@ #include <QFileInfo> #include <QRegularExpression> +#include <cctype> + namespace Autotest { namespace Internal { @@ -188,6 +190,15 @@ void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine) if (m_className.isEmpty() && outputLine.trimmed().isEmpty()) return; + if (m_expectTag) { + for (auto ch : outputLine) { + if (std::isspace(ch)) + continue; + if (ch != '<') + return; + break; + } + } m_xmlReader.addData(QString::fromUtf8(outputLine)); while (!m_xmlReader.atEnd()) { if (m_futureInterface.isCanceled()) @@ -221,7 +232,7 @@ void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine) m_description.clear(); m_duration.clear(); m_file.clear(); - m_result = Result::Invalid; + m_result = ResultType::Invalid; m_lineNumber = 0; const QXmlStreamAttributes &attributes = m_xmlReader.attributes(); m_result = TestResult::resultFromString( @@ -237,24 +248,25 @@ void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine) const int iterations = attributes.value(QStringLiteral("iterations")).toInt(); m_dataTag = attributes.value(QStringLiteral("tag")).toString(); m_description = constructBenchmarkInformation(metric, value, iterations); - m_result = Result::Benchmark; + m_result = ResultType::Benchmark; } else if (currentTag == QStringLiteral("DataTag")) { m_cdataMode = DataTag; } else if (currentTag == QStringLiteral("Description")) { m_cdataMode = Description; } else if (currentTag == QStringLiteral("QtVersion")) { - m_result = Result::MessageInternal; + m_result = ResultType::MessageInternal; m_cdataMode = QtVersion; } else if (currentTag == QStringLiteral("QtBuild")) { - m_result = Result::MessageInternal; + m_result = ResultType::MessageInternal; m_cdataMode = QtBuild; } else if (currentTag == QStringLiteral("QTestVersion")) { - m_result = Result::MessageInternal; + m_result = ResultType::MessageInternal; m_cdataMode = QTestVersion; } break; } case QXmlStreamReader::Characters: { + m_expectTag = false; QStringRef text = m_xmlReader.text().trimmed(); if (text.isEmpty()) break; @@ -285,6 +297,7 @@ void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine) break; } case QXmlStreamReader::EndElement: { + m_expectTag = true; m_cdataMode = None; const QStringRef currentTag = m_xmlReader.name(); if (currentTag == QStringLiteral("TestFunction")) { @@ -308,7 +321,7 @@ void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine) && m_xmlReader.error() != QXmlStreamReader::PrematureEndOfDocumentError) { createAndReportResult(tr("XML parsing failed.") + QString(" (%1) ").arg(m_xmlReader.error()) - + m_xmlReader.errorString(), Result::MessageFatal); + + m_xmlReader.errorString(), ResultType::MessageFatal); } break; } @@ -317,7 +330,7 @@ void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine) static QStringList extractFunctionInformation(const QString &testClassName, const QString &lineWithoutResultType, - Result::Type resultType) + ResultType resultType) { static QRegularExpression classInformation("^(.+?)\\((.*?)\\)(.*)$"); QStringList result; @@ -327,7 +340,7 @@ static QStringList extractFunctionInformation(const QString &testClassName, QTC_ASSERT(fullQualifiedFunc.startsWith(testClassName + "::"), return result); fullQualifiedFunc = fullQualifiedFunc.mid(testClassName.length() + 2); result.append(fullQualifiedFunc); - if (resultType == Result::Benchmark) { // tag is displayed differently + if (resultType == ResultType::Benchmark) { // tag is displayed differently QString possiblyTag = match.captured(3); if (!possiblyTag.isEmpty()) possiblyTag = possiblyTag.mid(2, possiblyTag.length() - 4); @@ -452,7 +465,7 @@ void QtTestOutputReader::processSummaryFinishOutput() sendFinishMessage(false); m_className.clear(); m_description.clear(); - m_result = Result::Invalid; + m_result = ResultType::Invalid; m_file.clear(); m_lineNumber = 0; } @@ -478,16 +491,16 @@ void QtTestOutputReader::sendCompleteInformation() void QtTestOutputReader::sendMessageCurrentTest() { - TestResultPtr testResult = TestResultPtr(new QtTestResult(m_projectFile, m_testType)); - testResult->setResult(Result::MessageCurrentTest); + QtTestResult *testResult = new QtTestResult(QString(), m_projectFile, m_testType, QString()); + testResult->setResult(ResultType::MessageCurrentTest); testResult->setDescription(tr("Entering test function %1::%2").arg(m_className, m_testCase)); - reportResult(testResult); + reportResult(TestResultPtr(testResult)); } void QtTestOutputReader::sendStartMessage(bool isFunction) { TestResultPtr testResult = createDefaultResult(); - testResult->setResult(Result::MessageTestCaseStart); + testResult->setResult(ResultType::TestStart); testResult->setDescription(isFunction ? tr("Executing test function %1").arg(m_testCase) : tr("Executing test case %1").arg(m_className)); const TestTreeItem *testItem = testResult->findTestTreeItem(); @@ -501,7 +514,7 @@ void QtTestOutputReader::sendStartMessage(bool isFunction) void QtTestOutputReader::sendFinishMessage(bool isFunction) { TestResultPtr testResult = createDefaultResult(); - testResult->setResult(Result::MessageTestCaseEnd); + testResult->setResult(ResultType::TestEnd); if (!m_duration.isEmpty()) { testResult->setDescription(isFunction ? tr("Execution took %1 ms.").arg(m_duration) : tr("Test execution took %1 ms.").arg(m_duration)); @@ -515,15 +528,15 @@ void QtTestOutputReader::sendFinishMessage(bool isFunction) void QtTestOutputReader::handleAndSendConfigMessage(const QRegularExpressionMatch &config) { TestResultPtr testResult = createDefaultResult(); - testResult->setResult(Result::MessageInternal); + testResult->setResult(ResultType::MessageInternal); testResult->setDescription(trQtVersion(config.captured(3))); reportResult(testResult); testResult = createDefaultResult(); - testResult->setResult(Result::MessageInternal); + testResult->setResult(ResultType::MessageInternal); testResult->setDescription(trQtBuild(config.captured(2))); reportResult(testResult); testResult = createDefaultResult(); - testResult->setResult(Result::MessageInternal); + testResult->setResult(ResultType::MessageInternal); testResult->setDescription(trQtestVersion(config.captured(1))); reportResult(testResult); } diff --git a/src/plugins/autotest/qtest/qttestoutputreader.h b/src/plugins/autotest/qtest/qttestoutputreader.h index a95a51a662..ce2b35416c 100644 --- a/src/plugins/autotest/qtest/qttestoutputreader.h +++ b/src/plugins/autotest/qtest/qttestoutputreader.h @@ -83,7 +83,7 @@ private: QString m_testCase; QString m_formerTestCase; QString m_dataTag; - Result::Type m_result = Result::Invalid; + ResultType m_result = ResultType::Invalid; QString m_description; QString m_file; int m_lineNumber = 0; @@ -91,7 +91,7 @@ private: QXmlStreamReader m_xmlReader; OutputMode m_mode = XML; TestType m_testType = TestType::QtTest; - + bool m_expectTag = true; }; } // namespace Internal diff --git a/src/plugins/autotest/qtest/qttestparser.cpp b/src/plugins/autotest/qtest/qttestparser.cpp index 234aeca79f..ddedf4dc52 100644 --- a/src/plugins/autotest/qtest/qttestparser.cpp +++ b/src/plugins/autotest/qtest/qttestparser.cpp @@ -389,9 +389,9 @@ void QtTestParser::release() bool QtTestParser::processDocument(QFutureInterface<TestParseResultPtr> futureInterface, const QString &fileName) { - if (!m_cppSnapshot.contains(fileName) || !selectedForBuilding(fileName)) + CPlusPlus::Document::Ptr doc = document(fileName); + if (doc.isNull()) return false; - CPlusPlus::Document::Ptr doc = m_cppSnapshot.find(fileName).value(); const QString &oldName = m_testCaseNames.value(fileName); const QStringList &alternativeFiles = m_alternativeFiles.values(fileName); if ((!includesQtTest(doc, m_cppSnapshot) || !qtTestLibDefined(fileName)) && oldName.isEmpty()) diff --git a/src/plugins/autotest/qtest/qttestresult.cpp b/src/plugins/autotest/qtest/qttestresult.cpp index 5cb7fd0402..3e85c36e68 100644 --- a/src/plugins/autotest/qtest/qttestresult.cpp +++ b/src/plugins/autotest/qtest/qttestresult.cpp @@ -34,11 +34,6 @@ namespace Autotest { namespace Internal { -QtTestResult::QtTestResult(const QString &projectFile, TestType type, const QString &className) - : TestResult(className), m_projectFile(projectFile), m_type(type) -{ -} - QtTestResult::QtTestResult(const QString &id, const QString &projectFile, TestType type, const QString &className) : TestResult(id, className), m_projectFile(projectFile), m_type(type) @@ -51,12 +46,12 @@ const QString QtTestResult::outputString(bool selected) const const QString &className = name(); QString output; switch (result()) { - case Result::Pass: - case Result::Fail: - case Result::ExpectedFail: - case Result::UnexpectedPass: - case Result::BlacklistedFail: - case Result::BlacklistedPass: + case ResultType::Pass: + case ResultType::Fail: + case ResultType::ExpectedFail: + case ResultType::UnexpectedPass: + case ResultType::BlacklistedFail: + case ResultType::BlacklistedPass: output = className + "::" + m_function; if (!m_dataTag.isEmpty()) output.append(QString(" (%1)").arg(m_dataTag)); @@ -64,7 +59,7 @@ const QString QtTestResult::outputString(bool selected) const output.append('\n').append(desc); } break; - case Result::Benchmark: + case ResultType::Benchmark: output = className + "::" + m_function; if (!m_dataTag.isEmpty()) output.append(QString(" (%1)").arg(m_dataTag)); @@ -89,12 +84,12 @@ bool QtTestResult::isDirectParentOf(const TestResult *other, bool *needsIntermed return false; const QtTestResult *qtOther = static_cast<const QtTestResult *>(other); - if (TestResult::isMessageCaseStart(result())) { + if (result() == ResultType::TestStart) { if (qtOther->isDataTag()) { if (qtOther->m_function == m_function) { if (m_dataTag.isEmpty()) { // avoid adding function's TestCaseEnd to the data tag - *needsIntermediate = qtOther->result() != Result::MessageTestCaseEnd; + *needsIntermediate = qtOther->result() != ResultType::TestEnd; return true; } return qtOther->m_dataTag == m_dataTag; @@ -164,7 +159,7 @@ bool QtTestResult::matches(const TestTreeItem *item) const if (item->proFile() != m_projectFile) return false; return matchesTestCase(item); - case TestTreeItem::TestFunctionOrSet: + case TestTreeItem::TestFunction: case TestTreeItem::TestSpecialFunction: if (!isTestFunction()) return false; diff --git a/src/plugins/autotest/qtest/qttestresult.h b/src/plugins/autotest/qtest/qttestresult.h index a0735a90c7..f3f653cd1a 100644 --- a/src/plugins/autotest/qtest/qttestresult.h +++ b/src/plugins/autotest/qtest/qttestresult.h @@ -34,7 +34,6 @@ namespace Internal { class QtTestResult : public TestResult { public: - QtTestResult(const QString &projectFile, TestType type, const QString &className = QString()); QtTestResult(const QString &id, const QString &projectFile, TestType type, const QString &className); const QString outputString(bool selected) const override; diff --git a/src/plugins/autotest/qtest/qttesttreeitem.cpp b/src/plugins/autotest/qtest/qttesttreeitem.cpp index 3fe96b6f39..7069e29961 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.cpp +++ b/src/plugins/autotest/qtest/qttesttreeitem.cpp @@ -82,7 +82,7 @@ Qt::ItemFlags QtTestTreeItem::flags(int column) const switch (type()) { case TestDataTag: return defaultFlags | Qt::ItemIsUserCheckable; - case TestFunctionOrSet: + case TestFunction: return defaultFlags | Qt::ItemIsAutoTristate | Qt::ItemIsUserCheckable; default: return TestTreeItem::flags(column); @@ -93,7 +93,7 @@ bool QtTestTreeItem::canProvideTestConfiguration() const { switch (type()) { case TestCase: - case TestFunctionOrSet: + case TestFunction: case TestDataTag: return true; default: @@ -119,7 +119,7 @@ TestConfiguration *QtTestTreeItem::testConfiguration() const config->setProjectFile(proFile()); config->setProject(project); break; - case TestFunctionOrSet: { + case TestFunction: { TestTreeItem *parent = parentItem(); config = new QtTestConfiguration(); config->setTestCases(QStringList(name())); @@ -234,7 +234,7 @@ QList<TestConfiguration *> QtTestTreeItem::getSelectedTestConfigurations() const return result; } -QList<TestConfiguration *> QtTestTreeItem::getTestConfigurationsForFile(const Utils::FileName &fileName) const +QList<TestConfiguration *> QtTestTreeItem::getTestConfigurationsForFile(const Utils::FilePath &fileName) const { QList<TestConfiguration *> result; @@ -245,7 +245,7 @@ QList<TestConfiguration *> QtTestTreeItem::getTestConfigurationsForFile(const Ut QHash<TestTreeItem *, QStringList> testFunctions; const QString &file = fileName.toString(); forAllChildren([&testFunctions, &file](TestTreeItem *node) { - if (node->type() == Type::TestFunctionOrSet && node->filePath() == file) { + if (node->type() == Type::TestFunction && node->filePath() == file) { QTC_ASSERT(node->parentItem(), return); TestTreeItem *testCase = node->parentItem(); QTC_ASSERT(testCase->type() == Type::TestCase, return); @@ -287,7 +287,7 @@ TestTreeItem *QtTestTreeItem::find(const TestParseResult *result) const QtTestParseResult *qtResult = static_cast<const QtTestParseResult *>(result); return findChildByNameAndInheritance(qtResult->displayName, qtResult->inherited()); } - case TestFunctionOrSet: + case TestFunction: case TestDataFunction: case TestSpecialFunction: return findChildByName(result->name); @@ -306,12 +306,12 @@ TestTreeItem *QtTestTreeItem::findChild(const TestTreeItem *other) case GroupNode: return otherType == TestCase ? findChildByFile(other->filePath()) : nullptr; case TestCase: { - if (otherType != TestFunctionOrSet && otherType != TestDataFunction && otherType != TestSpecialFunction) + if (otherType != TestFunction && otherType != TestDataFunction && otherType != TestSpecialFunction) return nullptr; auto qtOther = static_cast<const QtTestTreeItem *>(other); return findChildByNameAndInheritance(other->filePath(), qtOther->inherited()); } - case TestFunctionOrSet: + case TestFunction: case TestDataFunction: case TestSpecialFunction: return otherType == TestDataTag ? findChildByName(other->name()) : nullptr; @@ -326,8 +326,8 @@ bool QtTestTreeItem::modify(const TestParseResult *result) switch (type()) { case TestCase: - return modifyTestCaseContent(result); - case TestFunctionOrSet: + return modifyTestCaseOrSuiteContent(result); + case TestFunction: case TestDataFunction: case TestSpecialFunction: return modifyTestFunctionContent(result); diff --git a/src/plugins/autotest/qtest/qttesttreeitem.h b/src/plugins/autotest/qtest/qttesttreeitem.h index 3c7f9c4bd7..97ad853580 100644 --- a/src/plugins/autotest/qtest/qttesttreeitem.h +++ b/src/plugins/autotest/qtest/qttesttreeitem.h @@ -45,7 +45,7 @@ public: TestConfiguration *debugConfiguration() const override; QList<TestConfiguration *> getAllTestConfigurations() const override; QList<TestConfiguration *> getSelectedTestConfigurations() const override; - QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FileName &fileName) const override; + QList<TestConfiguration *> getTestConfigurationsForFile(const Utils::FilePath &fileName) const override; TestTreeItem *find(const TestParseResult *result) override; TestTreeItem *findChild(const TestTreeItem *other) override; bool modify(const TestParseResult *result) override; diff --git a/src/plugins/autotest/qtest/qttestvisitors.cpp b/src/plugins/autotest/qtest/qttestvisitors.cpp index b6d6992e2d..58a69f2dbf 100644 --- a/src/plugins/autotest/qtest/qttestvisitors.cpp +++ b/src/plugins/autotest/qtest/qttestvisitors.cpp @@ -82,7 +82,7 @@ bool TestVisitor::visit(CPlusPlus::Class *symbol) else if (name.endsWith("_data")) locationAndType.m_type = TestTreeItem::TestDataFunction; else - locationAndType.m_type = TestTreeItem::TestFunctionOrSet; + locationAndType.m_type = TestTreeItem::TestFunction; locationAndType.m_inherited = m_inherited; m_privSlots.insert(className + "::" + name, locationAndType); } |