From 319089dd7fdc8d0fd31d66919b4ef41ed1fcd175 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 17 Oct 2023 18:40:34 +0200 Subject: [PATCH] Improve tst_QStringConverter::encodingForName_data() Add more tests and DRY the code using the usual row() lambda trick. Pick-to: 6.5 Change-Id: I810fba0ab2a96e740e67392155f9507675fe57ae Reviewed-by: Qt CI Bot Reviewed-by: Ivan Solovev (cherry picked from commit ddce99989fcc956cb59df722eea0e788a867bd7a) Reviewed-by: Qt Cherry-pick Bot --- .../qstringconverter/tst_qstringconverter.cpp | 52 ++++++++++++++----- 1 file changed, 39 insertions(+), 13 deletions(-) diff --git a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp index 2886d5920f7..79626e68874 100644 --- a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp +++ b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp @@ -14,6 +14,21 @@ using namespace Qt::StringLiterals; +QT_BEGIN_NAMESPACE +namespace QTest { +template +char *toString(const std::optional &opt) +{ + if (opt) + return QTest::toString(*opt); + else + return qstrdup("std::nullopt"); +} +} // namespace QTest +QT_END_NAMESPACE + +using QTest::toString; + static constexpr bool IsBigEndian = QSysInfo::ByteOrder == QSysInfo::BigEndian; enum CodecLimitation { AsciiOnly, @@ -2209,19 +2224,30 @@ void tst_QStringConverter::encodingForName_data() QTest::addColumn("name"); QTest::addColumn>("encoding"); - QTest::newRow("UTF-8") << QByteArray("UTF-8") << std::optional(QStringConverter::Utf8); - QTest::newRow("utf8") << QByteArray("utf8") << std::optional(QStringConverter::Utf8); - QTest::newRow("Utf-8") << QByteArray("Utf-8") << std::optional(QStringConverter::Utf8); - QTest::newRow("UTF-16") << QByteArray("UTF-16") << std::optional(QStringConverter::Utf16); - QTest::newRow("UTF-16le") << QByteArray("UTF-16le") << std::optional(QStringConverter::Utf16LE); - QTest::newRow("ISO-8859-1") << QByteArray("ISO-8859-1") << std::optional(QStringConverter::Latin1); - QTest::newRow("ISO8859-1") << QByteArray("ISO8859-1") << std::optional(QStringConverter::Latin1); - QTest::newRow("iso8859-1") << QByteArray("iso8859-1") << std::optional(QStringConverter::Latin1); - QTest::newRow("latin1") << QByteArray("latin1") << std::optional(QStringConverter::Latin1); - QTest::newRow("latin2") << QByteArray("latin2") << std::optional(); - QTest::newRow("latin15") << QByteArray("latin15") << std::optional(); - QTest::newRow("") << QByteArray("") << std::optional(); - QTest::newRow("") << QByteArray(nullptr) << std::optional(); + auto row = [](const char *name, std::optional expected = std::nullopt) { + auto protect = [](auto p) { return p ? *p ? p : "" : ""; }; + QTest::addRow("%s", protect(name)) << QByteArray(name) << expected; + }; + + row("UTF-8", QStringConverter::Utf8); + row("utf8", QStringConverter::Utf8); + row("Utf-8", QStringConverter::Utf8); + row("UTF-16", QStringConverter::Utf16); + row("UTF-16le", QStringConverter::Utf16LE); + row("ISO-8859-1", QStringConverter::Latin1); + row("ISO8859-1", QStringConverter::Latin1); + row("iso8859-1", QStringConverter::Latin1); + row("latin1", QStringConverter::Latin1); + row("-_latin-1", QStringConverter::Latin1); + row("_-latin_1", QStringConverter::Latin1); + + // failures: + row(nullptr); + row(""); + row("latin2"); + row("latin42"); + row(" latin1"); // spaces are significant + row("\tlatin1"); // HTs are significant } void tst_QStringConverter::encodingForName()