From 4ae6f40b3a2e2fe4f617a1c911c8d066c18cdab9 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 11 Apr 2024 12:14:09 -0700 Subject: QTest: group all the toString() functionality in a single header It was split between qtest.h and qtestcase.h, so the QTest::toString() specializations were not available in qtestcase.h. And it was confusing. Change-Id: Ie28eadac333c4bcd8c08fffd17c54fafc8014cc7 Reviewed-by: Ivan Solovev Reviewed-by: Thiago Macieira --- src/testlib/qtestcase.h | 96 +------------------------------------------------ 1 file changed, 1 insertion(+), 95 deletions(-) (limited to 'src/testlib/qtestcase.h') diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index 632b06fed3..06fbd25c9c 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -5,6 +5,7 @@ #define QTESTCASE_H #include +#include #include #include @@ -318,9 +319,6 @@ do {\ class QObject; class QTestData; -#define QTEST_COMPARE_DECL(KLASS)\ - template<> Q_TESTLIB_EXPORT char *toString(const KLASS &); - namespace QTest { namespace Internal { @@ -332,78 +330,11 @@ namespace QTest Q_TESTLIB_EXPORT QString formatTryTimeoutDebugMessage(q_no_char8_t::QUtf8StringView expr, int timeout, int actual); - template // Output registered enums - inline typename std::enable_if::Value, char*>::type toString(T e) - { - QMetaEnum me = QMetaEnum::fromType(); - return qstrdup(me.valueToKey(int(e))); // int cast is necessary to support enum classes - } - - template - inline typename std::enable_if::Value && std::is_enum_v, char*>::type toString(const T &e) - { - return qstrdup(QByteArray::number(static_cast>(e)).constData()); - } - - template // Fallback; for built-in types debug streaming must be possible - inline typename std::enable_if::Value && !std::is_enum_v, char *>::type toString(const T &t) - { - char *result = nullptr; -#ifndef QT_NO_DEBUG_STREAM - if constexpr (QTypeTraits::has_ostream_operator_v) { - result = qstrdup(QDebug::toString(t).toUtf8().constData()); - } else { - static_assert(!QMetaTypeId2::IsBuiltIn, - "Built-in type must implement debug streaming operator " - "or provide QTest::toString specialization"); - } -#endif - return result; - } - - template // Output QFlags of registered enumerations - inline typename std::enable_if::Value, char*>::type toString(QFlags f) - { - const QMetaEnum me = QMetaEnum::fromType(); - return qstrdup(me.valueToKeys(int(f.toInt())).constData()); - } - - template // Fallback: Output hex value - inline typename std::enable_if::Value, char*>::type toString(QFlags f) - { - const size_t space = 3 + 2 * sizeof(unsigned); // 2 for 0x, two hex digits per byte, 1 for '\0' - char *msg = new char[space]; - qsnprintf(msg, space, "0x%x", unsigned(f.toInt())); - return msg; - } - // Exported so Qt Quick Test can also use it for generating backtraces upon crashes. Q_TESTLIB_EXPORT extern bool noCrashHandler; } // namespace Internal - template - inline char *toString(const T &t) - { - return Internal::toString(t); - } - - template - inline char *toString(const std::pair &pair); - - template - inline char *toString(const std::tuple &tuple); - - template - inline char *toString(std::chrono::duration duration); - - Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, qsizetype length); - Q_TESTLIB_EXPORT char *toPrettyCString(const char *unicode, qsizetype length); - Q_TESTLIB_EXPORT char *toPrettyUnicode(QStringView string); - Q_TESTLIB_EXPORT char *toString(const char *); - Q_TESTLIB_EXPORT char *toString(const volatile void *); - Q_TESTLIB_EXPORT char *toString(const volatile QObject *); - Q_TESTLIB_EXPORT void qInit(QObject *testObject, int argc = 0, char **argv = nullptr); Q_TESTLIB_EXPORT int qRun(); Q_TESTLIB_EXPORT void qCleanup(); @@ -620,30 +551,6 @@ namespace QTest actual, expected, file, line); } - Q_TESTLIB_EXPORT bool compare_string_helper(const char *t1, const char *t2, const char *actual, - const char *expected, const char *file, int line); - - Q_TESTLIB_EXPORT char *formatString(const char *prefix, const char *suffix, size_t numArguments, ...); - -#ifndef Q_QDOC - QTEST_COMPARE_DECL(short) - QTEST_COMPARE_DECL(ushort) - QTEST_COMPARE_DECL(int) - QTEST_COMPARE_DECL(uint) - QTEST_COMPARE_DECL(long) - QTEST_COMPARE_DECL(ulong) - QTEST_COMPARE_DECL(qint64) - QTEST_COMPARE_DECL(quint64) - - QTEST_COMPARE_DECL(float) - QTEST_COMPARE_DECL(double) - QTEST_COMPARE_DECL(qfloat16) - QTEST_COMPARE_DECL(char) - QTEST_COMPARE_DECL(signed char) - QTEST_COMPARE_DECL(unsigned char) - QTEST_COMPARE_DECL(bool) -#endif - template inline bool qCompare(const T1 &t1, const T2 &t2, const char *actual, const char *expected, const char *file, int line) @@ -743,7 +650,6 @@ namespace QTest ComparisonOperation op, const char *file, int line); } -#undef QTEST_COMPARE_DECL #define QWARN(msg) QTest::qWarn(static_cast(msg), __FILE__, __LINE__) -- cgit v1.2.3