Add test cases to tst_QByteArray

Internally we construct QByteArrays from QStaticByteArrays. For example
moc is generating QStaticByteArray structure for every string it saves.
New test cases check if a QByteArray constructed from a QStaticByteArray
behaves as a not statically constructed one.

Change-Id: Ia4aa9a1a5bc0209507636c683a782dda00eae85c
Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
bb10
Jędrzej Nowacki 2012-03-22 09:44:17 +01:00 committed by Qt by Nokia
parent 425b38ef95
commit 98c3b8a442
1 changed files with 137 additions and 0 deletions

View File

@ -91,8 +91,14 @@ private slots:
void chop_data();
void chop();
void prepend();
void prependExtended_data();
void prependExtended();
void append();
void appendExtended_data();
void appendExtended();
void insert();
void insertExtended_data();
void insertExtended();
void remove_data();
void remove();
void replace_data();
@ -130,11 +136,44 @@ private slots:
void byteRefDetaching() const;
void reserve();
void reserveExtended_data();
void reserveExtended();
void movablity_data();
void movablity();
void literals();
};
struct StaticByteArrays {
struct Standard {
QByteArrayData data;
const char string[8];
} standard;
struct NotNullTerminated {
QByteArrayData data;
const char string[8];
} notNullTerminated;
struct Shifted {
QByteArrayData data;
const char dummy; // added to change offset of string
const char string[8];
} shifted;
struct ShiftedNotNullTerminated {
QByteArrayData data;
const char dummy; // added to change offset of string
const char string[8];
} shiftedNotNullTerminated;
} statics = {{{ Q_REFCOUNT_INITIALIZE_STATIC, /* length = */ 4, 0, 0, sizeof(QByteArrayData) }, "data"}
,{{ Q_REFCOUNT_INITIALIZE_STATIC, /* length = */ 4, 0, 0, sizeof(QByteArrayData) }, "dataBAD"}
,{{ Q_REFCOUNT_INITIALIZE_STATIC, /* length = */ 4, 0, 0, sizeof(QByteArrayData) + sizeof(char) }, 0, "data"}
,{{ Q_REFCOUNT_INITIALIZE_STATIC, /* length = */ 4, 0, 0, sizeof(QByteArrayData) + sizeof(char) }, 0, "dataBAD"}
};
static const QStaticByteArrayData<1> &staticStandard = reinterpret_cast<QStaticByteArrayData<1> &>(statics.standard);
static const QStaticByteArrayData<1> &staticNotNullTerminated = reinterpret_cast<QStaticByteArrayData<1> &>(statics.notNullTerminated);
static const QStaticByteArrayData<1> &staticShifted = reinterpret_cast<QStaticByteArrayData<1> &>(statics.shifted);
static const QStaticByteArrayData<1> &staticShiftedNotNullTerminated = reinterpret_cast<QStaticByteArrayData<1> &>(statics.shiftedNotNullTerminated);
tst_QByteArray::tst_QByteArray()
{
qRegisterMetaType<qulonglong>("qulonglong");
@ -701,6 +740,35 @@ void tst_QByteArray::prepend()
QCOMPARE(ba.prepend("\0 ", 2), QByteArray::fromRawData("\0 321foo", 8));
}
void tst_QByteArray::prependExtended_data()
{
QTest::addColumn<QByteArray>("array");
QTest::newRow("literal") << QByteArray(QByteArrayLiteral("data"));
QTest::newRow("standard") << QByteArray(staticStandard);
QTest::newRow("shifted") << QByteArray(staticShifted);
QTest::newRow("notNullTerminated") << QByteArray(staticNotNullTerminated);
QTest::newRow("shiftedNotNullTerminated") << QByteArray(staticShiftedNotNullTerminated);
QTest::newRow("non static data") << QByteArray("data");
QTest::newRow("from raw data") << QByteArray::fromRawData("data", 4);
QTest::newRow("from raw data not terminated") << QByteArray::fromRawData("dataBAD", 4);
}
void tst_QByteArray::prependExtended()
{
QFETCH(QByteArray, array);
QCOMPARE(QByteArray().prepend(array), QByteArray("data"));
QCOMPARE(QByteArray("").prepend(array), QByteArray("data"));
QCOMPARE(array.prepend((char*)0), QByteArray("data"));
QCOMPARE(array.prepend(QByteArray()), QByteArray("data"));
QCOMPARE(array.prepend("1"), QByteArray("1data"));
QCOMPARE(array.prepend(QByteArray("2")), QByteArray("21data"));
QCOMPARE(array.prepend('3'), QByteArray("321data"));
QCOMPARE(array.prepend("\0 ", 2), QByteArray::fromRawData("\0 321data", 9));
QCOMPARE(array.size(), 9);
}
void tst_QByteArray::append()
{
QByteArray ba("foo");
@ -714,6 +782,28 @@ void tst_QByteArray::append()
QCOMPARE(ba.size(), 7);
}
void tst_QByteArray::appendExtended_data()
{
prependExtended_data();
}
void tst_QByteArray::appendExtended()
{
QFETCH(QByteArray, array);
QCOMPARE(QByteArray().append(array), QByteArray("data"));
QCOMPARE(QByteArray("").append(array), QByteArray("data"));
QCOMPARE(array.append((char*)0), QByteArray("data"));
QCOMPARE(array.append(QByteArray()), QByteArray("data"));
QCOMPARE(array.append("1"), QByteArray("data1"));
QCOMPARE(array.append(QByteArray("2")), QByteArray("data12"));
QCOMPARE(array.append('3'), QByteArray("data123"));
QCOMPARE(array.append("\0"), QByteArray("data123"));
QCOMPARE(array.append("\0", 1), QByteArray::fromRawData("data123\0", 8));
QCOMPARE(array.size(), 8);
}
void tst_QByteArray::insert()
{
QByteArray ba("Meal");
@ -736,6 +826,18 @@ void tst_QByteArray::insert()
QCOMPARE(ba.size(), 5);
}
void tst_QByteArray::insertExtended_data()
{
prependExtended_data();
}
void tst_QByteArray::insertExtended()
{
QFETCH(QByteArray, array);
QCOMPARE(array.insert(1, "i"), QByteArray("diata"));
QCOMPARE(array.size(), 5);
}
void tst_QByteArray::remove_data()
{
QTest::addColumn<QByteArray>("src");
@ -1456,6 +1558,23 @@ void tst_QByteArray::repeated_data() const
<< QByteArray(("abc"))
<< QByteArray(("abcabcabcabc"))
<< 4;
QTest::newRow("static not null terminated")
<< QByteArray(staticNotNullTerminated)
<< QByteArray("datadatadatadata")
<< 4;
QTest::newRow("static standard")
<< QByteArray(staticStandard)
<< QByteArray("datadatadatadata")
<< 4;
QTest::newRow("static shifted not null terminated")
<< QByteArray(staticShiftedNotNullTerminated)
<< QByteArray("datadatadatadata")
<< 4;
QTest::newRow("static shifted")
<< QByteArray(staticShifted)
<< QByteArray("datadatadatadata")
<< 4;
}
void tst_QByteArray::byteRefDetaching() const
@ -1508,6 +1627,22 @@ void tst_QByteArray::reserve()
nil2.reserve(0);
}
void tst_QByteArray::reserveExtended_data()
{
prependExtended_data();
}
void tst_QByteArray::reserveExtended()
{
QFETCH(QByteArray, array);
array.reserve(1024);
QVERIFY(array.capacity() == 1024);
QCOMPARE(array, QByteArray("data"));
array.squeeze();
QCOMPARE(array, QByteArray("data"));
QCOMPARE(array.capacity(), array.size());
}
void tst_QByteArray::movablity_data()
{
QTest::addColumn<QByteArray>("array");
@ -1518,6 +1653,8 @@ void tst_QByteArray::movablity_data()
QTest::newRow("empty") << QByteArray("");
QTest::newRow("null") << QByteArray();
QTest::newRow("sss") << QByteArray(3, 's');
prependExtended_data();
}
void tst_QByteArray::movablity()