From a2026e4116e325767b899505cf248a75b9647195 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Mon, 2 Aug 2021 14:29:28 +0200 Subject: testlib: Write failure details as content in JUnit reporter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pick-to: 6.2 Change-Id: Ica48769e7dfcabdc4bc8f0ed058bc22e29a0b632 Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Edward Welbourne --- src/testlib/qjunittestlogger.cpp | 15 +- src/testlib/qtestjunitstreamer.cpp | 17 +- .../testlib/selftests/expected_cmptest.junitxml | 280 ++++++++++++--------- .../testlib/selftests/expected_datetime.junitxml | 21 +- .../auto/testlib/selftests/expected_junit.junitxml | 7 +- .../testlib/selftests/expected_longstring.junitxml | 7 +- .../selftests/expected_pairdiagnostics.junitxml | 14 +- .../testlib/selftests/expected_strcmp.junitxml | 35 +-- .../testlib/selftests/expected_subtest.junitxml | 14 +- .../selftests/expected_tuplediagnostics.junitxml | 14 +- 10 files changed, 249 insertions(+), 175 deletions(-) diff --git a/src/testlib/qjunittestlogger.cpp b/src/testlib/qjunittestlogger.cpp index a120171c3a..10fe8fd81a 100644 --- a/src/testlib/qjunittestlogger.cpp +++ b/src/testlib/qjunittestlogger.cpp @@ -258,7 +258,20 @@ 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_Type, typeBuf); - failureElement->addAttribute(QTest::AI_Message, description); + + // Assume the first line is the message, and the remainder are details + QString descriptionString = QString::fromUtf8(description); + QString message = descriptionString.section(QLatin1Char('\n'), 0, 0); + QString details = descriptionString.section(QLatin1Char('\n'), 1); + + 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); + } + currentLogElement->addLogElement(failureElement); } diff --git a/src/testlib/qtestjunitstreamer.cpp b/src/testlib/qtestjunitstreamer.cpp index 96757f0768..8176205cbb 100644 --- a/src/testlib/qtestjunitstreamer.cpp +++ b/src/testlib/qtestjunitstreamer.cpp @@ -83,11 +83,13 @@ void QTestJUnitStreamer::formatStart(const QTestElement *element, QTestCharBuffe indentForElement(element, indent, sizeof(indent)); // Messages/errors are written as CDATA within system-out, system-err, - // respectively, comments elsewhere + // 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, "%sindex(); - // For messages/errors within system-out, system-err, respectively, - // we only want to output `message' + // 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_SystemError + || element->parentElement()->elementType() == QTest::LET_Failure + || element->parentElement()->elementType() == QTest::LET_Error)) { if (attrindex != QTest::AI_Message) return; @@ -146,12 +149,14 @@ void QTestJUnitStreamer::formatAfterAttributes(const QTestElement *element, QTes if (!element || !formatted ) return; - // Messages/errors are written as CDATA within system-out, system-err, - // respectively, comments elsewhere + // 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: diff --git a/tests/auto/testlib/selftests/expected_cmptest.junitxml b/tests/auto/testlib/selftests/expected_cmptest.junitxml index 153e3878b4..cc1e443205 100644 --- a/tests/auto/testlib/selftests/expected_cmptest.junitxml +++ b/tests/auto/testlib/selftests/expected_cmptest.junitxml @@ -7,228 +7,268 @@ - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + ) + Expected (expected): QVariant(PhonyClass,)]]> + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + - + + + diff --git a/tests/auto/testlib/selftests/expected_datetime.junitxml b/tests/auto/testlib/selftests/expected_datetime.junitxml index 610fc13e34..989ebcce34 100644 --- a/tests/auto/testlib/selftests/expected_datetime.junitxml +++ b/tests/auto/testlib/selftests/expected_datetime.junitxml @@ -7,20 +7,23 @@ - + + + - + + + - + + + diff --git a/tests/auto/testlib/selftests/expected_junit.junitxml b/tests/auto/testlib/selftests/expected_junit.junitxml index bd2428738a..5ee63b5d92 100644 --- a/tests/auto/testlib/selftests/expected_junit.junitxml +++ b/tests/auto/testlib/selftests/expected_junit.junitxml @@ -11,9 +11,10 @@ - + + + diff --git a/tests/auto/testlib/selftests/expected_longstring.junitxml b/tests/auto/testlib/selftests/expected_longstring.junitxml index 613e38688d..67136d4c5e 100644 --- a/tests/auto/testlib/selftests/expected_longstring.junitxml +++ b/tests/auto/testlib/selftests/expected_longstring.junitxml @@ -7,15 +7,16 @@ - + +Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc, eu sollicitudin urna dolor sagittis lacus. Donec elit libero, sodales nec, volutpat a, suscipit non, turpis. Nullam sagittis. Suspendisse pulvinar, augue ac venenatis condimentum, sem libero volutpat nibh, nec pellentesque velit pede quis nunc. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce id purus. Ut varius tincidunt libero. Phasellus dolor. Maecenas vestibulum mollis diam. Pellentesque ut neque. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.]]> + diff --git a/tests/auto/testlib/selftests/expected_pairdiagnostics.junitxml b/tests/auto/testlib/selftests/expected_pairdiagnostics.junitxml index b3c115fa48..dfd51a9738 100644 --- a/tests/auto/testlib/selftests/expected_pairdiagnostics.junitxml +++ b/tests/auto/testlib/selftests/expected_pairdiagnostics.junitxml @@ -7,14 +7,16 @@ - + + + - + + + diff --git a/tests/auto/testlib/selftests/expected_strcmp.junitxml b/tests/auto/testlib/selftests/expected_strcmp.junitxml index 96ecd6007f..480514adc7 100644 --- a/tests/auto/testlib/selftests/expected_strcmp.junitxml +++ b/tests/auto/testlib/selftests/expected_strcmp.junitxml @@ -11,29 +11,34 @@ - + + + - + + + - + + + - + + + - + + + diff --git a/tests/auto/testlib/selftests/expected_subtest.junitxml b/tests/auto/testlib/selftests/expected_subtest.junitxml index a6a3709eda..f5b7bde44d 100644 --- a/tests/auto/testlib/selftests/expected_subtest.junitxml +++ b/tests/auto/testlib/selftests/expected_subtest.junitxml @@ -44,17 +44,19 @@ - + + + - + + + diff --git a/tests/auto/testlib/selftests/expected_tuplediagnostics.junitxml b/tests/auto/testlib/selftests/expected_tuplediagnostics.junitxml index 9c97826828..e727322307 100644 --- a/tests/auto/testlib/selftests/expected_tuplediagnostics.junitxml +++ b/tests/auto/testlib/selftests/expected_tuplediagnostics.junitxml @@ -8,14 +8,16 @@ - + + {1}): std::tuple(1) + Expected (std::tuple{2}): std::tuple(2)]]> + - + + + -- cgit v1.2.3