diff options
Diffstat (limited to 'src/testlib/qtestcase.cpp')
-rw-r--r-- | src/testlib/qtestcase.cpp | 87 |
1 files changed, 77 insertions, 10 deletions
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 42795fade7..5648fedd63 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -1745,14 +1745,33 @@ void TestMethods::invokeTests(QObject *testObject) const QSignalDumper::endDump(); } +#if QT_DEPRECATED_SINCE(6, 8) +static const char *functionRefFormatter(const void *f) +{ + auto formatter = static_cast<const qxp::function_ref<const char *()> *>(f); + return (*formatter)(); +}; + bool reportResult(bool success, qxp::function_ref<const char *()> lhs, qxp::function_ref<const char *()> rhs, const char *lhsExpr, const char *rhsExpr, ComparisonOperation op, const char *file, int line) { - return QTestResult::reportResult(success, lhs, rhs, lhsExpr, rhsExpr, op, file, line); + return QTestResult::reportResult(success, &lhs, &rhs, + functionRefFormatter, functionRefFormatter, + lhsExpr, rhsExpr, op, file, line); } +#endif // QT_DEPRECATED_SINCE(6, 8) +bool reportResult(bool success, const void *lhs, const void *rhs, + const char *(*lhsFormatter)(const void*), + const char *(*rhsFormatter)(const void*), + const char *lhsExpr, const char *rhsExpr, + ComparisonOperation op, const char *file, int line) +{ + return QTestResult::reportResult(success, lhs, rhs, lhsFormatter, rhsFormatter, + lhsExpr, rhsExpr, op, file, line); +} } // namespace QTest static void initEnvironment() @@ -2183,6 +2202,19 @@ void QTest::ignoreMessage(QtMsgType type, const QRegularExpression &messagePatte #endif // QT_CONFIG(regularexpression) /*! + \since 6.8 + \overload failOnWarning() + + Appends a test failure to the test log if any warning is output. + + \sa failOnWarning() +*/ +void QTest::failOnWarning() +{ + return QTestLog::failOnWarning(); +} + +/*! \since 6.3 \overload failOnWarning() @@ -2228,7 +2260,17 @@ void QTest::failOnWarning(const char *message) \code void FileTest::init() { - QTest::failOnWarning(QRegularExpression(".?")); + QTest::failOnWarning( + QRegularExpression("QFile::.*: File(.*) already open")); + } + \endcode + + For the common case of failing on \e any warning pass no parameter: + + \code + void FileTest::init() + { + QTest::failOnWarning(); } \endcode @@ -2729,6 +2771,7 @@ bool QTest::compare_helper(bool success, const char *failureMsg, } #endif // QT_DEPRECATED_SINCE(6, 4) +#if QT_DEPRECATED_SINCE(6, 8) /*! \internal \since 6.4 This function is called by various specializations of QTest::qCompare @@ -2748,7 +2791,34 @@ bool QTest::compare_helper(bool success, const char *failureMsg, const char *actual, const char *expected, const char *file, int line) { - return QTestResult::reportResult(success, actualVal, expectedVal, actual, expected, + return QTestResult::reportResult(success, &actualVal, &expectedVal, + QTest::functionRefFormatter, + QTest::functionRefFormatter, actual, expected, + QTest::ComparisonOperation::CustomCompare, + file, line, failureMsg); +} +#endif // QT_DEPRECATED_SINCE(6, 8) + +/*! \internal + \since 6.8 + This function is called by various specializations of QTest::qCompare + to decide whether to report a failure and to produce verbose test output. + + The \a failureMsg parameter can be \c {nullptr}, in which case a default + message will be output if the compare fails. If the comparison succeeds, + \a failureMsg will not be output. +*/ + +bool QTest::compare_helper(bool success, const char *failureMsg, + const void *actualPtr, const void *expectedPtr, + const char *(*actualFormatter)(const void *), + const char *(*expectedFormatter)(const void *), + const char *actual, const char *expected, + const char *file, int line) +{ + return QTestResult::reportResult(success, actualPtr, expectedPtr, + actualFormatter, expectedFormatter, + actual, expected, QTest::ComparisonOperation::CustomCompare, file, line, failureMsg); } @@ -2794,9 +2864,10 @@ static bool floatingCompare(const T &actual, const T &expected) bool QTest::qCompare(qfloat16 const &t1, qfloat16 const &t2, const char *actual, const char *expected, const char *file, int line) { + auto formatter = Internal::genericToString<qfloat16>; return compare_helper(floatingCompare(t1, t2), "Compared qfloat16s are not the same (fuzzy compare)", - [&t1] { return toString(t1); }, [&t2] { return toString(t2); }, + &t1, &t2, formatter, formatter, actual, expected, file, line); } @@ -3061,11 +3132,6 @@ char *QTest::toString(const char *str) */ char *QTest::toString(const volatile void *p) // Use volatile to match compare_ptr_helper() { - return QTest::toString(const_cast<const void *>(p)); -} - -char *QTest::toString(const void *p) -{ char *msg = new char[128]; qsnprintf(msg, 128, "%p", p); return msg; @@ -3118,8 +3184,9 @@ char *QTest::toString(const volatile QObject *vo) bool QTest::compare_string_helper(const char *t1, const char *t2, const char *actual, const char *expected, const char *file, int line) { + auto formatter = Internal::genericToString<const char *>; return compare_helper(qstrcmp(t1, t2) == 0, "Compared strings are not the same", - [t1] { return toString(t1); }, [t2] { return toString(t2); }, + &t1, &t2, formatter, formatter, actual, expected, file, line); } |