tst_QByteArray: create separate tests for replace() overloads

Change-Id: I576230a3e130ddf8e0124a8a1174a99a64dc691e
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Ahmad Samir 2025-05-14 02:08:25 +03:00
parent a15639a3ab
commit bee20b2137

View File

@ -74,8 +74,11 @@ private slots:
void removeIf(); void removeIf();
void erase(); void erase();
void erase_single_arg(); void erase_single_arg();
void replace_data();
void replace(); void replace_pos_len_data();
void replace_pos_len();
void replace_before_after_data();
void replace_before_after();
void replaceWithSpecifiedLength(); void replaceWithSpecifiedLength();
void replaceWithEmptyNeedleInsertsBeforeEachChar_data(); void replaceWithEmptyNeedleInsertsBeforeEachChar_data();
void replaceWithEmptyNeedleInsertsBeforeEachChar(); void replaceWithEmptyNeedleInsertsBeforeEachChar();
@ -1459,79 +1462,88 @@ void tst_QByteArray::erase_single_arg()
QCOMPARE(it, ba.begin() + 2); QCOMPARE(it, ba.begin() + 2);
} }
void tst_QByteArray::replace_data() void tst_QByteArray::replace_pos_len_data()
{ {
// Try to cover both the index and specific char cases.
// If "before" is empty, use "pos" as an index
QTest::addColumn<QByteArray>("src"); QTest::addColumn<QByteArray>("src");
QTest::addColumn<int>("pos"); QTest::addColumn<int>("pos");
QTest::addColumn<int>("len"); QTest::addColumn<int>("len");
QTest::addColumn<QByteArray>("before");
QTest::addColumn<QByteArray>("after"); QTest::addColumn<QByteArray>("after");
QTest::addColumn<QByteArray>("expected"); QTest::addColumn<QByteArray>("expected");
// Using pos QTest::newRow("1") << QByteArray("Say yes!") << 4 << 3 << QByteArray("no")
QTest::newRow("1") << QByteArray("Say yes!") << 4 << 3 << QByteArray() << QByteArray("no")
<< QByteArray("Say no!"); << QByteArray("Say no!");
QTest::newRow("2") << QByteArray("rock and roll") << 5 << 3 << QByteArray() << QByteArray("&") QTest::newRow("2") << QByteArray("rock and roll") << 5 << 3 << QByteArray("&")
<< QByteArray("rock & roll"); << QByteArray("rock & roll");
QTest::newRow("3") << QByteArray("foo") << 3 << 0 << QByteArray() << QByteArray("bar") QTest::newRow("3") << QByteArray("foo") << 3 << 0 << QByteArray("bar")
<< QByteArray("foobar"); << QByteArray("foobar");
QTest::newRow("4") << QByteArray() << 0 << 0 << QByteArray() << QByteArray() << QByteArray(); QTest::newRow("4") << QByteArray() << 0 << 0 << QByteArray() << QByteArray();
// index out of range // index out of range
QTest::newRow("5") << QByteArray() << 3 << 0 << QByteArray() << QByteArray("hi") QTest::newRow("5") << QByteArray() << 3 << 0 << QByteArray("hi")
<< QByteArray(); << QByteArray();
// Optimized path // Optimized path
QTest::newRow("6") << QByteArray("abcdef") << 3 << 12 << QByteArray() QTest::newRow("6") << QByteArray("abcdef") << 3 << 12
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl"); << QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
QTest::newRow("7") << QByteArray("abcdef") << 3 << 4 << QByteArray() QTest::newRow("7") << QByteArray("abcdef") << 3 << 4
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl"); << QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
QTest::newRow("8") << QByteArray("abcdef") << 3 << 3 << QByteArray() QTest::newRow("8") << QByteArray("abcdef") << 3 << 3
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl"); << QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
QTest::newRow("9") << QByteArray("abcdef") << 3 << 2 << QByteArray() QTest::newRow("9") << QByteArray("abcdef") << 3 << 2
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijklf"); << QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijklf");
QTest::newRow("10") << QByteArray("abcdef") << 2 << 2 << QByteArray() << QByteArray("xx") QTest::newRow("10") << QByteArray("abcdef") << 2 << 2 << QByteArray("xx")
<< QByteArray("abxxef"); << QByteArray("abxxef");
// Using before
QTest::newRow("null") << QByteArray() << 0 << 0 << QByteArray("abc") << QByteArray()
<< QByteArray();
QTest::newRow("text to text") << QByteArray("abcdefghbcd") << 0 << 0 << QByteArray("bcd")
<< QByteArray("1234") << QByteArray("a1234efgh1234");
QTest::newRow("char to text") << QByteArray("abcdefgch") << 0 << 0 << QByteArray("c")
<< QByteArray("1234") << QByteArray("ab1234defg1234h");
QTest::newRow("char to char") << QByteArray("abcdefgch") << 0 << 0 << QByteArray("c")
<< QByteArray("1") << QByteArray("ab1defg1h");
} }
void tst_QByteArray::replace() void tst_QByteArray::replace_pos_len()
{ {
QFETCH(QByteArray, src); QFETCH(QByteArray, src);
QFETCH(int, pos); QFETCH(int, pos);
QFETCH(int, len); QFETCH(int, len);
QFETCH(QByteArray, after);
QFETCH(QByteArray, expected);
QByteArray copy = src;
QCOMPARE(copy.replace(pos, len, after), expected);
copy = src;
QCOMPARE(copy.replace(pos, len, after.data(), after.size()), expected);
}
void tst_QByteArray::replace_before_after_data()
{
QTest::addColumn<QByteArray>("src");
QTest::addColumn<QByteArray>("before");
QTest::addColumn<QByteArray>("after");
QTest::addColumn<QByteArray>("expected");
QTest::newRow("null") << QByteArray() << QByteArray("abc") << QByteArray()
<< QByteArray();
QTest::newRow("text to text") << QByteArray("abcdefghbcd") << QByteArray("bcd")
<< QByteArray("1234") << QByteArray("a1234efgh1234");
QTest::newRow("char to text") << QByteArray("abcdefgch") << QByteArray("c")
<< QByteArray("1234") << QByteArray("ab1234defg1234h");
QTest::newRow("char to char") << QByteArray("abcdefgch") << QByteArray("c")
<< QByteArray("1") << QByteArray("ab1defg1h");
}
void tst_QByteArray::replace_before_after()
{
QFETCH(QByteArray, src);
QFETCH(QByteArray, before); QFETCH(QByteArray, before);
QFETCH(QByteArray, after); QFETCH(QByteArray, after);
QFETCH(QByteArray, expected); QFETCH(QByteArray, expected);
if (before.isEmpty()) { QByteArray copy = src;
QByteArray copy = src; if (before.size() == 1) {
QCOMPARE(copy.replace(pos, len, after), expected); if (after.size() == 1)
copy = src; QCOMPARE(copy.replace(before.front(), after.front()), expected);
QCOMPARE(copy.replace(pos, len, after.data(), after.size()), expected); QCOMPARE(copy.replace(before.front(), after), expected);
} else {
QByteArray copy = src;
if (before.size() == 1) {
if (after.size() == 1)
QCOMPARE(copy.replace(before.front(), after.front()), expected);
QCOMPARE(copy.replace(before.front(), after), expected);
}
copy = src;
QCOMPARE(copy.replace(before, after), expected);
copy = src;
QCOMPARE(copy.replace(before.constData(), before.size(), after.constData(), after.size()), expected);
} }
copy = src;
QCOMPARE(copy.replace(before, after), expected);
copy = src;
QCOMPARE(copy.replace(before.constData(), before.size(), after.constData(), after.size()), expected);
} }
void tst_QByteArray::replaceWithSpecifiedLength() void tst_QByteArray::replaceWithSpecifiedLength()