summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-04-22 14:39:27 +0200
committerLars Knoll <lars.knoll@qt.io>2020-05-14 07:47:33 +0200
commitcab0d57d1eb02d93774f4e444cb4514400bac0e9 (patch)
tree49f59bd135fcd071367d529b64304ca4e864fdc9 /tests
parent542ded462ef637dd48b29ba10845c3afb76ec126 (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.cpp38
-rw-r--r--tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp66
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"));
}