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));
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
@@ -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 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
|
||||
|
||||
@@ -79,6 +79,8 @@ private slots:
|
||||
void testTrim();
|
||||
void testWildcardToRegularExpression_data();
|
||||
void testWildcardToRegularExpression();
|
||||
void testSplitAtFirst_data();
|
||||
void testSplitAtFirst();
|
||||
|
||||
private:
|
||||
TestMacroExpander mx;
|
||||
@@ -404,6 +406,38 @@ void tst_StringUtils::testWildcardToRegularExpression()
|
||||
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)
|
||||
|
||||
#include "tst_stringutils.moc"
|
||||
|
||||
Reference in New Issue
Block a user