diff options
author | Lars Knoll <lars.knoll@qt.io> | 2020-04-22 14:39:27 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2020-05-14 07:47:33 +0200 |
commit | cab0d57d1eb02d93774f4e444cb4514400bac0e9 (patch) | |
tree | 49f59bd135fcd071367d529b64304ca4e864fdc9 /tests | |
parent | 542ded462ef637dd48b29ba10845c3afb76ec126 (diff) |
Clean up the Flag handling in QStringConverter
IgnoreHeader was a rather badly defined enum, in addition the
utf8 and utf16 codecs where handling BOMs somewhat different
for stateless decoding.
Fix this by introducing explicit flags for writing a bom when
encoding and not skipping the initial bom when decoding.
Source compatibility for QTextCodec is done with a couple of
static constexpr variables.
Change-Id: I0b2d94f84c937cec1e0494c16ef448c00382691d
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp | 38 | ||||
-rw-r--r-- | tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp | 66 |
2 files changed, 52 insertions, 52 deletions
diff --git a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp index 90edac3ed0..4dc75b11c0 100644 --- a/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp +++ b/tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp @@ -264,7 +264,7 @@ void tst_QTextCodec::fromUnicode() array is correct (no off by one, no trailing '\0'). */ QByteArray result = codec->fromUnicode(u"abc"); - if (result.startsWith('a')) { + if (eightBit && result.startsWith('a')) { QCOMPARE(result.size(), 3); QCOMPARE(result, QByteArray("abc")); } else { @@ -1719,13 +1719,13 @@ void tst_QTextCodec::utfHeaders_data() QTest::newRow("utf8 bom") << QByteArray("UTF-8") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\xef\xbb\xbfhello") << QString::fromLatin1("hello") << true; QTest::newRow("utf8 nobom") << QByteArray("UTF-8") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("hello") << QString::fromLatin1("hello") << true; @@ -1744,20 +1744,20 @@ void tst_QTextCodec::utfHeaders_data() QTest::newRow("utf16 bom be") << QByteArray("UTF-16") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\xfe\xff\0h\0e\0l", 8) << QString::fromLatin1("hel") << true; QTest::newRow("utf16 bom le") << QByteArray("UTF-16") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\xff\xfeh\0e\0l\0", 8) << QString::fromLatin1("hel") << true; if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { QTest::newRow("utf16 nobom") << QByteArray("UTF-16") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\0h\0e\0l", 6) << QString::fromLatin1("hel") << true; @@ -1770,7 +1770,7 @@ void tst_QTextCodec::utfHeaders_data() } else { QTest::newRow("utf16 nobom") << QByteArray("UTF-16") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("h\0e\0l\0", 6) << QString::fromLatin1("hel") << true; @@ -1784,13 +1784,13 @@ void tst_QTextCodec::utfHeaders_data() QTest::newRow("utf16-be bom be") << QByteArray("UTF-16BE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\xfe\xff\0h\0e\0l", 8) << QString::fromLatin1("hel") << true; QTest::newRow("utf16-be nobom") << QByteArray("UTF-16BE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\0h\0e\0l", 6) << QString::fromLatin1("hel") << true; @@ -1803,13 +1803,13 @@ void tst_QTextCodec::utfHeaders_data() QTest::newRow("utf16-le bom le") << QByteArray("UTF-16LE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\xff\xfeh\0e\0l\0", 8) << QString::fromLatin1("hel") << true; QTest::newRow("utf16-le nobom") << QByteArray("UTF-16LE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("h\0e\0l\0", 6) << QString::fromLatin1("hel") << true; @@ -1823,20 +1823,20 @@ void tst_QTextCodec::utfHeaders_data() QTest::newRow("utf32 bom be") << QByteArray("UTF-32") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) << QString::fromLatin1("hel") << true; QTest::newRow("utf32 bom le") << QByteArray("UTF-32") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) << QString::fromLatin1("hel") << true; if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { QTest::newRow("utf32 nobom") << QByteArray("UTF-32") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12) << QString::fromLatin1("hel") << true; @@ -1849,7 +1849,7 @@ void tst_QTextCodec::utfHeaders_data() } else { QTest::newRow("utf32 nobom") << QByteArray("UTF-32") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("h\0\0\0e\0\0\0l\0\0\0", 12) << QString::fromLatin1("hel") << true; @@ -1864,13 +1864,13 @@ void tst_QTextCodec::utfHeaders_data() QTest::newRow("utf32-be bom be") << QByteArray("UTF-32BE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) << QString::fromLatin1("hel") << true; QTest::newRow("utf32-be nobom") << QByteArray("UTF-32BE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12) << QString::fromLatin1("hel") << true; @@ -1884,13 +1884,13 @@ void tst_QTextCodec::utfHeaders_data() QTest::newRow("utf32-le bom le") << QByteArray("UTF-32LE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) << QString::fromLatin1("hel") << true; QTest::newRow("utf32-le nobom") << QByteArray("UTF-32LE") - << 0 + << (int)QTextCodec::DefaultConversion << QByteArray("h\0\0\0e\0\0\0l\0\0\0", 12) << QString::fromLatin1("hel") << true; diff --git a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp index c94f8146ff..7840c0e1c9 100644 --- a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp +++ b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp @@ -109,7 +109,7 @@ void tst_QStringConverter::nonFlaggedCodepointFFFF() const QCOMPARE(asDecoded, QByteArray("\357\277\277")); QByteArray ffff("\357\277\277"); - QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::ConvertInvalidToNull); + QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::Flag::ConvertInvalidToNull); QVERIFY(decoder.isValid()); QVERIFY(decoder(ffff) == QString(1, ch)); } @@ -138,7 +138,7 @@ void tst_QStringConverter::flagF7808080() const input[2] = char(0x80); input[3] = char(0x80); - QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::ConvertInvalidToNull); + QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::Flag::ConvertInvalidToNull); QVERIFY(decoder.isValid()); QCOMPARE(decoder(input), QString(input.size(), QChar(0))); @@ -156,7 +156,7 @@ void tst_QStringConverter::nonFlaggedEFBFBF() const validInput[2] = char(0xBF); { - QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::ConvertInvalidToNull); + QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::Flag::ConvertInvalidToNull); QVERIFY(decoder.isValid()); QVERIFY(decoder(validInput) == QString::fromUtf8(QByteArray::fromHex("EFBFBF"))); } @@ -166,7 +166,7 @@ void tst_QStringConverter::nonFlaggedEFBFBF() const QByteArray start("B"); start.append(validInput); - QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::ConvertInvalidToNull); + QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::Flag::ConvertInvalidToNull); QVERIFY(decoder.isValid()); QVERIFY(decoder(start) == QString::fromUtf8(QByteArray("B").append(QByteArray::fromHex("EFBFBF")))); } @@ -1202,7 +1202,7 @@ void tst_QStringConverter::utf8Codec() QFETCH(QString, res); QFETCH(int, len); - QStringDecoder decoder(QStringDecoder::Utf8, QStringDecoder::Stateless); + QStringDecoder decoder(QStringDecoder::Utf8, QStringDecoder::Flag::Stateless); QString str = decoder(utf8.isNull() ? 0 : utf8.constData(), len < 0 ? qstrlen(utf8.constData()) : len); QCOMPARE(str, res); @@ -1364,154 +1364,154 @@ void tst_QStringConverter::utfHeaders_data() QTest::newRow("utf8 bom") << QStringConverter::Utf8 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\xef\xbb\xbfhello") << QString::fromLatin1("hello"); QTest::newRow("utf8 nobom") << QStringConverter::Utf8 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("hello") << QString::fromLatin1("hello"); QTest::newRow("utf8 bom ignore header") << QStringConverter::Utf8 - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\xef\xbb\xbfhello") << (QString(QChar(0xfeff)) + QString::fromLatin1("hello")); QTest::newRow("utf8 nobom ignore header") << QStringConverter::Utf8 - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("hello") << QString::fromLatin1("hello"); QTest::newRow("utf16 bom be") << QStringConverter::Utf16 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\xfe\xff\0h\0e\0l", 8) << QString::fromLatin1("hel"); QTest::newRow("utf16 bom le") << QStringConverter::Utf16 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\xff\xfeh\0e\0l\0", 8) << QString::fromLatin1("hel"); if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { QTest::newRow("utf16 nobom") << QStringConverter::Utf16 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\0h\0e\0l", 6) << QString::fromLatin1("hel"); QTest::newRow("utf16 bom be ignore header") << QStringConverter::Utf16 - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\xfe\xff\0h\0e\0l", 8) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); } else { QTest::newRow("utf16 nobom") << QStringConverter::Utf16 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("h\0e\0l\0", 6) << QString::fromLatin1("hel"); QTest::newRow("utf16 bom le ignore header") << QStringConverter::Utf16 - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\xff\xfeh\0e\0l\0", 8) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); } QTest::newRow("utf16-be bom be") << QStringConverter::Utf16BE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\xfe\xff\0h\0e\0l", 8) << QString::fromLatin1("hel"); QTest::newRow("utf16-be nobom") << QStringConverter::Utf16BE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\0h\0e\0l", 6) << QString::fromLatin1("hel"); QTest::newRow("utf16-be bom be ignore header") << QStringConverter::Utf16BE - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\xfe\xff\0h\0e\0l", 8) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); QTest::newRow("utf16-le bom le") << QStringConverter::Utf16LE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\xff\xfeh\0e\0l\0", 8) << QString::fromLatin1("hel"); QTest::newRow("utf16-le nobom") << QStringConverter::Utf16LE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("h\0e\0l\0", 6) << QString::fromLatin1("hel"); QTest::newRow("utf16-le bom le ignore header") << QStringConverter::Utf16LE - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\xff\xfeh\0e\0l\0", 8) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); QTest::newRow("utf32 bom be") << QStringConverter::Utf32 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) << QString::fromLatin1("hel"); QTest::newRow("utf32 bom le") << QStringConverter::Utf32 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) << QString::fromLatin1("hel"); if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { QTest::newRow("utf32 nobom") << QStringConverter::Utf32 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12) << QString::fromLatin1("hel"); QTest::newRow("utf32 bom be ignore header") << QStringConverter::Utf32 - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); } else { QTest::newRow("utf32 nobom") << QStringConverter::Utf32 - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("h\0\0\0e\0\0\0l\0\0\0", 12) << QString::fromLatin1("hel"); QTest::newRow("utf32 bom le ignore header") << QStringConverter::Utf32 - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); } QTest::newRow("utf32-be bom be") << QStringConverter::Utf32BE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) << QString::fromLatin1("hel"); QTest::newRow("utf32-be nobom") << QStringConverter::Utf32BE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12) << QString::fromLatin1("hel"); QTest::newRow("utf32-be bom be ignore header") << QStringConverter::Utf32BE - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); QTest::newRow("utf32-le bom le") << QStringConverter::Utf32LE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) << QString::fromLatin1("hel"); QTest::newRow("utf32-le nobom") << QStringConverter::Utf32LE - << QStringConverter::DefaultConversion + << QStringConverter::Flag::WriteBom << QByteArray("h\0\0\0e\0\0\0l\0\0\0", 12) << QString::fromLatin1("hel"); QTest::newRow("utf32-le bom le ignore header") << QStringConverter::Utf32LE - << QStringConverter::IgnoreHeader + << QStringConverter::Flag::DontSkipInitialBom << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")); } |