From 09f6227653b192c1a062c52f41eb36c3ab35fc25 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Fri, 21 Apr 2017 12:13:21 +0200 Subject: QtTest: add support for printing QStringViews [ChangeLog][QtTest][QCOMPARE] Now supports printing QStringViews in case of test failures. Change-Id: I4dc2542cd1013fd63c094c249e721d7102387bde Reviewed-by: Edward Welbourne Reviewed-by: Thiago Macieira --- src/testlib/qtest.h | 7 ++++++- src/testlib/qtestcase.cpp | 14 +++++++++++++- src/testlib/qtestcase.h | 2 +- 3 files changed, 20 insertions(+), 3 deletions(-) (limited to 'src/testlib') diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h index 30aadfba92..4abba93721 100644 --- a/src/testlib/qtest.h +++ b/src/testlib/qtest.h @@ -65,9 +65,14 @@ QT_BEGIN_NAMESPACE namespace QTest { +template <> inline char *toString(const QStringView &str) +{ + return QTest::toPrettyUnicode(str); +} + template<> inline char *toString(const QString &str) { - return QTest::toPrettyUnicode(reinterpret_cast(str.constData()), str.length()); + return toString(QStringView(str)); } template<> inline char *toString(const QLatin1String &str) diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp index 8b0820b941..1470f3cf91 100644 --- a/src/testlib/qtestcase.cpp +++ b/src/testlib/qtestcase.cpp @@ -1271,6 +1271,16 @@ char *toPrettyCString(const char *p, int length) return buffer.take(); } +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) +// this used to be the signature up to and including Qt 5.9 +// keep it for BC reasons: +Q_TESTLIB_EXPORT +char *toPrettyUnicode(const ushort *p, int length) +{ + return toPrettyUnicode(QStringView(p, length)); +} +#endif + /*! \internal Returns the same QString but with only the ASCII characters still shown; @@ -1278,8 +1288,10 @@ char *toPrettyCString(const char *p, int length) Similar to QDebug::putString(). */ -char *toPrettyUnicode(const ushort *p, int length) +char *toPrettyUnicode(QStringView string) { + auto p = reinterpret_cast(string.utf16()); + auto length = string.size(); // keep it simple for the vast majority of cases bool trimmed = false; QScopedArrayPointer buffer(new char[256]); diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h index 3e2dab307a..1b160bd0cd 100644 --- a/src/testlib/qtestcase.h +++ b/src/testlib/qtestcase.h @@ -277,7 +277,7 @@ namespace QTest Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length); Q_TESTLIB_EXPORT char *toPrettyCString(const char *unicode, int length); - Q_TESTLIB_EXPORT char *toPrettyUnicode(const ushort *unicode, int length); + Q_TESTLIB_EXPORT char *toPrettyUnicode(QStringView string); Q_TESTLIB_EXPORT char *toString(const char *); Q_TESTLIB_EXPORT char *toString(const void *); -- cgit v1.2.3