diff options
Diffstat (limited to 'tests/auto/corelib/tools/qstring/tst_qstring.cpp')
-rw-r--r-- | tests/auto/corelib/tools/qstring/tst_qstring.cpp | 138 |
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() |