From 9760f881c54e601c56d606b6fe276def9531a43d Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 18 Jan 2018 17:10:03 +0100 Subject: 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 Reviewed-by: Edward Welbourne --- src/testlib/qtestcase.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src/testlib') 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 // 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)).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)); + return msg; + } + } // namespace Internal template -- cgit v1.2.3