tst_QTextStream: trust QtTest to know how to compare QByteArray

Just comparing the constData() of two QBAs fails to check the sizes
match, and only compares up to the first '\0' byte; but QCOMPARE()
will also check size and checks all bytes. It's also perfectly capable
of comparing a QBAV to a C string literal (by turning the latter into
a QBAV), so save some allocations by doing that. Some tests were
overtly comparing both size() and constData(), but of course the
latter still only compared up to the first '\0' byte, still. So also
replace such pairs with a straight QGA comparison.

One test genuinely used a constData() comparison because it was
testing streaming of the constData(), so hadn't streamed size info and
thus wasn't reading it back again. Record that this is why that one
remains testing constData(), to save future readers wondering.

At the same time, test a QBuffer's (read-only) .data() in preference
to its (mutable) .buffer(), so it's clear (because we use the latter)
when we actually need mutating access to the raw data. (One test does,
with .buffer().clear(), indeed do that.)

Change-Id: I2b565469456bde9c003894abc8128ec5bc38a370
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Edward Welbourne 2025-04-07 16:20:22 +02:00
parent b9faf83fd6
commit 2ea404f34c

View File

@ -1472,12 +1472,12 @@ void tst_QTextStream::readLineFromStdin()
stdinProcess.setReadChannel(QProcess::StandardError);
stdinProcess.write("abc\n");
QVERIFY(stdinProcess.waitForReadyRead(5000));
QCOMPARE(stdinProcess.readAll().data(), QByteArray("abc").data());
QVERIFY(stdinProcess.waitForReadyRead());
QCOMPARE(stdinProcess.readAll(), "abc");
stdinProcess.write("def\n");
QVERIFY(stdinProcess.waitForReadyRead(5000));
QCOMPARE(stdinProcess.readAll(), QByteArray("def"));
QVERIFY(stdinProcess.waitForReadyRead());
QCOMPARE(stdinProcess.readAll(), "def");
stdinProcess.closeWriteChannel();
@ -1786,7 +1786,7 @@ void tst_QTextStream::writeSeekWriteNoBOM()
QVERIFY(stream << "blah blah blah" << Qt::endl);
stream.flush();
QCOMPARE(out.buffer().constData(), "Size=0000000000\nVersion=14\nblah blah blah\n");
QCOMPARE(out.data(), "Size=0000000000\nVersion=14\nblah blah blah\n");
// Now overwrite the size header item
number = 42;
@ -1797,7 +1797,7 @@ void tst_QTextStream::writeSeekWriteNoBOM()
stream.flush();
// Check buffer is still OK
QCOMPARE(out.buffer().constData(), "Size=0000000042\nVersion=14\nblah blah blah\n");
QCOMPARE(out.data(), "Size=0000000042\nVersion=14\nblah blah blah\n");
//Then UTF-16
@ -1811,13 +1811,13 @@ void tst_QTextStream::writeSeekWriteNoBOM()
stream16.flush();
// save that output
QByteArray first = out16.buffer();
const QByteArray first = out16.data();
stream16.seek(0);
QVERIFY(stream16 << "one");
stream16.flush();
QCOMPARE(out16.buffer(), first);
QCOMPARE(out16.data(), first);
}
// ------------------------------------------------------------------------------
@ -1878,8 +1878,7 @@ void tst_QTextStream::QChar_operators_FromDevice()
QVERIFY(writeStream << qchar_output);
writeStream.flush();
QCOMPARE(writeBuf.buffer().size(), write_output.size());
QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
QCOMPARE(writeBuf.data(), write_output);
}
// ------------------------------------------------------------------------------
@ -1907,8 +1906,7 @@ void tst_QTextStream::char16_t_operators_FromDevice()
QVERIFY(writeStream << char16_t_output);
writeStream.flush();
QCOMPARE(writeBuf.buffer().size(), write_output.size());
QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
QCOMPARE(writeBuf.data(), write_output);
}
// ------------------------------------------------------------------------------
@ -1935,8 +1933,7 @@ void tst_QTextStream::char_operators_FromDevice()
QVERIFY(writeStream << char_output);
writeStream.flush();
QCOMPARE(writeBuf.buffer().size(), write_output.size());
QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
QCOMPARE(writeBuf.data(), write_output);
}
// ------------------------------------------------------------------------------
@ -2187,7 +2184,7 @@ void tst_QTextStream::integral_write_operator_ToDevice() const
stream.setLocale(QLocale::c());
QVERIFY(stream << Whole(number));
stream.flush();
QCOMPARE(buffer.data().constData(), data.constData());
QCOMPARE(buffer.data(), data);
QLocale locale("en-US");
buffer.reset(); buffer.buffer().clear();
@ -2201,7 +2198,7 @@ void tst_QTextStream::integral_write_operator_ToDevice() const
stream.setLocale(locale);
QVERIFY(stream << Whole(number));
stream.flush();
QCOMPARE(buffer.data().constData(), data.constData());
QCOMPARE(buffer.data(), data);
locale = QLocale("de-DE");
buffer.reset(); buffer.buffer().clear();
@ -2384,7 +2381,7 @@ void tst_QTextStream::real_write_operator_ToDevice() const
Real f = Real(number);
QVERIFY(stream << f);
stream.flush();
QCOMPARE(buffer.data().constData(), data.constData());
QCOMPARE(buffer.data(), data);
buffer.reset();
stream.setLocale(QLocale("en-US"));
@ -2433,7 +2430,9 @@ void tst_QTextStream::string_write_operator_ToDevice()
QVERIFY(stream << bytedata.constData());
stream.flush();
QCOMPARE(buf.buffer().constData(), result.constData());
// Size information is discarded, so "empty" doesn't get its (size 1)
// null byte transmitted, so only compare to constData(), ignoring size.
QCOMPARE(buf.data().constData(), result.constData());
}
{
// QByteArray
@ -2445,7 +2444,7 @@ void tst_QTextStream::string_write_operator_ToDevice()
QVERIFY(stream << bytedata);
stream.flush();
QCOMPARE(buf.buffer().constData(), result.constData());
QCOMPARE(buf.data(), result);
}
{
// QString
@ -2457,7 +2456,7 @@ void tst_QTextStream::string_write_operator_ToDevice()
QVERIFY(stream << stringdata);
stream.flush();
QCOMPARE(buf.buffer().constData(), result.constData());
QCOMPARE(buf.data(), result);
}
}
@ -2472,7 +2471,7 @@ void tst_QTextStream::latin1String_write_operator_ToDevice()
QVERIFY(stream << QLatin1String("No explicit length"));
QVERIFY(stream << QLatin1String("Explicit length - ignore this part", 15));
stream.flush();
QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
QCOMPARE(buf.data(), "No explicit lengthExplicit length");
}
void tst_QTextStream::stringref_write_operator_ToDevice()
@ -2488,7 +2487,7 @@ void tst_QTextStream::stringref_write_operator_ToDevice()
QVERIFY(stream << expected.left(18));
QVERIFY(stream << expected.mid(18));
stream.flush();
QCOMPARE(buf.buffer().constData(), "No explicit lengthExplicit length");
QCOMPARE(buf.data(), "No explicit lengthExplicit length");
}
void tst_QTextStream::stringview_write_operator_ToDevice()
@ -2499,7 +2498,7 @@ void tst_QTextStream::stringview_write_operator_ToDevice()
const QStringView expected = u"expectedStringView";
QVERIFY(stream << expected);
stream.flush();
QCOMPARE(buf.buffer().constData(), "expectedStringView");
QCOMPARE(buf.data(), "expectedStringView");
}
// ------------------------------------------------------------------------------
@ -2551,7 +2550,7 @@ void tst_QTextStream::useCase1()
}
file.seek(0);
QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
QCOMPARE(file.readAll(), "4.15 abc ole");
file.seek(0);
{
@ -2567,7 +2566,7 @@ void tst_QTextStream::useCase1()
stream >> s;
QCOMPARE(d, 4.15);
QCOMPARE(a, QByteArray("abc"));
QCOMPARE(a, "abc");
QCOMPARE(s, QString("ole"));
}
}
@ -2588,7 +2587,7 @@ void tst_QTextStream::useCase2()
file.close();
QVERIFY(file.open(QFile::ReadWrite));
QCOMPARE(file.readAll(), QByteArray("4.15 abc ole"));
QCOMPARE(file.readAll(), "4.15 abc ole");
file.close();
QVERIFY(file.open(QFile::ReadWrite));
@ -2605,8 +2604,8 @@ void tst_QTextStream::useCase2()
QVERIFY(stream2 >> s);
QCOMPARE(d, 4.15);
QCOMPARE(a, QByteArray("abc"));
QCOMPARE(s, QString("ole"));
QCOMPARE(a, "abc");
QCOMPARE(s, "ole");
}
// ------------------------------------------------------------------------------
@ -2823,19 +2822,19 @@ void tst_QTextStream::status_write_error()
QVERIFY(fs << "hello");
fs.flush();
QCOMPARE(fs.status(), QTextStream::Ok);
QCOMPARE(fb.data(), QByteArray("hello"));
QCOMPARE(fb.data(), "hello");
/* then test that writing can cause an error */
fb.setLocked(true);
QVERIFY(fs << "error");
fs.flush();
QCOMPARE(fs.status(), QTextStream::WriteFailed);
QCOMPARE(fb.data(), QByteArray("hello"));
QCOMPARE(fb.data(), "hello");
/* finally test that writing after an error doesn't change the stream any more */
fb.setLocked(false);
fs << "can't do that";
fs.flush();
QCOMPARE(fs.status(), QTextStream::WriteFailed);
QCOMPARE(fb.data(), QByteArray("hello"));
QCOMPARE(fb.data(), "hello");
}
void tst_QTextStream::alignAccountingStyle()