AutoTest: generalize create default result

Add a pure virtual function to TestOutputReader returning
a pointer to a default constructed result.

Change-Id: Icd8090346f2c5115a7c548da7ba69ea54fe39fc4
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2018-01-16 08:41:18 +01:00
parent 77e28efad6
commit d11a724047
5 changed files with 40 additions and 40 deletions

View File

@@ -92,15 +92,15 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine)
} }
if (testEnds.exactMatch(line)) { if (testEnds.exactMatch(line)) {
GTestResult *testResult = createDefaultResult(); TestResultPtr testResult = createDefaultResult();
testResult->setResult(Result::MessageTestCaseEnd); testResult->setResult(Result::MessageTestCaseEnd);
testResult->setDescription(tr("Test execution took %1").arg(testEnds.cap(2))); testResult->setDescription(tr("Test execution took %1").arg(testEnds.cap(2)));
reportResult(TestResultPtr(testResult)); reportResult(testResult);
m_currentTestName.clear(); m_currentTestName.clear();
m_currentTestSet.clear(); m_currentTestSet.clear();
} else if (newTestStarts.exactMatch(line)) { } else if (newTestStarts.exactMatch(line)) {
setCurrentTestName(newTestStarts.cap(1)); setCurrentTestName(newTestStarts.cap(1));
TestResultPtr testResult = TestResultPtr(createDefaultResult()); TestResultPtr testResult = createDefaultResult();
testResult->setResult(Result::MessageTestCaseStart); testResult->setResult(Result::MessageTestCaseStart);
if (m_iteration > 1) { if (m_iteration > 1) {
testResult->setDescription(tr("Repeating test case %1 (iteration %2)") testResult->setDescription(tr("Repeating test case %1 (iteration %2)")
@@ -117,18 +117,18 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine)
reportResult(testResult); reportResult(testResult);
m_description.clear(); m_description.clear();
} else if (testSetSuccess.exactMatch(line)) { } else if (testSetSuccess.exactMatch(line)) {
GTestResult *testResult = createDefaultResult(); TestResultPtr testResult = createDefaultResult();
testResult->setResult(Result::Pass); testResult->setResult(Result::Pass);
testResult->setDescription(m_description); testResult->setDescription(m_description);
reportResult(TestResultPtr(testResult)); reportResult(testResult);
m_description.clear(); m_description.clear();
testResult = createDefaultResult(); testResult = createDefaultResult();
testResult->setResult(Result::MessageInternal); testResult->setResult(Result::MessageInternal);
testResult->setDescription(tr("Execution took %1.").arg(testSetSuccess.cap(2))); testResult->setDescription(tr("Execution took %1.").arg(testSetSuccess.cap(2)));
reportResult(TestResultPtr(testResult)); reportResult(testResult);
m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1); m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1);
} else if (testSetFail.exactMatch(line)) { } else if (testSetFail.exactMatch(line)) {
GTestResult *testResult = createDefaultResult(); TestResultPtr testResult = createDefaultResult();
testResult->setResult(Result::Fail); testResult->setResult(Result::Fail);
m_description.chop(1); m_description.chop(1);
testResult->setDescription(m_description); testResult->setDescription(m_description);
@@ -149,27 +149,17 @@ void GTestOutputReader::processOutput(const QByteArray &outputLine)
} }
} }
} }
reportResult(TestResultPtr(testResult)); reportResult(testResult);
m_description.clear(); m_description.clear();
testResult = createDefaultResult(); testResult = createDefaultResult();
testResult->setResult(Result::MessageInternal); testResult->setResult(Result::MessageInternal);
testResult->setDescription(tr("Execution took %1.").arg(testSetFail.cap(2))); testResult->setDescription(tr("Execution took %1.").arg(testSetFail.cap(2)));
reportResult(TestResultPtr(testResult)); reportResult(testResult);
m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1); m_futureInterface.setProgressValue(m_futureInterface.progressValue() + 1);
} }
} }
void GTestOutputReader::setCurrentTestSet(const QString &testSet) TestResultPtr GTestOutputReader::createDefaultResult() const
{
m_currentTestSet = testSet;
}
void GTestOutputReader::setCurrentTestName(const QString &testName)
{
m_currentTestName = testName;
}
GTestResult *GTestOutputReader::createDefaultResult() const
{ {
GTestResult *result = new GTestResult(m_executable, m_projectFile, m_currentTestName); GTestResult *result = new GTestResult(m_executable, m_projectFile, m_currentTestName);
result->setTestSetName(m_currentTestSet); result->setTestSetName(m_currentTestSet);
@@ -182,7 +172,17 @@ GTestResult *GTestOutputReader::createDefaultResult() const
result->setLine(static_cast<int>(testItem->line())); result->setLine(static_cast<int>(testItem->line()));
} }
return result; return TestResultPtr(result);
}
void GTestOutputReader::setCurrentTestSet(const QString &testSet)
{
m_currentTestSet = testSet;
}
void GTestOutputReader::setCurrentTestName(const QString &testName)
{
m_currentTestName = testName;
} }
} // namespace Internal } // namespace Internal

