From fdaa78b4ab7f02f9213fdec2a8e18d896d504a45 Mon Sep 17 00:00:00 2001 From: Chris Adams Date: Thu, 1 Oct 2020 13:35:34 +1000 Subject: QTextCodec is now part of the Qt5Compat library Change-Id: I9d6a6d46822d4f82debb1446a90443857f27c962 Reviewed-by: Pekka Vuorela Reviewed-by: Alberto Mardegan --- src/versit/qvcard21writer.cpp | 8 ++--- src/versit/qvcard30writer.cpp | 3 +- src/versit/qversitdocumentwriter_p.cpp | 20 ++++++------ src/versit/qversitproperty.cpp | 4 +-- src/versit/qversitreader.cpp | 3 +- src/versit/qversitreader_p.cpp | 3 +- src/versit/qversitutils.cpp | 4 +-- src/versit/qversitwriter.cpp | 4 +-- src/versit/qversitwriter_p.cpp | 3 +- src/versit/versit.pro | 2 +- .../auto/versit/qvcard21writer/qvcard21writer.pro | 2 +- .../versit/qvcard21writer/tst_qvcard21writer.cpp | 2 ++ .../auto/versit/qvcard30writer/qvcard30writer.pro | 2 +- .../versit/qvcard30writer/tst_qvcard30writer.cpp | 2 ++ tests/auto/versit/qversitreader/qversitreader.pro | 2 +- .../versit/qversitreader/tst_qversitreader.cpp | 37 ++++++++++++---------- tests/auto/versit/qversitwriter/qversitwriter.pro | 2 +- .../versit/qversitwriter/tst_qversitwriter.cpp | 13 ++++++-- 18 files changed, 69 insertions(+), 47 deletions(-) diff --git a/src/versit/qvcard21writer.cpp b/src/versit/qvcard21writer.cpp index a890c208b..0d6a78b6f 100644 --- a/src/versit/qvcard21writer.cpp +++ b/src/versit/qvcard21writer.cpp @@ -40,9 +40,10 @@ #include "qvcard21writer_p.h" #include -#include #include +#include + #include "qversitproperty.h" #include @@ -58,9 +59,8 @@ QTextEncoder* QVCard21Writer::utf8Encoder() { static QTextEncoder* encoder = 0; if (encoder == 0) { - encoder = QTextCodec::codecForName("UTF-8")->makeEncoder(); - // Hack so the encoder doesn't output a byte order mark - encoder->fromUnicode(QString()); + // prevent output of byte order mark for UTF-8 encoding + encoder = QTextCodec::codecForName("UTF-8")->makeEncoder(QStringConverterBase::Flag::Default); } return encoder; } diff --git a/src/versit/qvcard30writer.cpp b/src/versit/qvcard30writer.cpp index 592bb6220..ef182f02c 100644 --- a/src/versit/qvcard30writer.cpp +++ b/src/versit/qvcard30writer.cpp @@ -41,9 +41,10 @@ #include #include -#include #include +#include + #include "qversitproperty.h" #include "qversitutils_p.h" diff --git a/src/versit/qversitdocumentwriter_p.cpp b/src/versit/qversitdocumentwriter_p.cpp index 47a956a1b..0793a08e5 100644 --- a/src/versit/qversitdocumentwriter_p.cpp +++ b/src/versit/qversitdocumentwriter_p.cpp @@ -40,7 +40,9 @@ #include "qversitdocumentwriter_p.h" #include -#include +#include + +#include #include "qversitutils_p.h" @@ -86,11 +88,9 @@ void QVersitDocumentWriter::setCodec(QTextCodec *codec) if (mEncoder) delete mEncoder; mCodec = codec; - mEncoder = codec->makeEncoder(); - - // Hack so the encoder doesn't output a byte order mark for UTF-8. - if (mCodec->name() == "UTF-8") - mEncoder->fromUnicode(QString()); + mEncoder = codec->makeEncoder(mCodec->name() == QByteArrayLiteral("UTF-8") + ? QStringConverterBase::Flag::Default + : QStringConverterBase::Flag::WriteBom); // UTF-(16|32)(LE|BE) are the only codecs where characters in the base64 range aren't encoded // the same as in ASCII. For ASCII compatible codecs, we can do some optimizations. @@ -225,14 +225,16 @@ void QVersitDocumentWriter::writeString(const QString &value) // Write the first "spaceRemaining" characters QStringRef line(&value, charsWritten, spaceRemaining); charsWritten += spaceRemaining; - if (mDevice->write(mEncoder->fromUnicode(line.constData(), line.length())) < 0 - || mDevice->write(mEncoder->fromUnicode(crlfSpace)) < 0) + const QByteArray encodedLine = mEncoder->fromUnicode(line.constData(), line.length()); + const QByteArray encodedCrlfSpace = mEncoder->fromUnicode(crlfSpace); + if (mDevice->write(encodedLine) < 0 || mDevice->write(encodedCrlfSpace) < 0) mSuccessful = false; spaceRemaining = MAX_LINE_LENGTH - 1; // minus 1 for the space at the front. mCurrentLineLength = 1; } - if (mDevice->write(mEncoder->fromUnicode(value.mid(charsWritten))) < 0) + const QByteArray encodedRemainder = mEncoder->fromUnicode(value.mid(charsWritten)); + if (mDevice->write(encodedRemainder) < 0) mSuccessful = false; mCurrentLineLength += value.length() - charsWritten; } diff --git a/src/versit/qversitproperty.cpp b/src/versit/qversitproperty.cpp index b0999c011..af7f8ec5f 100644 --- a/src/versit/qversitproperty.cpp +++ b/src/versit/qversitproperty.cpp @@ -39,13 +39,13 @@ #include "qversitproperty.h" #include "qversitproperty_p.h" +#include "qversitdocument.h" #ifndef QT_NO_DEBUG_STREAM #include #endif -#include -#include "qversitdocument.h" +#include QT_BEGIN_NAMESPACE_VERSIT diff --git a/src/versit/qversitreader.cpp b/src/versit/qversitreader.cpp index 0964c5c89..17708efdf 100644 --- a/src/versit/qversitreader.cpp +++ b/src/versit/qversitreader.cpp @@ -41,7 +41,8 @@ #include "qversitreader_p.h" #include -#include + +#include QT_BEGIN_NAMESPACE_VERSIT diff --git a/src/versit/qversitreader_p.cpp b/src/versit/qversitreader_p.cpp index b8300e705..6e240642f 100644 --- a/src/versit/qversitreader_p.cpp +++ b/src/versit/qversitreader_p.cpp @@ -40,9 +40,10 @@ #include "qversitreader_p.h" #include -#include #include +#include + #include "qversitutils_p.h" QT_BEGIN_NAMESPACE_VERSIT diff --git a/src/versit/qversitutils.cpp b/src/versit/qversitutils.cpp index f9bde18d0..08ff3901d 100644 --- a/src/versit/qversitutils.cpp +++ b/src/versit/qversitutils.cpp @@ -39,15 +39,15 @@ #include "qversitutils_p.h" -#include #include -#include #include #include #include #include +#include + #include "qversitdocument.h" QT_BEGIN_NAMESPACE_VERSIT diff --git a/src/versit/qversitwriter.cpp b/src/versit/qversitwriter.cpp index f377a6a3e..150bbae56 100644 --- a/src/versit/qversitwriter.cpp +++ b/src/versit/qversitwriter.cpp @@ -39,11 +39,11 @@ #include "qversitwriter.h" #include "qversitwriter_p.h" +#include "qversitutils_p.h" #include -#include -#include "qversitutils_p.h" +#include QT_BEGIN_NAMESPACE_VERSIT diff --git a/src/versit/qversitwriter_p.cpp b/src/versit/qversitwriter_p.cpp index 3b158382a..f10495f0e 100644 --- a/src/versit/qversitwriter_p.cpp +++ b/src/versit/qversitwriter_p.cpp @@ -41,7 +41,8 @@ #include #include -#include + +#include #include "qvcard21writer_p.h" #include "qvcard30writer_p.h" diff --git a/src/versit/versit.pro b/src/versit/versit.pro index 06093a18b..c91928cb7 100644 --- a/src/versit/versit.pro +++ b/src/versit/versit.pro @@ -1,5 +1,5 @@ TARGET = QtVersit -QT = core contacts +QT = core contacts core5compat MODULE_PLUGIN_TYPES = \ versit diff --git a/tests/auto/versit/qvcard21writer/qvcard21writer.pro b/tests/auto/versit/qvcard21writer/qvcard21writer.pro index 7e023086d..6e5f8d9b2 100644 --- a/tests/auto/versit/qvcard21writer/qvcard21writer.pro +++ b/tests/auto/versit/qvcard21writer/qvcard21writer.pro @@ -1,6 +1,6 @@ include(../../auto.pri) -QT += versit versit-private +QT += versit versit-private core5compat HEADERS += tst_qvcard21writer.h SOURCES += tst_qvcard21writer.cpp diff --git a/tests/auto/versit/qvcard21writer/tst_qvcard21writer.cpp b/tests/auto/versit/qvcard21writer/tst_qvcard21writer.cpp index 2b47d77f0..7673ecd72 100644 --- a/tests/auto/versit/qvcard21writer/tst_qvcard21writer.cpp +++ b/tests/auto/versit/qvcard21writer/tst_qvcard21writer.cpp @@ -38,6 +38,8 @@ #include #include +#include + // This says "NOKIA" in Katakana const QString KATAKANA_NOKIA(QString::fromUtf8("\xe3\x83\x8e\xe3\x82\xad\xe3\x82\xa2")); diff --git a/tests/auto/versit/qvcard30writer/qvcard30writer.pro b/tests/auto/versit/qvcard30writer/qvcard30writer.pro index 03a7f2c91..7fd95fa53 100644 --- a/tests/auto/versit/qvcard30writer/qvcard30writer.pro +++ b/tests/auto/versit/qvcard30writer/qvcard30writer.pro @@ -1,6 +1,6 @@ include(../../auto.pri) -QT += versit versit-private +QT += versit versit-private core5compat DEFINES += QT_ASCII_CAST_WARNINGS diff --git a/tests/auto/versit/qvcard30writer/tst_qvcard30writer.cpp b/tests/auto/versit/qvcard30writer/tst_qvcard30writer.cpp index 9071f37da..53070558d 100644 --- a/tests/auto/versit/qvcard30writer/tst_qvcard30writer.cpp +++ b/tests/auto/versit/qvcard30writer/tst_qvcard30writer.cpp @@ -38,6 +38,8 @@ #include #include +#include + // This says "NOKIA" in Katakana encoded with UTF-8 const QString KATAKANA_NOKIA(QString::fromUtf8("\xe3\x83\x8e\xe3\x82\xad\xe3\x82\xa2")); diff --git a/tests/auto/versit/qversitreader/qversitreader.pro b/tests/auto/versit/qversitreader/qversitreader.pro index 1187b4c28..a8e269797 100644 --- a/tests/auto/versit/qversitreader/qversitreader.pro +++ b/tests/auto/versit/qversitreader/qversitreader.pro @@ -1,6 +1,6 @@ include(../../auto.pri) -QT += versit versit-private +QT += versit versit-private core5compat HEADERS += tst_qversitreader.h SOURCES += tst_qversitreader.cpp diff --git a/tests/auto/versit/qversitreader/tst_qversitreader.cpp b/tests/auto/versit/qversitreader/tst_qversitreader.cpp index 4af80ac03..9457d403f 100644 --- a/tests/auto/versit/qversitreader/tst_qversitreader.cpp +++ b/tests/auto/versit/qversitreader/tst_qversitreader.cpp @@ -35,6 +35,8 @@ #include #include +#include + // This says "NOKIA" in Katakana encoded with UTF-8 const QByteArray KATAKANA_NOKIA("\xe3\x83\x8e\xe3\x82\xad\xe3\x82\xa2"); @@ -1493,48 +1495,48 @@ void tst_QVersitReader::testExtractParts() // Empty value QByteArray text; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QVERIFY(parts.isEmpty()); // Only separator text = ";"; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QVERIFY(parts.isEmpty()); // One part text = "part"; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QCOMPARE(parts.count(),1); QCOMPARE(QLatin1String(parts[0]),QLatin1String("part")); // Separator in the beginning, one part text = ";part"; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QCOMPARE(parts.count(),1); QCOMPARE(QLatin1String(parts[0]),QLatin1String("part")); // Separator in the end, one part text = "part;"; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QCOMPARE(parts.count(),1); QCOMPARE(QLatin1String(parts[0]),QLatin1String("part")); // One part that contains escaped separator text = "part\\;"; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QCOMPARE(parts.count(),1); QCOMPARE(QLatin1String(parts[0]),QLatin1String("part\\;")); // Two parts text = "part1;part2"; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QCOMPARE(parts.count(),2); QCOMPARE(QLatin1String(parts[0]),QLatin1String("part1")); QCOMPARE(QLatin1String(parts[1]),QLatin1String("part2")); // Two parts that contain escaped separators text = "pa\\;rt1;par\\;t2"; - parts = mReaderPrivate->extractParts(text,";", mAsciiCodec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', mAsciiCodec), mAsciiCodec); QCOMPARE(parts.count(),2); QCOMPARE(QLatin1String(parts[0]),QLatin1String("pa\\;rt1")); QCOMPARE(QLatin1String(parts[1]),QLatin1String("par\\;t2")); @@ -1542,7 +1544,7 @@ void tst_QVersitReader::testExtractParts() // Test wide character support QTextCodec* codec = QTextCodec::codecForName("UTF-16BE"); text = codec->fromUnicode(QStringLiteral("part1;part2")); - parts = mReaderPrivate->extractParts(text,";", codec); + parts = mReaderPrivate->extractParts(text, VersitUtils::encode(';', codec), codec); QCOMPARE(parts.count(),2); QCOMPARE(codec->toUnicode(parts[0]),QStringLiteral("part1")); QCOMPARE(codec->toUnicode(parts[1]),QStringLiteral("part2")); @@ -1849,8 +1851,10 @@ void tst_QVersitReader::testReadLine() QFETCH(QList, expectedLines); QTextCodec* codec = QTextCodec::codecForName(codecName); - QTextEncoder* encoder = codec->makeEncoder(); - encoder->fromUnicode(QString()); + QTextEncoder* encoder = codec->makeEncoder(codecName == QStringLiteral("UTF-8") + ? QStringConverterBase::Flag::Default + : QStringConverterBase::Flag::WriteBom); + encoder->fromUnicode(QString()); // Throw away BOM. QByteArray bytes(encoder->fromUnicode(data)); @@ -1868,17 +1872,16 @@ void tst_QVersitReader::testReadLine() QVERIFY(!lineReader.atEnd()); LByteArray line = lineReader.readLine(); QCOMPARE(line.toByteArray(), testLine); - - QByteArray expectedBytes(encoder->fromUnicode(expectedLine)); QVERIFY(!lineReader.atEnd()); line = lineReader.readLine(); - if(line.toByteArray() != expectedBytes) { - qDebug() << line.toByteArray(); + QByteArray encodedLine = line.toByteArray(); + if (encodedLine != expectedBytes) { + qDebug() << encodedLine; qDebug() << expectedBytes; - QCOMPARE(line.toByteArray(), expectedBytes); + QCOMPARE(encodedLine, expectedBytes); } - QCOMPARE(line.size(), expectedBytes.length()); + QCOMPARE(encodedLine.size(), expectedBytes.length()); } // (test push a line to a line reader that's reached its end) diff --git a/tests/auto/versit/qversitwriter/qversitwriter.pro b/tests/auto/versit/qversitwriter/qversitwriter.pro index 947a219ad..15eff9518 100644 --- a/tests/auto/versit/qversitwriter/qversitwriter.pro +++ b/tests/auto/versit/qversitwriter/qversitwriter.pro @@ -1,6 +1,6 @@ include(../../auto.pri) -QT += versit versit-private +QT += versit versit-private core5compat HEADERS += tst_qversitwriter.h SOURCES += tst_qversitwriter.cpp diff --git a/tests/auto/versit/qversitwriter/tst_qversitwriter.cpp b/tests/auto/versit/qversitwriter/tst_qversitwriter.cpp index f0c4530cf..59f388932 100644 --- a/tests/auto/versit/qversitwriter/tst_qversitwriter.cpp +++ b/tests/auto/versit/qversitwriter/tst_qversitwriter.cpp @@ -35,6 +35,8 @@ #include #include +#include + QTVERSIT_USE_NAMESPACE void tst_QVersitWriter::init() @@ -168,7 +170,11 @@ END:VCARD\r\n"); QCOMPARE(mWriter->error(), QVersitWriter::NoError); mOutputDevice->seek(0); result = mOutputDevice->readAll(); - QByteArray expected(utf16->fromUnicode(QLatin1String(vCard21.data()))); + + QTextCodec::ConverterState state(QTextCodec::DefaultConversion); + const QString decodedData = QString::fromLatin1(vCard21.data()); + QByteArray expected(utf16->fromUnicode(decodedData.constData(), decodedData.size(), &state)); + QCOMPARE(result, expected); } @@ -278,7 +284,10 @@ void tst_QVersitWriter::testWritingDocument() QVERIFY2(mWriter->waitForFinished(), QString::number(mWriter->error()).toLatin1().data()); mOutputDevice->seek(0); result = mOutputDevice->readAll(); - expected = utf16->fromUnicode(QString::fromLatin1(expected)); + + QTextCodec::ConverterState state(QTextCodec::DefaultConversion); + const QString decodedData = QString::fromLatin1(expected); + expected = utf16->fromUnicode(decodedData.constData(), decodedData.size(), &state); if (result!=expected) qDebug() << result << expected; QCOMPARE(result, expected); } -- cgit v1.2.3