aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/autotest/qtest
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/autotest/qtest')
-rw-r--r--src/plugins/autotest/qtest/qttestoutputreader.cpp47
-rw-r--r--src/plugins/autotest/qtest/qttestoutputreader.h4
-rw-r--r--src/plugins/autotest/qtest/qttestparser.cpp4
-rw-r--r--src/plugins/autotest/qtest/qttestresult.cpp25
-rw-r--r--src/plugins/autotest/qtest/qttestresult.h1
-rw-r--r--src/plugins/autotest/qtest/qttesttreeitem.cpp20
-rw-r--r--src/plugins/autotest/qtest/qttesttreeitem.h2
-rw-r--r--src/plugins/autotest/qtest/qttestvisitors.cpp2
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);
}