summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/corelib/tools/qstring/tst_qstring.cpp138
1 files changed, 123 insertions, 15 deletions
diff --git a/tests/auto/corelib/tools/qstring/tst_qstring.cpp b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
index 37cb3754d3..2b2b436015 100644
--- a/tests/auto/corelib/tools/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/tools/qstring/tst_qstring.cpp
@@ -76,6 +76,10 @@ class tst_QString : public QObject
{
Q_OBJECT
+ template<typename List, class RegExp>
+ void split_regexp(const QString &string, const QString &pattern, QStringList result);
+ template<typename List>
+ void split(const QString &string, const QString &separator, QStringList result);
public:
tst_QString();
public slots:
@@ -221,6 +225,14 @@ private slots:
void split();
void split_regexp_data();
void split_regexp();
+ void split_regularexpression_data();
+ void split_regularexpression();
+ void splitRef_data();
+ void splitRef();
+ void splitRef_regexp_data();
+ void splitRef_regexp();
+ void splitRef_regularexpression_data();
+ void splitRef_regularexpression();
void fromUtf16_data();
void fromUtf16();
void fromUtf16_char16_data();
@@ -4989,16 +5001,49 @@ void tst_QString::split_data()
QTest::newRow("sep-empty") << "abc" << "" << (QStringList() << "" << "a" << "b" << "c" << "");
}
-void tst_QString::split()
+template<class> struct StringSplitWrapper;
+template<> struct StringSplitWrapper<QString>
{
- QFETCH(QString, str);
- QFETCH(QString, sep);
- QFETCH(QStringList, result);
+ 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 QRegExp &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts) const { return string.split(sep, behavior); }
+ QStringList split(const QRegularExpression &sep, QString::SplitBehavior behavior = QString::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 QRegExp &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts) const { return string.splitRef(sep, behavior); }
+ QVector<QStringRef> split(const QRegularExpression &sep, QString::SplitBehavior behavior = QString::KeepEmptyParts) const { return string.splitRef(sep, behavior); }
+};
+static bool operator ==(const QStringList &left, const QVector<QStringRef> &right)
+{
+ if (left.size() != right.size())
+ return false;
+
+ QStringList::const_iterator iLeft = left.constBegin();
+ QVector<QStringRef>::const_iterator iRight = right.constBegin();
+ for (; iLeft != left.end(); ++iLeft, ++iRight) {
+ if (*iLeft != *iRight)
+ return false;
+ }
+ return true;
+}
+static inline bool operator ==(const QVector<QStringRef> &left, const QStringList &right) { return right == left; }
+
+template<class List>
+void tst_QString::split(const QString &string, const QString &sep, QStringList result)
+{
QRegExp rx = QRegExp(QRegExp::escape(sep));
QRegularExpression re(QRegularExpression::escape(sep));
- QStringList list;
+ List list;
+ StringSplitWrapper<typename List::value_type> str = {string};
list = str.split(sep);
QVERIFY(list == result);
@@ -5035,6 +5080,27 @@ void tst_QString::split()
}
}
+void tst_QString::split()
+{
+ QFETCH(QString, str);
+ QFETCH(QString, sep);
+ QFETCH(QStringList, result);
+ split<QStringList>(str, sep, result);
+}
+
+void tst_QString::splitRef_data()
+{
+ split_data();
+}
+
+void tst_QString::splitRef()
+{
+ QFETCH(QString, str);
+ QFETCH(QString, sep);
+ QFETCH(QStringList, result);
+ split<QVector<QStringRef> >(str, sep, result);
+}
+
void tst_QString::split_regexp_data()
{
QTest::addColumn<QString>("string");
@@ -5054,24 +5120,66 @@ void tst_QString::split_regexp_data()
<< (QStringList() << "" << "Now" << ": " << "this" << " " << "sentence" << " " << "fragment" << ".");
}
+template<class List, class RegExp>
+void tst_QString::split_regexp(const QString &_string, const QString &pattern, QStringList result)
+{
+ List list;
+ StringSplitWrapper<typename List::value_type> string = {_string};
+
+ list = string.split(RegExp(pattern));
+ QVERIFY(list == result);
+
+ result.removeAll(QString());
+
+ list = string.split(RegExp(pattern), QString::SkipEmptyParts);
+ QVERIFY(list == result);
+}
+
void tst_QString::split_regexp()
{
QFETCH(QString, string);
QFETCH(QString, pattern);
QFETCH(QStringList, result);
+ split_regexp<QStringList, QRegExp>(string, pattern, result);
+}
- QStringList list;
- list = string.split(QRegExp(pattern));
- QCOMPARE(list, result);
- list = string.split(QRegularExpression(pattern));
- QCOMPARE(list, result);
+void tst_QString::split_regularexpression_data()
+{
+ split_regexp_data();
+}
- result.removeAll(QString());
+void tst_QString::split_regularexpression()
+{
+ QFETCH(QString, string);
+ QFETCH(QString, pattern);
+ QFETCH(QStringList, result);
+ split_regexp<QStringList, QRegularExpression>(string, pattern, result);
+}
- list = string.split(QRegExp(pattern), QString::SkipEmptyParts);
- QCOMPARE(list, result);
- list = string.split(QRegularExpression(pattern), QString::SkipEmptyParts);
- QCOMPARE(list, result);
+void tst_QString::splitRef_regularexpression_data()
+{
+ split_regexp_data();
+}
+
+void tst_QString::splitRef_regularexpression()
+{
+ QFETCH(QString, string);
+ QFETCH(QString, pattern);
+ QFETCH(QStringList, result);
+ split_regexp<QVector<QStringRef>, QRegularExpression>(string, pattern, result);
+}
+
+void tst_QString::splitRef_regexp_data()
+{
+ split_regexp_data();
+}
+
+void tst_QString::splitRef_regexp()
+{
+ QFETCH(QString, string);
+ QFETCH(QString, pattern);
+ QFETCH(QStringList, result);
+ split_regexp<QVector<QStringRef>, QRegExp>(string, pattern, result);
}
void tst_QString::fromUtf16_data()