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 erase();
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 replaceWithEmptyNeedleInsertsBeforeEachChar_data();
void replaceWithEmptyNeedleInsertsBeforeEachChar();
@ -1459,68 +1462,78 @@ void tst_QByteArray::erase_single_arg()
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<int>("pos");
QTest::addColumn<int>("len");
QTest::addColumn<QByteArray>("before");
QTest::addColumn<QByteArray>("after");
QTest::addColumn<QByteArray>("expected");
// Using pos
QTest::newRow("1") << QByteArray("Say yes!") << 4 << 3 << QByteArray() << QByteArray("no")
QTest::newRow("1") << QByteArray("Say yes!") << 4 << 3 << QByteArray("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");
QTest::newRow("3") << QByteArray("foo") << 3 << 0 << QByteArray() << QByteArray("bar")
QTest::newRow("3") << QByteArray("foo") << 3 << 0 << QByteArray("bar")
<< QByteArray("foobar");
QTest::newRow("4") << QByteArray() << 0 << 0 << QByteArray() << QByteArray() << QByteArray();
QTest::newRow("4") << QByteArray() << 0 << 0 << QByteArray() << QByteArray();
// index out of range
QTest::newRow("5") << QByteArray() << 3 << 0 << QByteArray() << QByteArray("hi")
QTest::newRow("5") << QByteArray() << 3 << 0 << QByteArray("hi")
<< QByteArray();
// Optimized path
QTest::newRow("6") << QByteArray("abcdef") << 3 << 12 << QByteArray()
QTest::newRow("6") << QByteArray("abcdef") << 3 << 12
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
QTest::newRow("7") << QByteArray("abcdef") << 3 << 4 << QByteArray()
QTest::newRow("7") << QByteArray("abcdef") << 3 << 4
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
QTest::newRow("8") << QByteArray("abcdef") << 3 << 3 << QByteArray()
QTest::newRow("8") << QByteArray("abcdef") << 3 << 3
<< QByteArray("abcdefghijkl") << QByteArray("abcabcdefghijkl");
QTest::newRow("9") << QByteArray("abcdef") << 3 << 2 << QByteArray()
QTest::newRow("9") << QByteArray("abcdef") << 3 << 2
<< 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");
// 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(int, pos);
QFETCH(int, len);
QFETCH(QByteArray, before);
QFETCH(QByteArray, after);
QFETCH(QByteArray, expected);
if (before.isEmpty()) {
QByteArray copy = src;
QCOMPARE(copy.replace(pos, len, after), expected);
copy = src;
QCOMPARE(copy.replace(pos, len, after.data(), after.size()), expected);
} else {
}
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, after);
QFETCH(QByteArray, expected);
QByteArray copy = src;
if (before.size() == 1) {
if (after.size() == 1)
@ -1531,7 +1544,6 @@ void tst_QByteArray::replace()
QCOMPARE(copy.replace(before, after), expected);
copy = src;
QCOMPARE(copy.replace(before.constData(), before.size(), after.constData(), after.size()), expected);
}
}
void tst_QByteArray::replaceWithSpecifiedLength()