summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/codecs/qtextcodec.h4
-rw-r--r--src/corelib/serialization/qtextstream.cpp4
-rw-r--r--src/corelib/text/qstringconverter.cpp93
-rw-r--r--src/corelib/text/qstringconverter.h28
-rw-r--r--tests/auto/corelib/codecs/qtextcodec/tst_qtextcodec.cpp38
-rw-r--r--tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp66
6 files changed, 123 insertions, 110 deletions
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h
index 03e8f95ce1..84e875c91f 100644
--- a/src/corelib/codecs/qtextcodec.h
+++ b/src/corelib/codecs/qtextcodec.h
@@ -60,6 +60,10 @@ public:
using ConversionFlags = QStringConverterBase::Flags;
using ConverterState = QStringConverterBase::State;
+ static constexpr Flag ConvertInvalidToNull = Flag::ConvertInvalidToNull;
+ static constexpr Flag DefaultConversion = Flag::WriteBom;
+ static constexpr Flag IgnoreHeader = Flag::DontSkipInitialBom;
+
static QTextCodec* codecForName(const QByteArray &name);
static QTextCodec* codecForName(const char *name) { return codecForName(QByteArray(name)); }
static QTextCodec* codecForMib(int mib);
diff --git a/src/corelib/serialization/qtextstream.cpp b/src/corelib/serialization/qtextstream.cpp
index a970397419..a2af401a41 100644
--- a/src/corelib/serialization/qtextstream.cpp
+++ b/src/corelib/serialization/qtextstream.cpp
@@ -3257,7 +3257,7 @@ void QTextStream::setGenerateByteOrderMark(bool generate)
{
Q_D(QTextStream);
if (d->writeBuffer.isEmpty()) {
- d->writeConverterState.flags.setFlag(QTextCodec::IgnoreHeader, !generate);
+ d->writeConverterState.flags.setFlag(QStringConverter::Flag::WriteBom, generate);
}
}
@@ -3271,7 +3271,7 @@ void QTextStream::setGenerateByteOrderMark(bool generate)
bool QTextStream::generateByteOrderMark() const
{
Q_D(const QTextStream);
- return (d->writeConverterState.flags & QTextCodec::IgnoreHeader) == 0;
+ return (d->writeConverterState.flags & QStringConverter::Flag::WriteBom);
}
#endif
diff --git a/src/corelib/text/qstringconverter.cpp b/src/corelib/text/qstringconverter.cpp
index 5858dc3e0f..fd716da15a 100644
--- a/src/corelib/text/qstringconverter.cpp
+++ b/src/corelib/text/qstringconverter.cpp
@@ -373,6 +373,8 @@ static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end,
}
#endif
+enum { HeaderDone = 1 };
+
QByteArray QUtf8::convertFromUnicode(const QChar *uc, qsizetype len)
{
// create a QByteArray with the worst case scenario size
@@ -405,23 +407,25 @@ QByteArray QUtf8::convertFromUnicode(const QChar *uc, qsizetype len, QStringConv
uchar replacement = '?';
qsizetype rlen = 3*len;
int surrogate_high = -1;
+ bool writeBom = false;
if (state) {
- if (state->flags & QStringConverter::ConvertInvalidToNull)
+ if (state->flags & QStringConverter::Flag::ConvertInvalidToNull)
replacement = 0;
- if (!(state->flags & QStringConverter::IgnoreHeader))
+ if (!(state->internalState & HeaderDone) && state->flags & QStringConverter::Flag::WriteBom) {
rlen += 3;
+ writeBom = true;
+ }
if (state->remainingChars)
surrogate_high = state->state_data[0];
}
-
QByteArray rstr(rlen, Qt::Uninitialized);
uchar *cursor = reinterpret_cast<uchar *>(const_cast<char *>(rstr.constData()));
const ushort *src = reinterpret_cast<const ushort *>(uc);
const ushort *const end = src + len;
int invalid = 0;
- if (state && !(state->flags & QStringConverter::IgnoreHeader)) {
+ if (writeBom) {
// append UTF-8 BOM
*cursor++ = utf8bom[0];
*cursor++ = utf8bom[1];
@@ -459,7 +463,7 @@ QByteArray QUtf8::convertFromUnicode(const QChar *uc, qsizetype len, QStringConv
rstr.resize(cursor - (const uchar*)rstr.constData());
if (state) {
state->invalidChars += invalid;
- state->flags |= QStringConverter::IgnoreHeader;
+ state->internalState |= HeaderDone;
state->remainingChars = 0;
if (surrogate_high >= 0) {
state->remainingChars = 1;
@@ -545,7 +549,7 @@ QChar *QUtf8::convertToUnicode(QChar *buffer, const char *chars, qsizetype len)
QString QUtf8::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state)
{
- bool headerdone = false;
+ bool headerdone = state && state->internalState & HeaderDone;
ushort replacement = QChar::ReplacementCharacter;
int invalid = 0;
int res;
@@ -568,9 +572,9 @@ QString QUtf8::convertToUnicode(const char *chars, qsizetype len, QStringConvert
const uchar *end = src + len;
if (state) {
- if (state->flags & QStringConverter::IgnoreHeader)
+ if (state->flags & QStringConverter::Flag::DontSkipInitialBom)
headerdone = true;
- if (state->flags & QStringConverter::ConvertInvalidToNull)
+ if (state->flags & QStringConverter::Flag::ConvertInvalidToNull)
replacement = QChar::Null;
if (state->remainingChars) {
// handle incoming state first
@@ -636,7 +640,7 @@ QString QUtf8::convertToUnicode(const char *chars, qsizetype len, QStringConvert
}
}
- if (!state && res == QUtf8BaseTraits::EndOfString) {
+ if ((!state || state->flags & QStringConverter::Flag::Stateless) && res == QUtf8BaseTraits::EndOfString) {
// unterminated UTF sequence
*dst++ = QChar::ReplacementCharacter;
while (src++ < end)
@@ -647,7 +651,7 @@ QString QUtf8::convertToUnicode(const char *chars, qsizetype len, QStringConvert
if (state) {
state->invalidChars += invalid;
if (headerdone)
- state->flags |= QStringConverter::IgnoreHeader;
+ state->internalState |= HeaderDone;
if (res == QUtf8BaseTraits::EndOfString) {
--src; // unread the byte in ch
state->remainingChars = end - src;
@@ -748,21 +752,20 @@ int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, QLatin1String s)
return (end1 > src1) - (end2 > src2);
}
-QByteArray QUtf16::convertFromUnicode(const QChar *uc, qsizetype len, QStringConverter::State *state, DataEndianness e)
+QByteArray QUtf16::convertFromUnicode(const QChar *uc, qsizetype len, QStringConverter::State *state, DataEndianness endian)
{
- DataEndianness endian = e;
+ bool writeBom = state && !(state->internalState & HeaderDone) && state->flags & QStringConverter::Flag::WriteBom;
qsizetype length = 2*len;
- if (!state || (!(state->flags & QStringConverter::IgnoreHeader))) {
+ if (writeBom)
length += 2;
- }
- if (e == DetectEndianness) {
+
+ if (endian == DetectEndianness)
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness;
- }
QByteArray d;
d.resize(length);
char *data = d.data();
- if (!state || !(state->flags & QStringConverter::IgnoreHeader)) {
+ if (writeBom) {
QChar bom(QChar::ByteOrderMark);
if (endian == BigEndianness)
qToBigEndian(bom.unicode(), data);
@@ -777,19 +780,19 @@ QByteArray QUtf16::convertFromUnicode(const QChar *uc, qsizetype len, QStringCon
if (state) {
state->remainingChars = 0;
- state->flags |= QStringConverter::IgnoreHeader;
+ state->internalState |= HeaderDone;
}
return d;
}
-QString QUtf16::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness e)
+QString QUtf16::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian)
{
- DataEndianness endian = e;
bool half = false;
uchar buf = 0;
- bool headerdone = false;
+ bool headerdone = state && state->internalState & HeaderDone;
if (state) {
- headerdone = state->flags & QStringConverter::IgnoreHeader;
+ if (state->flags & QStringConverter::Flag::DontSkipInitialBom)
+ headerdone = true;
if (endian == DetectEndianness)
endian = (DataEndianness)state->state_data[Endian];
if (state->remainingChars) {
@@ -844,7 +847,7 @@ QString QUtf16::convertToUnicode(const char *chars, qsizetype len, QStringConver
if (state) {
if (headerdone)
- state->flags |= QStringConverter::IgnoreHeader;
+ state->internalState |= HeaderDone;
state->state_data[Endian] = endian;
if (half) {
state->remainingChars = 1;
@@ -857,20 +860,19 @@ QString QUtf16::convertToUnicode(const char *chars, qsizetype len, QStringConver
return result;
}
-QByteArray QUtf32::convertFromUnicode(const QChar *uc, qsizetype len, QStringConverter::State *state, DataEndianness e)
+QByteArray QUtf32::convertFromUnicode(const QChar *uc, qsizetype len, QStringConverter::State *state, DataEndianness endian)
{
- DataEndianness endian = e;
+ bool writeBom = state && !(state->internalState & HeaderDone) && state->flags & QStringConverter::Flag::WriteBom;
qsizetype length = 4*len;
- if (!state || (!(state->flags & QStringConverter::IgnoreHeader))) {
+ if (writeBom)
length += 4;
- }
- if (e == DetectEndianness) {
+
+ if (endian == DetectEndianness)
endian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? BigEndianness : LittleEndianness;
- }
QByteArray d(length, Qt::Uninitialized);
char *data = d.data();
- if (!state || !(state->flags & QStringConverter::IgnoreHeader)) {
+ if (writeBom) {
if (endian == BigEndianness) {
data[0] = 0;
data[1] = 0;
@@ -902,22 +904,21 @@ QByteArray QUtf32::convertFromUnicode(const QChar *uc, qsizetype len, QStringCon
if (state) {
state->remainingChars = 0;
- state->flags |= QStringConverter::IgnoreHeader;
+ state->internalState |= HeaderDone;
}
return d;
}
-QString QUtf32::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness e)
+QString QUtf32::convertToUnicode(const char *chars, qsizetype len, QStringConverter::State *state, DataEndianness endian)
{
- DataEndianness endian = e;
uchar tuple[4];
int num = 0;
- bool headerdone = false;
+ bool headerdone = state && state->internalState & HeaderDone;
if (state) {
- headerdone = state->flags & QStringConverter::IgnoreHeader;
- if (endian == DetectEndianness) {
+ if (state->flags & QStringConverter::Flag::DontSkipInitialBom)
+ headerdone = true;
+ if (endian == DetectEndianness)
endian = (DataEndianness)state->state_data[Endian];
- }
num = state->remainingChars;
memcpy(tuple, &state->state_data[Data], 4);
}
@@ -963,7 +964,7 @@ QString QUtf32::convertToUnicode(const char *chars, qsizetype len, QStringConver
if (state) {
if (headerdone)
- state->flags |= QStringConverter::IgnoreHeader;
+ state->internalState |= HeaderDone;
state->state_data[Endian] = endian;
state->remainingChars = num;
memcpy(&state->state_data[Data], tuple, 4);
@@ -1178,10 +1179,17 @@ QByteArray QLocal8Bit::convertFromUnicode(const QChar *ch, qsizetype uclen, QStr
/*!
\enum QStringConverter::Flag
- \value DefaultConversion No flag is set.
+ \value Default Default conversion rules apply.
\value ConvertInvalidToNull If this flag is set, each invalid input
- character is output as a null character.
- \value IgnoreHeader Ignore any Unicode byte-order mark and don't generate any.
+ character is output as a null character. If it is not set,
+ invalid input characters are represented as QChar::ReplacementCharacter
+ if the output encoding can represent that character, otherwise as a question mark.
+ \value WriteBom When converting from a QString to an output encoding, write a QChar::ByteOrderMark as the first
+ character if the output encoding supports this. This is the case for UTF-8, UTF-16 and UTF-32
+ encodings.
+ \value DontSkipInitialBom When converting from an input encoding to a QString the QTextDecoder usually skips an
+ leading QChar::ByteOrderMark. When this flag is set, the byte order mark will not be
+ skipped, but inserted at the start of the created QString.
\value Stateless Ignore possible converter states between different function calls
to encode or decode strings.
@@ -1196,6 +1204,7 @@ void QStringConverter::State::clear()
state_data[0] = state_data[1] = state_data[2] = state_data[3] = 0;
remainingChars = 0;
invalidChars = 0;
+ internalState = 0;
}
static QChar *fromUtf8(QChar *out, const char *in, qsizetype length, QStringConverter::State *state)
@@ -1307,7 +1316,7 @@ static QChar *fromLatin1(QChar *out, const char *chars, qsizetype len, QStringCo
static char *toLatin1(char *out, QStringView in, QStringConverter::State *state)
{
- const char replacement = (state && state->flags & QStringConverter::ConvertInvalidToNull) ? 0 : '?';
+ const char replacement = (state && state->flags & QStringConverter::Flag::ConvertInvalidToNull) ? 0 : '?';
int invalid = 0;
for (qsizetype i = 0; i < in.length(); ++i) {
if (in[i] > QChar(0xff)) {
diff --git a/src/corelib/text/qstringconverter.h b/src/corelib/text/qstringconverter.h
index f2b78508e6..3f657c9935 100644
--- a/src/corelib/text/qstringconverter.h
+++ b/src/corelib/text/qstringconverter.h
@@ -57,16 +57,17 @@ QT_BEGIN_NAMESPACE
class QStringConverterBase
{
public:
- enum Flag {
- DefaultConversion,
- ConvertInvalidToNull = 0x1,
- IgnoreHeader = 0x2,
- Stateless = 0x4
+ enum class Flag {
+ Default = 0,
+ Stateless = 0x1,
+ ConvertInvalidToNull = 0x2,
+ WriteBom = 0x4,
+ DontSkipInitialBom = 0x8
};
Q_DECLARE_FLAGS(Flags, Flag)
struct State {
- constexpr State(Flags f = DefaultConversion)
+ constexpr State(Flags f = Flag::Default)
: flags(f), state_data{0, 0, 0, 0} {}
~State() { clear(); }
State(State &&other)
@@ -91,6 +92,7 @@ public:
Q_CORE_EXPORT void clear();
Flags flags;
+ int internalState = 0;
qsizetype remainingChars = 0;
qsizetype invalidChars = 0;
@@ -166,9 +168,7 @@ protected:
: QStringConverter(i)
{}
public:
- // ### We shouldn't write a BOM by default. Need to resolve this
- // while keeping compat with QTextCodec
- QSTRINGCONVERTER_CONSTEXPR QStringEncoder(Encoding encoding, Flags flags = IgnoreHeader)
+ QSTRINGCONVERTER_CONSTEXPR QStringEncoder(Encoding encoding, Flags flags = Flag::Default)
: QStringConverter(encoding, flags)
{}
@@ -200,13 +200,13 @@ public:
qsizetype requiredSpace(qsizetype inputLength) const
{ return iface->fromUtf16Len(inputLength); }
char *decodeIntoBuffer(char *out, const QChar *in, qsizetype length)
- { return iface->fromUtf16(out, QStringView(in, length), state.flags & Stateless ? nullptr : &state); }
+ { return iface->fromUtf16(out, QStringView(in, length), state.flags & Flag::Stateless ? nullptr : &state); }
QByteArray encode(QStringView in)
{
QByteArray result(iface->fromUtf16Len(in.size()), Qt::Uninitialized);
char *out = result.data();
// ### Fixme: needs to be moved into the conversion methods to honor the other flags
- out = iface->fromUtf16(out, in, state.flags & Stateless ? nullptr : &state);
+ out = iface->fromUtf16(out, in, state.flags & Flag::Stateless ? nullptr : &state);
result.truncate(out - result.constData());
return result;
}
@@ -229,7 +229,7 @@ protected:
: QStringConverter(i)
{}
public:
- QSTRINGCONVERTER_CONSTEXPR QStringDecoder(Encoding encoding, Flags flags = DefaultConversion)
+ QSTRINGCONVERTER_CONSTEXPR QStringDecoder(Encoding encoding, Flags flags = Flag::Default)
: QStringConverter(encoding, flags)
{}
@@ -259,13 +259,13 @@ public:
qsizetype requiredSpace(qsizetype inputLength) const
{ return iface->toUtf16Len(inputLength); }
QChar *decodeIntoBuffer(QChar *out, const char *in, qsizetype length)
- { return iface->toUtf16(out, in, length, state.flags & Stateless ? nullptr : &state); }
+ { return iface->toUtf16(out, in, length, state.flags & Flag::Stateless ? nullptr : &state); }
QString decode(const char *in, qsizetype length)
{
QString result(iface->toUtf16Len(length), Qt::Uninitialized);
QChar *out = result.data();
// ### Fixme: state handling needs to be moved into the conversion methods
- out = iface->toUtf16(out, in, length, state.flags & Stateless ? nullptr : &state);
+ out = iface->toUtf16(out, in, length, state.flags & Flag::Stateless ? nullptr : &state);
result.truncate(out - result.constData());
return result;
}
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"));
}