From aac39167b7903eea886d8638ab84296d4e8952f1 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Fri, 22 May 2020 16:47:19 +0200 Subject: Add QStringView::split() methods Since QString::split() is not going away in Qt 6, we should aim to provide API symmetry here, and ease porting existing code from QString(Ref) to use QStringView. This is easier than having to port everything to use tokenize() at the same time. tokenize() will however lead to better performance and thus should be preferred. Change-Id: I1eb43300a90167c6e9389ab56f416f2bf7edf506 Reviewed-by: Volker Hilsheimer --- tests/auto/corelib/text/qstring/tst_qstring.cpp | 50 ++++++++++++++++++------- 1 file changed, 37 insertions(+), 13 deletions(-) (limited to 'tests/auto/corelib/text/qstring/tst_qstring.cpp') diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index ef93c732ac..0501a5765d 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -5685,19 +5685,41 @@ template<> struct StringSplitWrapper { const QString &string; - QStringList split(const QString &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.split(sep, behavior, cs); } - QStringList split(QChar sep, QString::SplitBehavior behavior = QString::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.split(sep, behavior, cs); } - QStringList split(const QRegularExpression &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts) const { return string.split(sep, behavior); } + QStringList split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.split(sep, behavior, cs); } + QStringList split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.split(sep, behavior, cs); } + QStringList split(const QRegularExpression &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const { return string.split(sep, behavior); } }; template<> struct StringSplitWrapper { const QString &string; - QVector split(const QString &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); } - QVector split(QChar sep, QString::SplitBehavior behavior = QString::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); } - QVector split(const QRegularExpression &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts) const { return string.splitRef(sep, behavior); } + QVector split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); } + QVector split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); } + QVector split(const QRegularExpression &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const { return string.splitRef(sep, behavior); } }; +template<> struct StringSplitWrapper +{ + const QString &string; + QList split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const + { return QStringView{string}.split(sep, behavior, cs); } + QList split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const + { return QStringView{string}.split(sep, behavior, cs); } + QList split(const QRegularExpression &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const + { return QStringView{string}.split(sep, behavior); } +}; + +static bool operator==(const QList &result, const QStringList &expected) +{ + if (expected.size() != result.size()) + return false; + for (int i = 0; i < expected.size(); ++i) + if (expected.at(i) != result.at(i)) + return false; + return true; +} + + static bool operator ==(const QStringList &left, const QVector &right) { if (left.size() != right.size()) @@ -5732,22 +5754,22 @@ void tst_QString::split(const QString &string, const QString &sep, QStringList r QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED - list = str.split(sep, QString::KeepEmptyParts); + list = str.split(sep, Qt::KeepEmptyParts); QVERIFY(list == result); - list = str.split(re, QString::KeepEmptyParts); + list = str.split(re, Qt::KeepEmptyParts); QVERIFY(list == result); if (sep.size() == 1) { - list = str.split(sep.at(0), QString::KeepEmptyParts); + list = str.split(sep.at(0), Qt::KeepEmptyParts); QVERIFY(list == result); } result.removeAll(""); - list = str.split(sep, QString::SkipEmptyParts); + list = str.split(sep, Qt::SkipEmptyParts); QVERIFY(list == result); - list = str.split(re, QString::SkipEmptyParts); + list = str.split(re, Qt::SkipEmptyParts); QVERIFY(list == result); if (sep.size() == 1) { - list = str.split(sep.at(0), QString::SkipEmptyParts); + list = str.split(sep.at(0), Qt::SkipEmptyParts); QVERIFY(list == result); } QT_WARNING_POP @@ -5759,6 +5781,7 @@ void tst_QString::split() QFETCH(QString, sep); QFETCH(QStringList, result); split(str, sep, result); + split>(str, sep, result); } void tst_QString::splitRef_data() @@ -5804,7 +5827,7 @@ void tst_QString::split_regexp(const QString &_string, const QString &pattern, Q result.removeAll(QString()); - list = string.split(RegExp(pattern), QString::SkipEmptyParts); + list = string.split(RegExp(pattern), Qt::SkipEmptyParts); QVERIFY(list == result); } @@ -5814,6 +5837,7 @@ void tst_QString::split_regularexpression() QFETCH(QString, pattern); QFETCH(QStringList, result); split_regexp(string, pattern, result); + split_regexp, QRegularExpression>(string, pattern, result); } void tst_QString::splitRef_regularexpression_data() -- cgit v1.2.3