AutoTest: Fix result tree for google test

Change-Id: I1f4a361a3c4ceb77c221d6549e42a1b7803ef305
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Stenger
2016-12-14 13:30:33 +01:00
parent 41ceac474b
commit b9fc628bb9
6 changed files with 39 additions and 28 deletions

View File

@@ -45,15 +45,15 @@ GTestOutputReader::GTestOutputReader(const QFutureInterface<TestResultPtr> &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

View File

@@ -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

View File

@@ -58,6 +58,8 @@ bool GTestResult::isDirectParentOf(const TestResult *other, bool *needsIntermedi
return false;
const GTestResult *gtOther = static_cast<const GTestResult *>(other);
if (m_iteration != gtOther->m_iteration)
return false;
return isTest() && gtOther->isTestSet();
}

View File

@@ -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

View File

@@ -58,7 +58,6 @@ enum Type {
MessageTestCaseWarn,
MessageTestCaseFail,
MessageTestCaseEnd,
MessageTestCaseRepetition,
MessageIntermediate,
MessageCurrentTest, INTERNAL_MESSAGES_END = MessageCurrentTest,

View File

@@ -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();
}