diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-01-18 17:10:03 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2018-02-16 17:27:55 +0000 |
commit | 9760f881c54e601c56d606b6fe276def9531a43d (patch) | |
tree | dff12c1fdfe6a7db384c7820d77cbec7b8571211 /src/testlib | |
parent | 21e5da2fe0a3c9450de60b846d2f0836e4455976 (diff) |
QTestlib: Add formatting for QFlags<>
Add formatting for registered enumerations based on QMetaEnum
and unregistered enumerations as hex values.
[ChangeLog][QtTest] QtTest now prints values of QFlags that failed to
compare with QCOMPARE.
Task-number: QTBUG-65845
Change-Id: I3eae6d20d3c0d72441ca6c4037d9a8dafa4b6357
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/testlib')
-rw-r--r-- | src/testlib/qtestcase.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index f38f7ed4df..2e50f4f44f 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -253,6 +253,22 @@ namespace QTest return nullptr; } + template<typename F> // Output QFlags of registered enumerations + inline typename std::enable_if<QtPrivate::IsQEnumHelper<F>::Value, char*>::type toString(QFlags<F> f) + { + const QMetaEnum me = QMetaEnum::fromType<F>(); + return qstrdup(me.valueToKeys(int(f)).constData()); + } + + template <typename F> // Fallback: Output hex value + inline typename std::enable_if<!QtPrivate::IsQEnumHelper<F>::Value, char*>::type toString(QFlags<F> 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)); + return msg; + } + } // namespace Internal template<typename T> |