From 85ae84dc9e4e5d6fbdb5a5e26e363716e4cb8d5c Mon Sep 17 00:00:00 2001 From: Andrei Golubev Date: Sun, 25 Apr 2021 22:47:39 +0200 Subject: Add more tests for QList/QString/QBA The major part is stability tests for QList operations, Also added std::shared_ptr to the Custom type. shared_ptr accesses the memory which does not directly belong to QList, so using it inside a passed-to-qlist type is beneficial (e.g. ASan could catch extra issues) Basic prepend-aware cases added to QString/QBA tests Task-number: QTBUG-93019 Change-Id: I50e742bdf10ea9de2de66539a7dbb9abc4352f82 Reviewed-by: Lars Knoll (cherry picked from commit adb41bbe00b2b853d4dd26cd9ee77ae5ed541576) Reviewed-by: Qt Cherry-pick Bot --- .../corelib/text/qbytearray/tst_qbytearray.cpp | 53 ++++++++++++++++ tests/auto/corelib/text/qstring/tst_qstring.cpp | 73 ++++++++++++++++++++++ 2 files changed, 126 insertions(+) (limited to 'tests/auto/corelib/text') diff --git a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp index 7f9bff844f..1f7e997653 100644 --- a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp +++ b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp @@ -894,6 +894,27 @@ void tst_QByteArray::append() QByteArray twoChars("ab"); tenChars.append(twoChars); QCOMPARE(tenChars.capacity(), 10); + + { + QByteArray prepended("abcd"); + prepended.prepend('a'); + const qsizetype freeAtEnd = prepended.data_ptr()->freeSpaceAtEnd(); + QVERIFY(prepended.size() + freeAtEnd < prepended.capacity()); + prepended += QByteArray(freeAtEnd, 'b'); + prepended.append('c'); + QCOMPARE(prepended, QByteArray("aabcd") + QByteArray(freeAtEnd, 'b') + QByteArray("c")); + } + + { + QByteArray prepended2("aaaaaaaaaa"); + while (prepended2.size()) + prepended2.remove(0, 1); + QVERIFY(prepended2.data_ptr()->freeSpaceAtBegin() > 0); + QByteArray array(prepended2.data_ptr()->freeSpaceAtEnd(), 'a'); + prepended2 += array; + prepended2.append('b'); + QCOMPARE(prepended2, array + QByteArray("b")); + } } void tst_QByteArray::appendExtended_data() @@ -958,6 +979,38 @@ void tst_QByteArray::insert() ba = "one"; QCOMPARE(ba.insert(1, QByteArrayView(ba)), QByteArray("oonene")); QCOMPARE(ba.size(), 6); + + { + ba = "one"; + ba.prepend('a'); + QByteArray b(ba.data_ptr()->freeSpaceAtEnd(), 'b'); + QCOMPARE(ba.insert(ba.size() + 1, QByteArrayView(b)), QByteArray("aone ") + b); + } + + { + ba = "onetwothree"; + while (ba.size() - 1) + ba.remove(0, 1); + QByteArray b(ba.data_ptr()->freeSpaceAtEnd() + 1, 'b'); + QCOMPARE(ba.insert(ba.size() + 1, QByteArrayView(b)), QByteArray("e ") + b); + } + + { + ba = "one"; + ba.prepend('a'); + const qsizetype freeAtEnd = ba.data_ptr()->freeSpaceAtEnd(); + QCOMPARE(ba.insert(ba.size() + 1, freeAtEnd + 1, 'b'), + QByteArray("aone ") + QByteArray(freeAtEnd + 1, 'b')); + } + + { + ba = "onetwothree"; + while (ba.size() - 1) + ba.remove(0, 1); + const qsizetype freeAtEnd = ba.data_ptr()->freeSpaceAtEnd(); + QCOMPARE(ba.insert(ba.size() + 1, freeAtEnd + 1, 'b'), + QByteArray("e ") + QByteArray(freeAtEnd + 1, 'b')); + } } void tst_QByteArray::insertExtended_data() diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index 9b5140354c..0b217955a4 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -2416,6 +2416,36 @@ void tst_QString::insert_special_cases() QCOMPARE(a.insert(1, QLatin1String("BCD")), QString("ABCDEF")); QCOMPARE(a.insert(3, QLatin1String("-")), QString("ABC-DEF")); QCOMPARE(a.insert(a.size() + 1, QLatin1String("XYZ")), QString("ABC-DEF XYZ")); + + { + a = "one"; + a.prepend(u'a'); + QString b(a.data_ptr()->freeSpaceAtEnd(), u'b'); + QCOMPARE(a.insert(a.size() + 1, QLatin1String(b.toLatin1())), QString("aone ") + b); + } + + { + a = "onetwothree"; + while (a.size() - 1) + a.remove(0, 1); + QString b(a.data_ptr()->freeSpaceAtEnd() + 1, u'b'); + QCOMPARE(a.insert(a.size() + 1, QLatin1String(b.toLatin1())), QString("e ") + b); + } + + { + a = "one"; + a.prepend(u'a'); + QString b(a.data_ptr()->freeSpaceAtEnd(), u'b'); + QCOMPARE(a.insert(a.size() + 1, b), QString("aone ") + b); + } + + { + a = "onetwothree"; + while (a.size() - 1) + a.remove(0, 1); + QString b(a.data_ptr()->freeSpaceAtEnd() + 1, u'b'); + QCOMPARE(a.insert(a.size() + 1, b), QString("e ") + b); + } } void tst_QString::append_data(bool emptyIsNoop) @@ -2475,6 +2505,49 @@ void tst_QString::append_special_cases() a.append(QLatin1String("BC")); QCOMPARE(a, QLatin1String("ABC")); } + + { + QString a = "one"; + a.prepend(u'a'); + QString b(a.data_ptr()->freeSpaceAtEnd(), u'b'); + QCOMPARE(a.append(QLatin1String(b.toLatin1())), QString("aone") + b); + } + + { + QString a = "onetwothree"; + while (a.size() - 1) + a.remove(0, 1); + QString b(a.data_ptr()->freeSpaceAtEnd(), u'b'); + QCOMPARE(a.append(QLatin1String(b.toLatin1())), QString("e") + b); + } + + { + QString a = "one"; + a.prepend(u'a'); + QString b(a.data_ptr()->freeSpaceAtEnd(), u'b'); + QCOMPARE(a.append(b), QString("aone") + b); + } + + { + QString a = "onetwothree"; + while (a.size() - 1) + a.remove(0, 1); + QString b(a.data_ptr()->freeSpaceAtEnd() + 1, u'b'); + QCOMPARE(a.append(b), QString("e") + b); + } + + { + QString a = "one"; + a.prepend(u'a'); + QCOMPARE(a.append(u'b'), QString("aoneb")); + } + + { + QString a = "onetwothree"; + while (a.size() - 1) + a.remove(0, 1); + QCOMPARE(a.append(u'b'), QString("eb")); + } } void tst_QString::append_bytearray_special_cases_data() -- cgit v1.2.3