View File

@@ -43,14 +43,13 @@ public:
GTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface, GTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface,
QProcess *testApplication, const QString &buildDirectory, QProcess *testApplication, const QString &buildDirectory,
const QString &projectFile); const QString &projectFile);
protected: protected:
void processOutput(const QByteArray &outputLine) override; void processOutput(const QByteArray &outputLine) override;
TestResultPtr createDefaultResult() const override;
private: private:
void setCurrentTestSet(const QString &testSet); void setCurrentTestSet(const QString &testSet);
void setCurrentTestName(const QString &testName); void setCurrentTestName(const QString &testName);
GTestResult *createDefaultResult() const;
QString m_executable; QString m_executable;
QString m_projectFile; QString m_projectFile;

View File

@@ -152,6 +152,14 @@ void QtTestOutputReader::processOutput(const QByteArray &outputLine)
} }
} }
TestResultPtr QtTestOutputReader::createDefaultResult() const
{
QtTestResult *result = new QtTestResult(m_executable, m_projectFile, m_testType, m_className);
result->setFunctionName(m_testCase);
result->setDataTag(m_dataTag);
return TestResultPtr(result);
}
void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine) void QtTestOutputReader::processXMLOutput(const QByteArray &outputLine)
{ {
static QStringList validEndTags = {QStringLiteral("Incident"), static QStringList validEndTags = {QStringLiteral("Incident"),
@@ -416,17 +424,9 @@ void QtTestOutputReader::processSummaryFinishOutput()
m_lineNumber = 0; m_lineNumber = 0;
} }
QtTestResult *QtTestOutputReader::createDefaultResult() const
{
QtTestResult *result = new QtTestResult(m_executable, m_projectFile, m_testType, m_className);
result->setFunctionName(m_testCase);
result->setDataTag(m_dataTag);
return result;
}
void QtTestOutputReader::sendCompleteInformation() void QtTestOutputReader::sendCompleteInformation()
{ {
TestResultPtr testResult = TestResultPtr(createDefaultResult()); TestResultPtr testResult = createDefaultResult();
testResult->setResult(m_result); testResult->setResult(m_result);
if (m_lineNumber) { if (m_lineNumber) {
@@ -453,7 +453,7 @@ void QtTestOutputReader::sendMessageCurrentTest()
void QtTestOutputReader::sendStartMessage(bool isFunction) void QtTestOutputReader::sendStartMessage(bool isFunction)
{ {
TestResultPtr testResult = TestResultPtr(createDefaultResult()); TestResultPtr testResult = createDefaultResult();
testResult->setResult(Result::MessageTestCaseStart); testResult->setResult(Result::MessageTestCaseStart);
testResult->setDescription(isFunction ? tr("Executing test function %1").arg(m_testCase) testResult->setDescription(isFunction ? tr("Executing test function %1").arg(m_testCase)
: tr("Executing test case %1").arg(m_className)); : tr("Executing test case %1").arg(m_className));
@@ -467,7 +467,7 @@ void QtTestOutputReader::sendStartMessage(bool isFunction)
void QtTestOutputReader::sendFinishMessage(bool isFunction) void QtTestOutputReader::sendFinishMessage(bool isFunction)
{ {
TestResultPtr testResult = TestResultPtr(createDefaultResult()); TestResultPtr testResult = createDefaultResult();
testResult->setResult(Result::MessageTestCaseEnd); testResult->setResult(Result::MessageTestCaseEnd);
if (!m_duration.isEmpty()) { if (!m_duration.isEmpty()) {
testResult->setDescription(isFunction ? tr("Execution took %1 ms.").arg(m_duration) testResult->setDescription(isFunction ? tr("Execution took %1 ms.").arg(m_duration)
@@ -482,18 +482,18 @@ void QtTestOutputReader::sendFinishMessage(bool isFunction)
// TODO factor out tr() strings to avoid duplication (see XML processing of Characters) // TODO factor out tr() strings to avoid duplication (see XML processing of Characters)
void QtTestOutputReader::handleAndSendConfigMessage(const QRegExp &config) void QtTestOutputReader::handleAndSendConfigMessage(const QRegExp &config)
{ {
QtTestResult *testResult = createDefaultResult(); TestResultPtr testResult = createDefaultResult();
testResult->setResult(Result::MessageInternal); testResult->setResult(Result::MessageInternal);
testResult->setDescription(tr("Qt version: %1").arg(config.cap(3))); testResult->setDescription(tr("Qt version: %1").arg(config.cap(3)));
reportResult(TestResultPtr(testResult)); reportResult(testResult);
testResult = createDefaultResult(); testResult = createDefaultResult();
testResult->setResult(Result::MessageInternal); testResult->setResult(Result::MessageInternal);
testResult->setDescription(tr("Qt build: %1").arg(config.cap(2))); testResult->setDescription(tr("Qt build: %1").arg(config.cap(2)));
reportResult(TestResultPtr(testResult)); reportResult(testResult);
testResult = createDefaultResult(); testResult = createDefaultResult();
testResult->setResult(Result::MessageInternal); testResult->setResult(Result::MessageInternal);
testResult->setDescription(tr("QTest version: %1").arg(config.cap(1))); testResult->setDescription(tr("QTest version: %1").arg(config.cap(1)));
reportResult(TestResultPtr(testResult)); reportResult(testResult);
} }
} // namespace Internal } // namespace Internal

View File

@@ -50,9 +50,9 @@ public:
QtTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface, QtTestOutputReader(const QFutureInterface<TestResultPtr> &futureInterface,
QProcess *testApplication, const QString &buildDirectory, QProcess *testApplication, const QString &buildDirectory,
const QString &projectFile, OutputMode mode, TestType type); const QString &projectFile, OutputMode mode, TestType type);
protected: protected:
void processOutput(const QByteArray &outputLine) override; void processOutput(const QByteArray &outputLine) override;
TestResultPtr createDefaultResult() const override;
private: private:
void processXMLOutput(const QByteArray &outputLine); void processXMLOutput(const QByteArray &outputLine);
@@ -61,7 +61,6 @@ private:
void processLocationOutput(const QString &fileWithLine); void processLocationOutput(const QString &fileWithLine);
void processSummaryFinishOutput(); void processSummaryFinishOutput();
// helper functions // helper functions
QtTestResult *createDefaultResult() const;
void sendCompleteInformation(); void sendCompleteInformation();
void sendMessageCurrentTest(); void sendMessageCurrentTest();
void sendStartMessage(bool isFunction); void sendStartMessage(bool isFunction);

View File

@@ -49,6 +49,8 @@ public:
signals: signals:
void newOutputAvailable(const QByteArray &output); void newOutputAvailable(const QByteArray &output);
protected: protected:
virtual TestResultPtr createDefaultResult() const = 0;
void reportResult(const TestResultPtr &result); void reportResult(const TestResultPtr &result);
QFutureInterface<TestResultPtr> m_futureInterface; QFutureInterface<TestResultPtr> m_futureInterface;
QProcess *m_testApplication; // not owned QProcess *m_testApplication; // not owned