diff --git a/src/plugins/autotest/gtest/gtestoutputreader.cpp b/src/plugins/autotest/gtest/gtestoutputreader.cpp index 8b581bc4b98..b9d57917070 100644 --- a/src/plugins/autotest/gtest/gtestoutputreader.cpp +++ b/src/plugins/autotest/gtest/gtestoutputreader.cpp @@ -45,15 +45,15 @@ GTestOutputReader::GTestOutputReader(const QFutureInterface &futu void GTestOutputReader::processOutput(const QByteArray &outputLine) { - static QRegExp newTestStarts(QStringLiteral("^\\[-{10}\\] \\d+ tests? from (.*)$")); - static QRegExp testEnds(QStringLiteral("^\\[-{10}\\] \\d+ tests? from (.*) \\((.*)\\)$")); - static QRegExp newTestSetStarts(QStringLiteral("^\\[ RUN \\] (.*)$")); - static QRegExp testSetSuccess(QStringLiteral("^\\[ OK \\] (.*) \\((.*)\\)$")); - static QRegExp testSetFail(QStringLiteral("^\\[ FAILED \\] (.*) \\((.*)\\)$")); - static QRegExp disabledTests(QStringLiteral("^ YOU HAVE (\\d+) DISABLED TESTS?$")); - static QRegExp failureLocation(QStringLiteral("^(.*):(\\d+): Failure$")); - static QRegExp errorLocation(QStringLiteral("^(.*)\\((\\d+)\\): error:.*$")); - static QRegExp iterations(QStringLiteral("^Repeating all tests \\(iteration (\\d+)\\) . . .$")); + static QRegExp newTestStarts("^\\[-{10}\\] \\d+ tests? from (.*)$"); + static QRegExp testEnds("^\\[-{10}\\] \\d+ tests? from (.*) \\((.*)\\)$"); + static QRegExp newTestSetStarts("^\\[ RUN \\] (.*)$"); + static QRegExp testSetSuccess("^\\[ OK \\] (.*) \\((.*)\\)$"); + static QRegExp testSetFail("^\\[ FAILED \\] (.*) \\((.*)\\)$"); + static QRegExp disabledTests("^ YOU HAVE (\\d+) DISABLED TESTS?$"); + static QRegExp failureLocation("^(.*):(\\d+): Failure$"); + static QRegExp errorLocation("^(.*)\\((\\d+)\\): error:.*$"); + static QRegExp iterations("^Repeating all tests \\(iteration (\\d+)\\) \\. \\. \\.$"); QByteArray read = outputLine; if (!m_unprocessed.isEmpty()) { @@ -78,9 +78,12 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine) m_iteration = iterations.cap(1).toInt(); m_description.clear(); } else if (line.startsWith(QStringLiteral("Note:"))) { - TestResultPtr testResult = TestResultPtr(new GTestResult()); + m_description = line; + if (m_iteration > 1) + m_description.append(' ' + tr("(iteration %1)").arg(m_iteration)); + TestResultPtr testResult = TestResultPtr(new GTestResult); testResult->setResult(Result::MessageInternal); - testResult->setDescription(line); + testResult->setDescription(m_description); m_futureInterface.reportResult(testResult); m_description.clear(); } else if (disabledTests.exactMatch(line)) { @@ -92,12 +95,11 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine) m_futureInterface.reportResult(testResult); m_description.clear(); } - return; //continue; + return; } if (testEnds.exactMatch(line)) { - GTestResult *testResult = new GTestResult(m_currentTestName); - testResult->setTestSetName(m_currentTestSet); + GTestResult *testResult = createDefaultResult(); testResult->setResult(Result::MessageTestCaseEnd); testResult->setDescription(tr("Test execution took %1").arg(testEnds.cap(2))); m_futureInterface.reportResult(TestResultPtr(testResult)); @@ -105,13 +107,12 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine) m_currentTestSet.clear(); } else if (newTestStarts.exactMatch(line)) { m_currentTestName = newTestStarts.cap(1); - TestResultPtr testResult = TestResultPtr(new GTestResult(m_currentTestName)); + TestResultPtr testResult = TestResultPtr(createDefaultResult()); + testResult->setResult(Result::MessageTestCaseStart); if (m_iteration > 1) { - testResult->setResult(Result::MessageTestCaseRepetition); testResult->setDescription(tr("Repeating test case %1 (iteration %2)") .arg(m_currentTestName).arg(m_iteration)); } else { - testResult->setResult(Result::MessageTestCaseStart); testResult->setDescription(tr("Executing test case %1").arg(m_currentTestName)); } m_futureInterface.reportResult(testResult); @@ -123,21 +124,18 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine) m_futureInterface.reportResult(testResult); m_description.clear(); } else if (testSetSuccess.exactMatch(line)) { - GTestResult *testResult = new GTestResult(m_currentTestName); - testResult->setTestSetName(m_currentTestSet); + GTestResult *testResult = createDefaultResult(); testResult->setResult(Result::Pass); testResult->setDescription(m_description); m_futureInterface.reportResult(TestResultPtr(testResult)); m_description.clear(); - testResult = new GTestResult(m_currentTestName); - testResult->setTestSetName(m_currentTestSet); + testResult = createDefaultResult(); testResult->setResult(Result::MessageInternal); testResult->setDescription(tr("Execution took %1.").arg(testSetSuccess.cap(2))); m_futureInterface.reportResult(TestResultPtr(testResult)); m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1); } else if (testSetFail.exactMatch(line)) { - GTestResult *testResult = new GTestResult(m_currentTestName); - testResult->setTestSetName(m_currentTestSet); + GTestResult *testResult = createDefaultResult(); testResult->setResult(Result::Fail); m_description.chop(1); testResult->setDescription(m_description); @@ -160,8 +158,7 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine) } m_futureInterface.reportResult(TestResultPtr(testResult)); m_description.clear(); - testResult = new GTestResult(m_currentTestName); - testResult->setTestSetName(m_currentTestSet); + testResult = createDefaultResult(); testResult->setResult(Result::MessageInternal); testResult->setDescription(tr("Execution took %1.").arg(testSetFail.cap(2))); m_futureInterface.reportResult(TestResultPtr(testResult)); @@ -169,5 +166,13 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine) } } +GTestResult *GTestOutputReader::createDefaultResult() const +{ + GTestResult *result = new GTestResult(m_currentTestName); + result->setTestSetName(m_currentTestSet); + result->setIteration(m_iteration); + return result; +} + } // namespace Internal } // namespace Autotest diff --git a/src/plugins/autotest/gtest/gtestoutputreader.h b/src/plugins/autotest/gtest/gtestoutputreader.h index 626ad6e597b..42031cd4d67 100644 --- a/src/plugins/autotest/gtest/gtestoutputreader.h +++ b/src/plugins/autotest/gtest/gtestoutputreader.h @@ -32,6 +32,8 @@ namespace Autotest { namespace Internal { +class GTestResult; + class GTestOutputReader : public TestOutputReader { Q_DECLARE_TR_FUNCTIONS(Autotest::Internal::GTestOutputReader) @@ -44,11 +46,12 @@ protected: void processOutput(const QByteArray &outputLine) override; private: + GTestResult *createDefaultResult() const; QString m_currentTestName; QString m_currentTestSet; QString m_description; QByteArray m_unprocessed; - int m_iteration = 0; + int m_iteration = 1; }; } // namespace Internal diff --git a/src/plugins/autotest/gtest/gtestresult.cpp b/src/plugins/autotest/gtest/gtestresult.cpp index e9cfe0f89cf..604f5cedaac 100644 --- a/src/plugins/autotest/gtest/gtestresult.cpp +++ b/src/plugins/autotest/gtest/gtestresult.cpp @@ -58,6 +58,8 @@ bool GTestResult::isDirectParentOf(const TestResult *other, bool *needsIntermedi return false; const GTestResult *gtOther = static_cast(other); + if (m_iteration != gtOther->m_iteration) + return false; return isTest() && gtOther->isTestSet(); } diff --git a/src/plugins/autotest/gtest/gtestresult.h b/src/plugins/autotest/gtest/gtestresult.h index 0c69ed4c408..74a8e1e9c3b 100644 --- a/src/plugins/autotest/gtest/gtestresult.h +++ b/src/plugins/autotest/gtest/gtestresult.h @@ -37,11 +37,13 @@ public: const QString outputString(bool selected) const override; void setTestSetName(const QString &testSetName) { m_testSetName = testSetName; } + void setIteration(int iteration) { m_iteration = iteration; } bool isDirectParentOf(const TestResult *other, bool *needsIntermediate) const override; private: bool isTest() const { return m_testSetName.isEmpty(); } bool isTestSet() const { return !m_testSetName.isEmpty(); } QString m_testSetName; + int m_iteration = 1; }; } // namespace Internal diff --git a/src/plugins/autotest/testresult.h b/src/plugins/autotest/testresult.h index 034adf51883..9eff8e5428b 100644 --- a/src/plugins/autotest/testresult.h +++ b/src/plugins/autotest/testresult.h @@ -58,7 +58,6 @@ enum Type { MessageTestCaseWarn, MessageTestCaseFail, MessageTestCaseEnd, - MessageTestCaseRepetition, MessageIntermediate, MessageCurrentTest, INTERNAL_MESSAGES_END = MessageCurrentTest, diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp index 63294a324e8..3e4903dd76d 100644 --- a/src/plugins/autotest/testresultmodel.cpp +++ b/src/plugins/autotest/testresultmodel.cpp @@ -342,7 +342,7 @@ void TestResultFilterModel::enableAllResultTypes() << Result::MessageCurrentTest << Result::MessageTestCaseStart << Result::MessageTestCaseSuccess << Result::MessageTestCaseWarn << Result::MessageTestCaseFail << Result::MessageTestCaseEnd - << Result::MessageTestCaseRepetition << Result::MessageInfo << Result::MessageSystem; + << Result::MessageInfo << Result::MessageSystem; invalidateFilter(); }