forked from qt-creator/qt-creator
Utils: Add stringutils splitAtFirst
Change-Id: I221d6c6086f53ec5f94c1157ea533d862db38d52 Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -527,4 +527,23 @@ QTCREATOR_UTILS_EXPORT FilePath appendHelper(const FilePath &base, int n)
|
|||||||
return base.stringAppended(QString::number(n));
|
return base.stringAppended(QString::number(n));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QTCREATOR_UTILS_EXPORT QPair<QStringView, QStringView> splitAtFirst(const QStringView &stringView,
|
||||||
|
QChar ch)
|
||||||
|
{
|
||||||
|
int splitIdx = stringView.indexOf(ch);
|
||||||
|
if (splitIdx == -1)
|
||||||
|
return {stringView, {}};
|
||||||
|
|
||||||
|
QStringView left = stringView.mid(0, splitIdx);
|
||||||
|
QStringView right = stringView.mid(splitIdx + 1);
|
||||||
|
|
||||||
|
return {left, right};
|
||||||
|
}
|
||||||
|
|
||||||
|
QTCREATOR_UTILS_EXPORT QPair<QStringView, QStringView> splitAtFirst(const QString &string, QChar ch)
|
||||||
|
{
|
||||||
|
QStringView view = string;
|
||||||
|
return splitAtFirst(view, ch);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
|||||||
@@ -115,4 +115,8 @@ QTCREATOR_UTILS_EXPORT QString trimFront(const QString &string, QChar ch);
|
|||||||
QTCREATOR_UTILS_EXPORT QString trimBack(const QString &string, QChar ch);
|
QTCREATOR_UTILS_EXPORT QString trimBack(const QString &string, QChar ch);
|
||||||
QTCREATOR_UTILS_EXPORT QString trim(const QString &string, QChar ch);
|
QTCREATOR_UTILS_EXPORT QString trim(const QString &string, QChar ch);
|
||||||
|
|
||||||
|
QTCREATOR_UTILS_EXPORT QPair<QStringView, QStringView> splitAtFirst(const QString &string, QChar ch);
|
||||||
|
QTCREATOR_UTILS_EXPORT QPair<QStringView, QStringView> splitAtFirst(const QStringView &stringView,
|
||||||
|
QChar ch);
|
||||||
|
|
||||||
} // namespace Utils
|
} // namespace Utils
|
||||||
|
|||||||
@@ -79,6 +79,8 @@ private slots:
|
|||||||
void testTrim();
|
void testTrim();
|
||||||
void testWildcardToRegularExpression_data();
|
void testWildcardToRegularExpression_data();
|
||||||
void testWildcardToRegularExpression();
|
void testWildcardToRegularExpression();
|
||||||
|
void testSplitAtFirst_data();
|
||||||
|
void testSplitAtFirst();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TestMacroExpander mx;
|
TestMacroExpander mx;
|
||||||
@@ -404,6 +406,38 @@ void tst_StringUtils::testWildcardToRegularExpression()
|
|||||||
QCOMPARE(string.contains(re), matches);
|
QCOMPARE(string.contains(re), matches);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_StringUtils::testSplitAtFirst_data()
|
||||||
|
{
|
||||||
|
QTest::addColumn<QString>("string");
|
||||||
|
QTest::addColumn<QChar>("separator");
|
||||||
|
QTest::addColumn<QString>("left");
|
||||||
|
QTest::addColumn<QString>("right");
|
||||||
|
|
||||||
|
QTest::newRow("Empty") << QString{} << QChar{} << QString{} << QString{};
|
||||||
|
QTest::newRow("EmptyString") << QString{} << QChar{'a'} << QString{} << QString{};
|
||||||
|
QTest::newRow("EmptySeparator") << QString{"abc"} << QChar{} << QString{"abc"} << QString{};
|
||||||
|
QTest::newRow("NoSeparator") << QString{"abc"} << QChar{'d'} << QString{"abc"} << QString{};
|
||||||
|
QTest::newRow("SeparatorAtStart") << QString{"abc"} << QChar{'a'} << QString{} << QString{"bc"};
|
||||||
|
QTest::newRow("SeparatorAtEnd") << QString{"abc"} << QChar{'c'} << QString{"ab"} << QString{};
|
||||||
|
QTest::newRow("SeparatorInMiddle")
|
||||||
|
<< QString{"abc"} << QChar{'b'} << QString{"a"} << QString{"c"};
|
||||||
|
QTest::newRow("SeparatorAtStartAndEnd")
|
||||||
|
<< QString{"abca"} << QChar{'a'} << QString{} << QString{"bca"};
|
||||||
|
}
|
||||||
|
|
||||||
|
void tst_StringUtils::testSplitAtFirst()
|
||||||
|
{
|
||||||
|
QFETCH(QString, string);
|
||||||
|
QFETCH(QChar, separator);
|
||||||
|
QFETCH(QString, left);
|
||||||
|
QFETCH(QString, right);
|
||||||
|
|
||||||
|
const auto [l, r] = Utils::splitAtFirst(string, separator);
|
||||||
|
|
||||||
|
QCOMPARE(l, left);
|
||||||
|
QCOMPARE(r, right);
|
||||||
|
}
|
||||||
|
|
||||||
QTEST_GUILESS_MAIN(tst_StringUtils)
|
QTEST_GUILESS_MAIN(tst_StringUtils)
|
||||||
|
|
||||||
#include "tst_stringutils.moc"
|
#include "tst_stringutils.moc"
|
||||||
|
|||||||
Reference in New Issue
Block a user