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 <edward.welbourne@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Marc Mutz 2017-04-21 12:13:21 +02:00
parent ff93eddfd5
commit 09f6227653
4 changed files with 28 additions and 9 deletions

View File

@ -65,9 +65,14 @@ QT_BEGIN_NAMESPACE
namespace QTest namespace QTest
{ {
template <> inline char *toString(const QStringView &str)
{
return QTest::toPrettyUnicode(str);
}
template<> inline char *toString(const QString &str) template<> inline char *toString(const QString &str)
{ {
return QTest::toPrettyUnicode(reinterpret_cast<const ushort *>(str.constData()), str.length()); return toString(QStringView(str));
} }
template<> inline char *toString(const QLatin1String &str) template<> inline char *toString(const QLatin1String &str)

View File

@ -1271,6 +1271,16 @@ char *toPrettyCString(const char *p, int length)
return buffer.take(); 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 \internal
Returns the same QString but with only the ASCII characters still shown; 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(). Similar to QDebug::putString().
*/ */
char *toPrettyUnicode(const ushort *p, int length) char *toPrettyUnicode(QStringView string)
{ {
auto p = reinterpret_cast<const ushort *>(string.utf16());
auto length = string.size();
// keep it simple for the vast majority of cases // keep it simple for the vast majority of cases
bool trimmed = false; bool trimmed = false;
QScopedArrayPointer<char> buffer(new char[256]); QScopedArrayPointer<char> buffer(new char[256]);

View File

@ -277,7 +277,7 @@ namespace QTest
Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length); Q_TESTLIB_EXPORT char *toHexRepresentation(const char *ba, int length);
Q_TESTLIB_EXPORT char *toPrettyCString(const char *unicode, 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 char *);
Q_TESTLIB_EXPORT char *toString(const void *); Q_TESTLIB_EXPORT char *toString(const void *);

View File

@ -429,6 +429,8 @@ void tst_QStringView::conversion_tests(String string) const
sv.crbegin())); sv.crbegin()));
QVERIFY(std::equal(help::crbegin(string), help::crend(string), QVERIFY(std::equal(help::crbegin(string), help::crend(string),
sv.rbegin())); sv.rbegin()));
QCOMPARE(sv, string);
} }
QStringView sv; QStringView sv;
@ -441,8 +443,8 @@ void tst_QStringView::conversion_tests(String string) const
// check relational operators: // check relational operators:
QVERIFY(sv == string); QCOMPARE(sv, string);
QVERIFY(string == sv); QCOMPARE(string, sv);
QVERIFY(!(sv != string)); QVERIFY(!(sv != string));
QVERIFY(!(string != sv)); QVERIFY(!(string != sv));
@ -461,16 +463,16 @@ void tst_QStringView::conversion_tests(String string) const
// copy-construct from rvalue (QStringView never assumes ownership): // copy-construct from rvalue (QStringView never assumes ownership):
{ {
QStringView sv2 = std::move(string); QStringView sv2 = std::move(string);
QVERIFY(sv2 == sv); QCOMPARE(sv2, sv);
QVERIFY(sv2 == string); QCOMPARE(sv2, string);
} }
// copy-assign from rvalue (QStringView never assumes ownership): // copy-assign from rvalue (QStringView never assumes ownership):
{ {
QStringView sv2; QStringView sv2;
sv2 = std::move(string); sv2 = std::move(string);
QVERIFY(sv2 == sv); QCOMPARE(sv2, sv);
QVERIFY(sv2 == string); QCOMPARE(sv2, string);
} }
} }