diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2021-08-03 14:27:45 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2021-08-12 21:37:09 +0200 |
commit | 484209f3022d6e3801e4a5d59d5ec7d551c5ea10 (patch) | |
tree | 246d3b2cd15e867476ea506301bcd02344fd9c57 /src/testlib | |
parent | edeb1f74b885c53c3bc71ab21580b299ebc81cbb (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.cpp | 77 | ||||
-rw-r--r-- | src/testlib/qtestelementattribute_p.h | 2 | ||||
-rw-r--r-- | src/testlib/qtestjunitstreamer.cpp | 43 |
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; } |