testlib: Simplify JUnit test logger
- Use the right name for the attribute (AI_Message), rather than fixing it up in QTestJUnitStreamer. - Don't pretend that we're adding line and file information, only to discard it in QTestJUnitStreamer. - Don't pretend to add benchmark information, only to discard it in QTestJUnitStreamer. Pick-to: 6.2 Change-Id: Ib6eadc12300157216fe9c6e8bcfebd7eb8a3ea68 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>bb10
parent
f1ab1132ea
commit
177d259782
|
|
@ -167,7 +167,6 @@ void QJUnitTestLogger::addIncident(IncidentTypes type, const char *description,
|
|||
const char *file, int line)
|
||||
{
|
||||
const char *typeBuf = nullptr;
|
||||
char buf[100];
|
||||
|
||||
switch (type) {
|
||||
case QAbstractTestLogger::XPass:
|
||||
|
|
@ -206,13 +205,7 @@ void QJUnitTestLogger::addIncident(IncidentTypes type, const char *description,
|
|||
if (type == QAbstractTestLogger::Fail || type == QAbstractTestLogger::XPass) {
|
||||
QTestElement *failureElement = new QTestElement(QTest::LET_Failure);
|
||||
failureElement->addAttribute(QTest::AI_Result, typeBuf);
|
||||
if (file)
|
||||
failureElement->addAttribute(QTest::AI_File, file);
|
||||
else
|
||||
failureElement->addAttribute(QTest::AI_File, "");
|
||||
qsnprintf(buf, sizeof(buf), "%i", line);
|
||||
failureElement->addAttribute(QTest::AI_Line, buf);
|
||||
failureElement->addAttribute(QTest::AI_Description, description);
|
||||
failureElement->addAttribute(QTest::AI_Message, description);
|
||||
addTag(failureElement);
|
||||
currentLogElement->addLogElement(failureElement);
|
||||
}
|
||||
|
|
@ -251,14 +244,6 @@ void QJUnitTestLogger::addIncident(IncidentTypes type, const char *description,
|
|||
currentLogElement->addAttribute(QTest::AI_Result, typeBuf);
|
||||
}
|
||||
|
||||
if (file)
|
||||
currentLogElement->addAttribute(QTest::AI_File, file);
|
||||
else
|
||||
currentLogElement->addAttribute(QTest::AI_File, "");
|
||||
|
||||
qsnprintf(buf, sizeof(buf), "%i", line);
|
||||
currentLogElement->addAttribute(QTest::AI_Line, buf);
|
||||
|
||||
/*
|
||||
Since XFAIL does not add a failure to the testlog in junitxml, add a message, so we still
|
||||
have some information about the expected failure.
|
||||
|
|
@ -268,24 +253,6 @@ void QJUnitTestLogger::addIncident(IncidentTypes type, const char *description,
|
|||
}
|
||||
}
|
||||
|
||||
void QJUnitTestLogger::addBenchmarkResult(const QBenchmarkResult &result)
|
||||
{
|
||||
QTestElement *benchmarkElement = new QTestElement(QTest::LET_Benchmark);
|
||||
|
||||
benchmarkElement->addAttribute(
|
||||
QTest::AI_Metric,
|
||||
QTest::benchmarkMetricName(result.metric));
|
||||
benchmarkElement->addAttribute(QTest::AI_Tag, result.context.tag.toUtf8().data());
|
||||
|
||||
const qreal valuePerIteration = qreal(result.value) / qreal(result.iterations);
|
||||
benchmarkElement->addAttribute(QTest::AI_Value, QByteArray::number(valuePerIteration).constData());
|
||||
|
||||
char buf[100];
|
||||
qsnprintf(buf, sizeof(buf), "%i", result.iterations);
|
||||
benchmarkElement->addAttribute(QTest::AI_Iterations, buf);
|
||||
currentLogElement->addLogElement(benchmarkElement);
|
||||
}
|
||||
|
||||
void QJUnitTestLogger::addTag(QTestElement* element)
|
||||
{
|
||||
const char *tag = QTestResult::currentDataTag();
|
||||
|
|
@ -309,6 +276,9 @@ void QJUnitTestLogger::addTag(QTestElement* element)
|
|||
|
||||
void QJUnitTestLogger::addMessage(MessageTypes type, const QString &message, const char *file, int line)
|
||||
{
|
||||
Q_UNUSED(file);
|
||||
Q_UNUSED(line);
|
||||
|
||||
auto messageElement = new QTestElement(QTest::LET_Message);
|
||||
auto systemLogElement = systemOutputElement;
|
||||
const char *typeBuf = nullptr;
|
||||
|
|
@ -347,25 +317,16 @@ void QJUnitTestLogger::addMessage(MessageTypes type, const QString &message, con
|
|||
}
|
||||
|
||||
messageElement->addAttribute(QTest::AI_Type, typeBuf);
|
||||
messageElement->addAttribute(QTest::AI_Description, message.toUtf8().constData());
|
||||
messageElement->addAttribute(QTest::AI_Message, message.toUtf8().constData());
|
||||
addTag(messageElement);
|
||||
|
||||
if (file)
|
||||
messageElement->addAttribute(QTest::AI_File, file);
|
||||
else
|
||||
messageElement->addAttribute(QTest::AI_File, "");
|
||||
|
||||
char buf[100];
|
||||
qsnprintf(buf, sizeof(buf), "%i", line);
|
||||
messageElement->addAttribute(QTest::AI_Line, buf);
|
||||
|
||||
currentLogElement->addLogElement(messageElement);
|
||||
++errorCounter;
|
||||
|
||||
// Also add the message to the system log (stdout/stderr), if one exists
|
||||
if (systemLogElement) {
|
||||
auto messageElement = new QTestElement(QTest::LET_Message);
|
||||
messageElement->addAttribute(QTest::AI_Description, message.toUtf8().constData());
|
||||
messageElement->addAttribute(QTest::AI_Message, message.toUtf8().constData());
|
||||
systemLogElement->addLogElement(messageElement);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,12 +72,13 @@ class QJUnitTestLogger : public QAbstractTestLogger
|
|||
|
||||
void addIncident(IncidentTypes type, const char *description,
|
||||
const char *file = nullptr, int line = 0) override;
|
||||
void addBenchmarkResult(const QBenchmarkResult &result) override;
|
||||
void addTag(QTestElement* element);
|
||||
|
||||
void addMessage(MessageTypes type, const QString &message,
|
||||
const char *file = nullptr, int line = 0) override;
|
||||
|
||||
void addBenchmarkResult(const QBenchmarkResult &) override {}
|
||||
|
||||
private:
|
||||
QTestElement *currentTestSuite = nullptr;
|
||||
QTestElement *listOfTestcases = nullptr;
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ QT_BEGIN_NAMESPACE
|
|||
|
||||
\value AI_Type
|
||||
|
||||
\value AI_Description
|
||||
\value AI_Message
|
||||
|
||||
\value AI_PropertyValue
|
||||
|
||||
|
|
@ -132,7 +132,7 @@ const char *QTestElementAttribute::name() const
|
|||
"failures",
|
||||
"errors",
|
||||
"type",
|
||||
"description",
|
||||
"message",
|
||||
"value",
|
||||
"qtestversion",
|
||||
"qtversion",
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ namespace QTest {
|
|||
AI_Failures = 3,
|
||||
AI_Errors = 4,
|
||||
AI_Type = 5,
|
||||
AI_Description = 6,
|
||||
AI_Message = 6,
|
||||
AI_PropertyValue = 7,
|
||||
AI_QTestVersion = 8,
|
||||
AI_QtVersion = 9,
|
||||
|
|
|
|||
|
|
@ -129,25 +129,16 @@ void QTestJUnitStreamer::formatAttributes(const QTestElement* element, const QTe
|
|||
&& (element->parentElement()->elementType() == QTest::LET_SystemOutput
|
||||
|| element->parentElement()->elementType() == QTest::LET_SystemError)) {
|
||||
|
||||
if (attrindex != QTest::AI_Description) return;
|
||||
if (attrindex != QTest::AI_Message) return;
|
||||
|
||||
QXmlTestLogger::xmlCdata(formatted, attribute->value());
|
||||
return;
|
||||
}
|
||||
|
||||
char const* key = nullptr;
|
||||
if (attrindex == QTest::AI_Description)
|
||||
key = "message";
|
||||
else if (attrindex != QTest::AI_File && attrindex != QTest::AI_Line)
|
||||
key = attribute->name();
|
||||
|
||||
if (key) {
|
||||
QTestCharBuffer quotedValue;
|
||||
QXmlTestLogger::xmlQuote("edValue, attribute->value());
|
||||
QTest::qt_asprintf(formatted, " %s=\"%s\"", key, quotedValue.constData());
|
||||
} else {
|
||||
formatted->data()[0] = '\0';
|
||||
}
|
||||
QTestCharBuffer quotedValue;
|
||||
QXmlTestLogger::xmlQuote("edValue, attribute->value());
|
||||
QTest::qt_asprintf(formatted, " %s=\"%s\"",
|
||||
attribute->name(), quotedValue.constData());
|
||||
}
|
||||
|
||||
void QTestJUnitStreamer::formatAfterAttributes(const QTestElement *element, QTestCharBuffer *formatted) const
|
||||
|
|
@ -197,21 +188,20 @@ void QTestJUnitStreamer::outputElements(QTestElement *element, bool) const
|
|||
while (element) {
|
||||
hasChildren = element->childElements();
|
||||
|
||||
if (element->elementType() != QTest::LET_Benchmark) {
|
||||
formatStart(element, &buf);
|
||||
outputString(buf.data());
|
||||
formatStart(element, &buf);
|
||||
outputString(buf.data());
|
||||
|
||||
outputElementAttributes(element, element->attributes());
|
||||
outputElementAttributes(element, element->attributes());
|
||||
|
||||
formatAfterAttributes(element, &buf);
|
||||
outputString(buf.data());
|
||||
formatAfterAttributes(element, &buf);
|
||||
outputString(buf.data());
|
||||
|
||||
if (hasChildren)
|
||||
outputElements(element->childElements(), true);
|
||||
if (hasChildren)
|
||||
outputElements(element->childElements(), true);
|
||||
|
||||
formatEnd(element, &buf);
|
||||
outputString(buf.data());
|
||||
|
||||
formatEnd(element, &buf);
|
||||
outputString(buf.data());
|
||||
}
|
||||
element = element->previousElement();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
<property name="QtBuild" value=""/>
|
||||
</properties>
|
||||
<testcase name="initTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="passingBenchmark" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="passingBenchmark" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="skippingBenchmark" time="@TEST_DURATION@">
|
||||
<!-- type="skip" message="This is a skipping benchmark" -->
|
||||
</testcase>
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
<property name="QtBuild" value=""/>
|
||||
</properties>
|
||||
<testcase name="initTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="events" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="events" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="cleanupTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<system-err/>
|
||||
</testsuite>
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
<property name="QtBuild" value=""/>
|
||||
</properties>
|
||||
<testcase name="initTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="threeEvents" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="threeEvents" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="cleanupTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<system-err/>
|
||||
</testsuite>
|
||||
|
|
@ -19,8 +18,7 @@
|
|||
<property name="QtBuild" value=""/>
|
||||
</properties>
|
||||
<testcase name="initTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="threeEvents" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="threeEvents" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="cleanupTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<system-err/>
|
||||
</testsuite>
|
||||
|
|
@ -32,8 +30,7 @@
|
|||
<property name="QtBuild" value=""/>
|
||||
</properties>
|
||||
<testcase name="initTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="threeEvents" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="threeEvents" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="cleanupTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<system-err/>
|
||||
</testsuite>
|
||||
|
|
|
|||
|
|
@ -6,8 +6,7 @@
|
|||
<property name="QtBuild" value=""/>
|
||||
</properties>
|
||||
<testcase name="initTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="threeBillionTicks" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="threeBillionTicks" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="cleanupTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<system-err/>
|
||||
</testsuite>
|
||||
|
|
|
|||
|
|
@ -6,12 +6,9 @@
|
|||
<property name="QtBuild" value=""/>
|
||||
</properties>
|
||||
<testcase name="initTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="waitForOneThousand" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="waitForFourThousand" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="qbenchmark_once" result="pass" time="@TEST_DURATION@">
|
||||
</testcase>
|
||||
<testcase name="waitForOneThousand" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="waitForFourThousand" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="qbenchmark_once" result="pass" time="@TEST_DURATION@"/>
|
||||
<testcase name="cleanupTestCase" result="pass" time="@TEST_DURATION@"/>
|
||||
<system-err/>
|
||||
</testsuite>
|
||||
|
|
|
|||
Loading…
Reference in New Issue