summaryrefslogtreecommitdiffstats
path: root/src/testlib
diff options
context:
space:
mode:
authorTor Arne Vestbø <tor.arne.vestbo@qt.io>2021-08-03 14:27:45 +0200
committerTor Arne Vestbø <tor.arne.vestbo@qt.io>2021-08-12 21:37:09 +0200
commit484209f3022d6e3801e4a5d59d5ec7d551c5ea10 (patch)
tree246d3b2cd15e867476ea506301bcd02344fd9c57 /src/testlib
parentedeb1f74b885c53c3bc71ab21580b299ebc81cbb (diff)
testlib: Don't write redundant log message information in JUnit reporter
The separation between <system-out> and <system-err> is sufficient, and we can't expect consumers to interpret our custom comment format. The type of the text node has been renamed to more accurately identify its purpose. Change-Id: I63c8ff17529fc087e1b695698350a6711eb5e68d Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> (cherry picked from commit 4632be1b4d8c5037c83b7c006850da73b590180e) Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/testlib')
-rw-r--r--src/testlib/qjunittestlogger.cpp77
-rw-r--r--src/testlib/qtestelementattribute_p.h2
-rw-r--r--src/testlib/qtestjunitstreamer.cpp43
3 files changed, 29 insertions, 93 deletions
diff --git a/src/testlib/qjunittestlogger.cpp b/src/testlib/qjunittestlogger.cpp
index f8000b4302..4b5de7b7c0 100644
--- a/src/testlib/qjunittestlogger.cpp
+++ b/src/testlib/qjunittestlogger.cpp
@@ -270,9 +270,9 @@ void QJUnitTestLogger::addFailure(QTest::LogElementType elementType,
failureElement->addAttribute(QTest::AI_Message, message.toUtf8().constData());
if (!details.isEmpty()) {
- auto messageElement = new QTestElement(QTest::LET_Message);
- messageElement->addAttribute(QTest::AI_Message, details.toUtf8().constData());
- failureElement->addLogElement(messageElement);
+ auto textNode = new QTestElement(QTest::LET_Text);
+ textNode->addAttribute(QTest::AI_Value, details.toUtf8().constData());
+ failureElement->addLogElement(textNode);
}
currentTestCase->addLogElement(failureElement);
@@ -294,62 +294,29 @@ void QJUnitTestLogger::addMessage(MessageTypes type, const QString &message, con
skippedElement->addAttribute(QTest::AI_Message, message.toUtf8().constData());
currentTestCase->addLogElement(skippedElement);
return;
- }
-
- auto systemLogElement = systemOutputElement;
- const char *typeBuf = nullptr;
-
- switch (type) {
- case QAbstractTestLogger::Warn:
- systemLogElement = systemErrorElement;
- typeBuf = "warn";
- break;
- case QAbstractTestLogger::QCritical:
- systemLogElement = systemErrorElement;
- typeBuf = "qcritical";
- break;
- case QAbstractTestLogger::QDebug:
- typeBuf = "qdebug";
- break;
- case QAbstractTestLogger::QInfo:
- typeBuf = "qinfo";
- break;
- case QAbstractTestLogger::QWarning:
- systemLogElement = systemErrorElement;
- typeBuf = "qwarn";
- break;
- case QAbstractTestLogger::QFatal:
- systemLogElement = systemErrorElement;
- typeBuf = "qfatal";
- break;
- case QAbstractTestLogger::Skip:
- Q_UNREACHABLE();
- break;
- case QAbstractTestLogger::Info:
- typeBuf = "info";
- break;
- default:
- typeBuf = "??????";
- break;
- }
-
- if (type == QAbstractTestLogger::QFatal) {
- addFailure(QTest::LET_Error, typeBuf, message);
+ } else if (type == QAbstractTestLogger::QFatal) {
+ addFailure(QTest::LET_Error, "qfatal", message);
return;
}
- auto messageElement = new QTestElement(QTest::LET_Message);
- messageElement->addAttribute(QTest::AI_Type, typeBuf);
- messageElement->addAttribute(QTest::AI_Message, message.toUtf8().constData());
-
- currentTestCase->addLogElement(messageElement);
+ auto systemLogElement = [&]() {
+ switch (type) {
+ case QAbstractTestLogger::QDebug:
+ case QAbstractTestLogger::Info:
+ case QAbstractTestLogger::QInfo:
+ return systemOutputElement;
+ case QAbstractTestLogger::Warn:
+ case QAbstractTestLogger::QWarning:
+ case QAbstractTestLogger::QCritical:
+ return systemErrorElement;
+ default:
+ Q_UNREACHABLE();
+ }
+ }();
- // 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_Message, message.toUtf8().constData());
- systemLogElement->addLogElement(messageElement);
- }
+ auto textNode = new QTestElement(QTest::LET_Text);
+ textNode->addAttribute(QTest::AI_Value, message.toUtf8().constData());
+ systemLogElement->addLogElement(textNode);
}
QT_END_NAMESPACE
diff --git a/src/testlib/qtestelementattribute_p.h b/src/testlib/qtestelementattribute_p.h
index 6c49bda588..dd7d1c111a 100644
--- a/src/testlib/qtestelementattribute_p.h
+++ b/src/testlib/qtestelementattribute_p.h
@@ -94,7 +94,7 @@ namespace QTest {
LET_TestCase = 4,
LET_TestSuite = 5,
LET_Benchmark = 6,
- LET_Message = 7,
+ LET_Text = 7,
LET_SystemError = 8,
LET_SystemOutput = 9,
LET_Skipped = 10
diff --git a/src/testlib/qtestjunitstreamer.cpp b/src/testlib/qtestjunitstreamer.cpp
index 8176205cbb..d8c73505db 100644
--- a/src/testlib/qtestjunitstreamer.cpp
+++ b/src/testlib/qtestjunitstreamer.cpp
@@ -82,20 +82,8 @@ void QTestJUnitStreamer::formatStart(const QTestElement *element, QTestCharBuffe
char indent[20];
indentForElement(element, indent, sizeof(indent));
- // Messages/errors are written as CDATA within system-out, system-err,
- // error, and failure respectively, comments elsewhere
- if (element->elementType() == QTest::LET_Message) {
- switch (element->parentElement()->elementType()) {
- case QTest::LET_SystemOutput:
- case QTest::LET_SystemError:
- case QTest::LET_Failure:
- case QTest::LET_Error:
- QTest::qt_asprintf(formatted, "%s<![CDATA[", indent);
- break;
- default:
- QTest::qt_asprintf(formatted, "%s<!--", indent);
- break;
- }
+ if (element->elementType() == QTest::LET_Text) {
+ QTest::qt_asprintf(formatted, "%s<![CDATA[", indent);
return;
}
@@ -125,15 +113,8 @@ void QTestJUnitStreamer::formatAttributes(const QTestElement* element, const QTe
QTest::AttributeIndex attrindex = attribute->index();
- // For messages we only want to output the `message' attribute value
- if (element && element->elementType() == QTest::LET_Message
- && (element->parentElement()->elementType() == QTest::LET_SystemOutput
- || element->parentElement()->elementType() == QTest::LET_SystemError
- || element->parentElement()->elementType() == QTest::LET_Failure
- || element->parentElement()->elementType() == QTest::LET_Error)) {
-
- if (attrindex != QTest::AI_Message) return;
-
+ if (element && element->elementType() == QTest::LET_Text) {
+ QTEST_ASSERT(attrindex == QTest::AI_Value);
QXmlTestLogger::xmlCdata(formatted, attribute->value());
return;
}
@@ -149,20 +130,8 @@ void QTestJUnitStreamer::formatAfterAttributes(const QTestElement *element, QTes
if (!element || !formatted )
return;
- // Messages are written as CDATA within system-out, system-err,
- // error, and failure respectively, comments elsewhere
- if (element->elementType() == QTest::LET_Message) {
- switch (element->parentElement()->elementType()) {
- case QTest::LET_SystemOutput:
- case QTest::LET_SystemError:
- case QTest::LET_Failure:
- case QTest::LET_Error:
- QTest::qt_asprintf(formatted, "]]>\n");
- break;
- default:
- QTest::qt_asprintf(formatted, " -->\n");
- break;
- }
+ if (element->elementType() == QTest::LET_Text) {
+ QTest::qt_asprintf(formatted, "]]>\n");
return;
}