From ce0b76731042412a0fa5a5f633fc48a52f79ef81 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Wed, 2 Dec 2020 12:31:41 +0100 Subject: QStringView: add some QRegularExpression-related overloads [ChangeLog][QtCore][QStringView] Added the indexOf(), contains(), lastIndexOf() and count() methods taking a QRegularExpression. Fixes: QTBUG-89050 Change-Id: Ic726754f67e06b3764302d2fad252e0378a77afc Reviewed-by: Thiago Macieira --- .../qstringapisymmetry/tst_qstringapisymmetry.cpp | 207 +++++++++++++++++++++ 1 file changed, 207 insertions(+) (limited to 'tests/auto/corelib/text') diff --git a/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp b/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp index 7a3448fdd6..58a3b56b68 100644 --- a/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp +++ b/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp @@ -830,6 +830,16 @@ private Q_SLOTS: void lastIndexOf_QStringView_QChar() { lastIndexOf_impl(); } void lastIndexOf_QStringView_char16_t_data() { lastIndexOf_data(false); } void lastIndexOf_QStringView_char16_t() { lastIndexOf_impl(); } + +private: + void indexOf_contains_lastIndexOf_count_regexp_data(); + template void indexOf_contains_lastIndexOf_count_regexp_impl() const; + +private Q_SLOTS: + void indexOf_regexp_QString_data() { indexOf_contains_lastIndexOf_count_regexp_data(); } + void indexOf_regexp_QString() { indexOf_contains_lastIndexOf_count_regexp_impl(); } + void indexOf_regexp_QStringView_data() { indexOf_contains_lastIndexOf_count_regexp_data(); } + void indexOf_regexp_QStringView() { indexOf_contains_lastIndexOf_count_regexp_impl(); } }; void tst_QStringApiSymmetry::compare_data(bool hasConceptOfNullAndEmpty) @@ -2496,6 +2506,203 @@ void tst_QStringApiSymmetry::lastIndexOf_impl() const } +void tst_QStringApiSymmetry::indexOf_contains_lastIndexOf_count_regexp_data() +{ + QTest::addColumn("subject"); + QTest::addColumn("regexp"); + QTest::addColumn("leftFrom"); + QTest::addColumn("indexOf"); + QTest::addColumn("count"); + QTest::addColumn("rightFrom"); + QTest::addColumn("lastIndexOf"); + + const auto ROW = [](const char *subject, + const char *pattern, + QRegularExpression::PatternOptions options, + qsizetype leftFrom, qsizetype indexOf, qsizetype count, + qsizetype rightFrom, qsizetype lastIndexOf) + { + QTest::addRow("subject \"%s\" pattern \"%s\" options %d leftFrom %d rightFrom %d", + subject, pattern, (int)options, (int)leftFrom, (int)rightFrom) + << subject + << QRegularExpression(pattern, options) + << leftFrom + << indexOf + << count + << rightFrom + << lastIndexOf; + }; + + ROW("", "", QRegularExpression::NoPatternOption, 0, 0, 1, -1, 0); + ROW("test", "", QRegularExpression::NoPatternOption, 0, 0, 5, -1, 4); + ROW("", "^", QRegularExpression::NoPatternOption, 0, 0, 1, -1, 0); + ROW("", "$", QRegularExpression::NoPatternOption, 0, 0, 1, -1, 0); + ROW("", "^$", QRegularExpression::NoPatternOption, 0, 0, 1, -1, 0); + ROW("", "x", QRegularExpression::NoPatternOption, 0, -1, 0, -1, -1); + ROW("", "^x", QRegularExpression::NoPatternOption, 0, -1, 0, -1, -1); + ROW("", "x$", QRegularExpression::NoPatternOption, 0, -1, 0, -1, -1); + ROW("", "^x$", QRegularExpression::NoPatternOption, 0, -1, 0, -1, -1); + + ROW("test", "e", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "e", QRegularExpression::NoPatternOption, 0, 1, 1, -2, 1); + ROW("test", "es", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "es", QRegularExpression::NoPatternOption, 0, 1, 1, -2, 1); + ROW("test", "es?", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "es?", QRegularExpression::NoPatternOption, 0, 1, 1, -2, 1); + ROW("test", "es+", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "es+", QRegularExpression::NoPatternOption, 0, 1, 1, -2, 1); + ROW("test", "e.", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "e.", QRegularExpression::NoPatternOption, 0, 1, 1, -2, 1); + ROW("test", "e.*", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "e.*", QRegularExpression::NoPatternOption, 0, 1, 1, -2, 1); + ROW("test", "e(?=s)", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "e(?!x)", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "ex?s", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "(?<=t)e", QRegularExpression::NoPatternOption, 0, 1, 1, -1, 1); + ROW("test", "(? +void tst_QStringApiSymmetry::indexOf_contains_lastIndexOf_count_regexp_impl() const +{ + QFETCH(QString, subject); + QFETCH(QRegularExpression, regexp); + QFETCH(qsizetype, leftFrom); + QFETCH(qsizetype, indexOf); + QFETCH(qsizetype, count); + QFETCH(qsizetype, rightFrom); + QFETCH(qsizetype, lastIndexOf); + + // indexOf + String s = subject; + qsizetype result = s.indexOf(regexp, leftFrom); + QCOMPARE(result, indexOf); + + // contains + if (result >= 0) + QVERIFY(s.contains(regexp)); + else if (leftFrom == 0) + QVERIFY(!s.contains(regexp)); + + // count + if (leftFrom >= 0) + QCOMPARE(s.mid(leftFrom).count(regexp), count); + else + QCOMPARE(s.mid(leftFrom + s.size()).count(regexp), count); + + // lastIndexOf + result = s.lastIndexOf(regexp, rightFrom); + QCOMPARE(result, lastIndexOf); +} + QTEST_APPLESS_MAIN(tst_QStringApiSymmetry) #include "tst_qstringapisymmetry.moc" -- cgit v1.2.3