From 055b5a83b4b1fa224b075cbc35490e8e2db2225c Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Tue, 4 Feb 2025 12:03:27 +0100 Subject: [PATCH] Modernise tst_QTextStream::manipulators() and add two new data rows It was using int for two flag columns; we can pass the relevant flag types now, and we get better type-checking by doing so. Expand the integral numeric column from int to qlonglong, since that's the type we actually end up with by the time we're asking QLocale to do our formatting for us. Add test-cases for things we've lately noticed aren't right, notably including the min-qlonglong test (which passes because compilers handle the UB straightforwardly), that needed the integral numeric column's expansion. Sign-handling for negative values in hex fails; a later commit shall fix and remove the QEXPECT_FAIL(). Pick-to: 6.8 6.5 5.15 Task-number: QTBUG-133269 Change-Id: I39c5339b144b40a30886d8253fa464828ed87629 Reviewed-by: Mate Barany (cherry picked from commit 5a230596c8c1f63e662ce17e094e2ae187066d6d) Reviewed-by: Qt Cherry-pick Bot --- .../qtextstream/tst_qtextstream.cpp | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp index 330106bd6d5..d66cc21e318 100644 --- a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp +++ b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp @@ -2649,46 +2649,54 @@ void tst_QTextStream::useCase2() void tst_QTextStream::manipulators_data() { QTest::addColumn("base"); - QTest::addColumn("alignFlag"); - QTest::addColumn("numberFlag"); + QTest::addColumn("alignFlag"); + QTest::addColumn("numberFlag"); QTest::addColumn("width"); QTest::addColumn("realNumber"); - QTest::addColumn("intNumber"); + QTest::addColumn("intNumber"); QTest::addColumn("textData"); QTest::addColumn("result"); QTest::newRow("no flags") - << 10 << 0 << 0 << 0 << 5.0 << 5 << QString("five") << QByteArray("55five"); + << 10 << QTextStream::AlignLeft << QTextStream::NumberFlags{} + << 0 << 5.0 << 5LL << QString("five") << QByteArray("55five"); QTest::newRow("rightadjust") - << 10 << int(QTextStream::AlignRight) << 0 << 10 << 5.0 << 5 << QString("five") - << QByteArray(" 5 5 five"); + << 10 << QTextStream::AlignRight << QTextStream::NumberFlags{} + << 10 << 5.0 << 5LL << QString("five") << QByteArray(" 5 5 five"); QTest::newRow("leftadjust") - << 10 << int(QTextStream::AlignLeft) << 0 << 10 << 5.0 << 5 << QString("five") - << QByteArray("5 5 five "); + << 10 << QTextStream::AlignLeft << QTextStream::NumberFlags{} + << 10 << 5.0 << 5LL << QString("five") << QByteArray("5 5 five "); QTest::newRow("showpos-wide") - << 10 << int(QTextStream::AlignRight) << int(QTextStream::ForceSign) << 10 << 5.0 << 5 << - QString("five") << QByteArray(" +5 +5 five"); + << 10 << QTextStream::AlignRight << QTextStream::NumberFlags{QTextStream::ForceSign} + << 10 << 5.0 << 5LL << QString("five") << QByteArray(" +5 +5 five"); QTest::newRow("showpos-pi") - << 10 << int(QTextStream::AlignRight) << int(QTextStream::ForceSign) << 5 << 3.14 << -5 << - QString("five") << QByteArray("+3.14 -5 five"); + << 10 << QTextStream::AlignRight << QTextStream::NumberFlags{QTextStream::ForceSign} + << 5 << 3.14 << -5LL << QString("five") << QByteArray("+3.14 -5 five"); + QTest::newRow("min-value") + << 10 << QTextStream::AlignRight << QTextStream::NumberFlags{} << 5 + << 3.14 << (std::numeric_limits::min)() + << QString("five") << QByteArray(" 3.14-9223372036854775808 five"); QTest::newRow("hex-lower") - << 16 << int(QTextStream::AlignRight) << int(QTextStream::ShowBase) << 5 << 3.14 << -5 << - QString("five") << QByteArray(" 3.14 -0x5 five"); + << 16 << QTextStream::AlignRight << QTextStream::NumberFlags{QTextStream::ShowBase} + << 5 << 3.14 << -5LL << QString("five") << QByteArray(" 3.14 -0x5 five"); QTest::newRow("hex-upper") - << 16 << int(QTextStream::AlignRight) - << int(QTextStream::ShowBase | QTextStream::UppercaseBase) - << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0X5 five"); + << 16 << QTextStream::AlignRight + << (QTextStream::ShowBase | QTextStream::UppercaseBase) + << 5 << 3.14 << -5LL << QString("five") << QByteArray(" 3.14 -0X5 five"); + QTest::newRow("hex-negative") + << 16 << QTextStream::AlignRight << (QTextStream::ShowBase | QTextStream::ForceSign) + << 5 << 3.14 << -5LL << QString("five") << QByteArray("+3.14 -0x5 five"); } // ------------------------------------------------------------------------------ void tst_QTextStream::manipulators() { QFETCH(int, base); - QFETCH(int, alignFlag); - QFETCH(int, numberFlag); + QFETCH(QTextStream::FieldAlignment, alignFlag); + QFETCH(QTextStream::NumberFlags, numberFlag); QFETCH(int, width); QFETCH(double, realNumber); - QFETCH(int, intNumber); + QFETCH(qlonglong, intNumber); QFETCH(QString, textData); QFETCH(QByteArray, result); @@ -2700,14 +2708,15 @@ void tst_QTextStream::manipulators() stream.setAutoDetectUnicode(true); stream.setIntegerBase(base); - stream.setFieldAlignment(QTextStream::FieldAlignment(alignFlag)); - stream.setNumberFlags(QTextStream::NumberFlag(numberFlag)); + stream.setFieldAlignment(alignFlag); + stream.setNumberFlags(numberFlag); stream.setFieldWidth(width); stream << realNumber; stream << intNumber; stream << textData; stream.flush(); + QEXPECT_FAIL("hex-negative", "Discovered while fixing QTBUG-133269", Continue); QCOMPARE(buffer.data(), result); }