diff options
Diffstat (limited to 'src/testlib/qtestresult.cpp')
-rw-r--r-- | src/testlib/qtestresult.cpp | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/src/testlib/qtestresult.cpp b/src/testlib/qtestresult.cpp index 14d344f381..556cafd4d4 100644 --- a/src/testlib/qtestresult.cpp +++ b/src/testlib/qtestresult.cpp @@ -321,43 +321,47 @@ static const char *rightArgNameForOp(QTest::ComparisonOperation op) return op == QTest::ComparisonOperation::CustomCompare ? "Expected " : "Right "; } -// Format failures using the toString() template -template <class Actual, class Expected> +// Overload to format failures for "const char *" - no need to strdup(). void formatFailMessage(char *msg, size_t maxMsgLen, const char *failureMsg, - const Actual &val1, const Expected &val2, + const char *val1, const char *val2, const char *actual, const char *expected, QTest::ComparisonOperation op) { - auto val1S = QTest::toString(val1); - auto val2S = QTest::toString(val2); - size_t len1 = mbstowcs(nullptr, actual, maxMsgLen); // Last parameter is not ignored on QNX size_t len2 = mbstowcs(nullptr, expected, maxMsgLen); // (result is never larger than this). - qsnprintf(msg, maxMsgLen, "%s\n %s(%s)%*s %s\n %s(%s)%*s %s", failureMsg, - leftArgNameForOp(op), actual, qMax(len1, len2) - len1 + 1, ":", - val1S ? val1S : "<null>", - rightArgNameForOp(op), expected, qMax(len1, len2) - len2 + 1, ":", - val2S ? val2S : "<null>"); - - delete [] val1S; - delete [] val2S; + const int written = qsnprintf(msg, maxMsgLen, "%s\n", failureMsg); + msg += written; + maxMsgLen -= written; + + if (val1 || val2) { + qsnprintf(msg, maxMsgLen, " %s(%s)%*s %s\n %s(%s)%*s %s", + leftArgNameForOp(op), actual, qMax(len1, len2) - len1 + 1, ":", + val1 ? val1 : "<null>", + rightArgNameForOp(op), expected, qMax(len1, len2) - len2 + 1, ":", + val2 ? val2 : "<null>"); + } else { + // only print variable names if neither value can be represented as a string + qsnprintf(msg, maxMsgLen, " %s: %s\n %s: %s", + leftArgNameForOp(op), actual, rightArgNameForOp(op), expected); + } } -// Overload to format failures for "const char *" - no need to strdup(). +// Format failures using the toString() template +template <class Actual, class Expected> void formatFailMessage(char *msg, size_t maxMsgLen, const char *failureMsg, - const char *val1, const char *val2, + const Actual &val1, const Expected &val2, const char *actual, const char *expected, QTest::ComparisonOperation op) { - size_t len1 = mbstowcs(nullptr, actual, maxMsgLen); // Last parameter is not ignored on QNX - size_t len2 = mbstowcs(nullptr, expected, maxMsgLen); // (result is never larger than this). - qsnprintf(msg, maxMsgLen, "%s\n %s(%s)%*s %s\n %s(%s)%*s %s", failureMsg, - leftArgNameForOp(op), actual, qMax(len1, len2) - len1 + 1, ":", - val1 ? val1 : "<null>", - rightArgNameForOp(op), expected, qMax(len1, len2) - len2 + 1, ":", - val2 ? val2 : "<null>"); + const char *val1S = QTest::toString(val1); + const char *val2S = QTest::toString(val2); + + formatFailMessage(msg, maxMsgLen, failureMsg, val1S, val2S, actual, expected, op); + + delete [] val1S; + delete [] val2S; } template <class Actual, class Expected> |