summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/text/qstring
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-05-22 16:47:19 +0200
committerLars Knoll <lars.knoll@qt.io>2020-06-01 20:43:21 +0200
commitaac39167b7903eea886d8638ab84296d4e8952f1 (patch)
tree5a44a583ad44169ea5e3fa5d6b8209d1e73759f7 /tests/auto/corelib/text/qstring
parent4f1ebf666e36020c501e6d3b20d70320b45ab2ec (diff)
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 <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests/auto/corelib/text/qstring')
-rw-r--r--tests/auto/corelib/text/qstring/tst_qstring.cpp50
1 files changed, 37 insertions, 13 deletions
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<QString>
{
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<QStringRef>
{
const QString &string;
- QVector<QStringRef> split(const QString &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); }
- QVector<QStringRef> split(QChar sep, QString::SplitBehavior behavior = QString::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); }
- QVector<QStringRef> split(const QRegularExpression &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts) const { return string.splitRef(sep, behavior); }
+ QVector<QStringRef> split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); }
+ QVector<QStringRef> split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const { return string.splitRef(sep, behavior, cs); }
+ QVector<QStringRef> split(const QRegularExpression &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const { return string.splitRef(sep, behavior); }
};
+template<> struct StringSplitWrapper<QStringView>
+{
+ const QString &string;
+ QList<QStringView> split(const QString &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ { return QStringView{string}.split(sep, behavior, cs); }
+ QList<QStringView> split(QChar sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const
+ { return QStringView{string}.split(sep, behavior, cs); }
+ QList<QStringView> split(const QRegularExpression &sep, Qt::SplitBehavior behavior = Qt::KeepEmptyParts) const
+ { return QStringView{string}.split(sep, behavior); }
+};
+
+static bool operator==(const QList<QStringView> &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<QStringRef> &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<QStringList>(str, sep, result);
+ split<QVector<QStringView>>(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<QStringList, QRegularExpression>(string, pattern, result);
+ split_regexp<QList<QStringView>, QRegularExpression>(string, pattern, result);
}
void tst_QString::splitRef_regularexpression_data()