Qt5Compat: Add tests for TSCII QTextCodec code coverage

* Fix bug in conversion for Tamil virama sign according to the
  https://www.unicode.org/notes/tn15/Tscii2Unicode2.pdf document

Task-number: QTBUG-88183
Change-Id: Ibf09c3991dd01b583acdcbd622d3fc3fc82f1d80
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
This commit is contained in:
Karsten Heimrich 2020-11-19 13:26:26 +01:00
parent a864111a13
commit 63e9cb61ed
2 changed files with 97 additions and 47 deletions

View File

@ -199,87 +199,87 @@ static const ushort UnToTs [][4] = {
{0x0B93, 0x0000, 0x0000, 0xB5},
{0x0B94, 0x0000, 0x0000, 0xB6},
{0x0B95, 0x0000, 0x0000, 0xB8},
{0x0B95, 0x0B82, 0x0000, 0xEC},
{0x0B95, 0x0BC1, 0x0000, 0xCC},
{0x0B95, 0x0BC2, 0x0000, 0xDC},
{0x0B95, 0x0BCD, 0x0000, 0xEC},
{0x0B99, 0x0000, 0x0000, 0xB9},
{0x0B99, 0x0B82, 0x0000, 0xED},
{0x0B99, 0x0BC1, 0x0000, 0x99},
{0x0B99, 0x0BC2, 0x0000, 0x9B},
{0x0B99, 0x0BCD, 0x0000, 0xED},
{0x0B9A, 0x0000, 0x0000, 0xBA},
{0x0B9A, 0x0B82, 0x0000, 0xEE},
{0x0B9A, 0x0BC1, 0x0000, 0xCD},
{0x0B9A, 0x0BC2, 0x0000, 0xDD},
{0x0B9A, 0x0BCD, 0x0000, 0xEE},
{0x0B9C, 0x0000, 0x0000, 0x83},
{0x0B9C, 0x0B82, 0x0000, 0x88},
{0x0B9C, 0x0BCD, 0x0000, 0x88},
{0x0B9E, 0x0000, 0x0000, 0xBB},
{0x0B9E, 0x0B82, 0x0000, 0xEF},
{0x0B9E, 0x0BCD, 0x0000, 0xEF},
{0x0B9E, 0x0BC1, 0x0000, 0x9A},
{0x0B9E, 0x0BC2, 0x0000, 0x9C},
{0x0B9F, 0x0000, 0x0000, 0xBC},
{0x0B9F, 0x0B82, 0x0000, 0xF0},
{0x0B9F, 0x0BBF, 0x0000, 0xCA},
{0x0B9F, 0x0BC0, 0x0000, 0xCB},
{0x0B9F, 0x0BC1, 0x0000, 0xCE},
{0x0B9F, 0x0BC2, 0x0000, 0xDE},
{0x0BA1, 0x0B82, 0x0000, 0xF2},
{0x0B9F, 0x0BCD, 0x0000, 0xF0},
{0x0BA3, 0x0000, 0x0000, 0xBD},
{0x0BA3, 0x0B82, 0x0000, 0xF1},
{0x0BA3, 0x0BCD, 0x0000, 0xF1},
{0x0BA3, 0x0BC1, 0x0000, 0xCF},
{0x0BA3, 0x0BC2, 0x0000, 0xDF},
{0x0BA4, 0x0000, 0x0000, 0xBE},
{0x0BA4, 0x0BC1, 0x0000, 0xD0},
{0x0BA4, 0x0BC2, 0x0000, 0xE0},
{0x0BA4, 0x0BCD, 0x0000, 0xF2},
{0x0BA8, 0x0000, 0x0000, 0xBF},
{0x0BA8, 0x0B82, 0x0000, 0xF3},
{0x0BA8, 0x0BC1, 0x0000, 0xD1},
{0x0BA8, 0x0BC2, 0x0000, 0xE1},
{0x0BA8, 0x0BCD, 0x0000, 0xF3},
{0x0BA9, 0x0000, 0x0000, 0xC9},
{0x0BA9, 0x0B82, 0x0000, 0xFD},
{0x0BA9, 0x0BC1, 0x0000, 0xDB},
{0x0BA9, 0x0BC2, 0x0000, 0xEB},
{0x0BA9, 0x0BCD, 0x0000, 0xFD},
{0x0BAA, 0x0000, 0x0000, 0xC0},
{0x0BAA, 0x0B82, 0x0000, 0xF4},
{0x0BAA, 0x0BC1, 0x0000, 0xD2},
{0x0BAA, 0x0BC2, 0x0000, 0xE2},
{0x0BAA, 0x0BCD, 0x0000, 0xF4},
{0x0BAE, 0x0000, 0x0000, 0xC1},
{0x0BAE, 0x0B82, 0x0000, 0xF5},
{0x0BAE, 0x0BC1, 0x0000, 0xD3},
{0x0BAE, 0x0BC2, 0x0000, 0xE3},
{0x0BAE, 0x0BCD, 0x0000, 0xF5},
{0x0BAF, 0x0000, 0x0000, 0xC2},
{0x0BAF, 0x0B82, 0x0000, 0xF6},
{0x0BAF, 0x0BC1, 0x0000, 0xD4},
{0x0BAF, 0x0BC2, 0x0000, 0xE4},
{0x0BAF, 0x0BCD, 0x0000, 0xF6},
{0x0BB0, 0x0000, 0x0000, 0xC3},
{0x0BB0, 0x0B82, 0x0000, 0xF7},
{0x0BB0, 0x0BC1, 0x0000, 0xD5},
{0x0BB0, 0x0BC2, 0x0000, 0xE5},
{0x0BB0, 0x0BCD, 0x0000, 0xF7},
{0x0BB1, 0x0000, 0x0000, 0xC8},
{0x0BB1, 0x0B82, 0x0000, 0xFC},
{0x0BB1, 0x0BC1, 0x0000, 0xDA},
{0x0BB1, 0x0BC2, 0x0000, 0xEA},
{0x0BB1, 0x0BCD, 0x0000, 0xFC},
{0x0BB2, 0x0000, 0x0000, 0xC4},
{0x0BB2, 0x0B82, 0x0000, 0xF8},
{0x0BB2, 0x0BC1, 0x0000, 0xD6},
{0x0BB2, 0x0BC2, 0x0000, 0xE6},
{0x0BB2, 0x0BCD, 0x0000, 0xF8},
{0x0BB3, 0x0000, 0x0000, 0xC7},
{0x0BB3, 0x0B82, 0x0000, 0xFB},
{0x0BB3, 0x0BC1, 0x0000, 0xD9},
{0x0BB3, 0x0BC2, 0x0000, 0xE9},
{0x0BB3, 0x0BCD, 0x0000, 0xFB},
{0x0BB4, 0x0000, 0x0000, 0xC6},
{0x0BB4, 0x0B82, 0x0000, 0xFA},
{0x0BB4, 0x0BC1, 0x0000, 0xD8},
{0x0BB4, 0x0BC2, 0x0000, 0xE8},
{0x0BB4, 0x0BCD, 0x0000, 0xFA},
{0x0BB5, 0x0000, 0x0000, 0xC5},
{0x0BB5, 0x0B82, 0x0000, 0xF9},
{0x0BB5, 0x0BC1, 0x0000, 0xD7},
{0x0BB5, 0x0BC2, 0x0000, 0xE7},
{0x0BB5, 0x0BCD, 0x0000, 0xF9},
{0x0BB7, 0x0000, 0x0000, 0x84},
{0x0BB7, 0x0B82, 0x0000, 0x89},
{0x0BB7, 0x0BCD, 0x0000, 0x89},
{0x0BB8, 0x0000, 0x0000, 0x85},
{0x0BB8, 0x0B82, 0x0000, 0x8A},
{0x0BB8, 0x0BCD, 0x0000, 0x8A},
{0x0BB9, 0x0000, 0x0000, 0x86},
{0x0BB9, 0x0B82, 0x0000, 0x8B},
{0x0BB9, 0x0BCD, 0x0000, 0x8B},
{0x0BBE, 0x0000, 0x0000, 0xA1},
{0x0BBF, 0x0000, 0x0000, 0xA2},
{0x0BC0, 0x0000, 0x0000, 0xA3},
@ -314,16 +314,16 @@ static const ushort TsToUn [][3] = {
// Starting at 0x80
{0x0BE6, 0x0000, 0x0000},
{0x0BE7, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000}, // unknown
{0x0000, 0x0000, 0x0000}, // not covered in the unicode document
{0x0B9C, 0x0000, 0x0000},
{0x0BB7, 0x0000, 0x0000},
{0x0BB8, 0x0000, 0x0000},
{0x0BB9, 0x0000, 0x0000},
{0x0BE7, 0x0BB7, 0x0000},
{0x0B9C, 0x0B82, 0x0000},
{0x0BB7, 0x0B82, 0x0000},
{0x0BB8, 0x0B82, 0x0000},
{0x0BB9, 0x0B82, 0x0000},
{0x0B9C, 0x0BCD, 0x0000},
{0x0BB7, 0x0BCD, 0x0000},
{0x0BB8, 0x0BCD, 0x0000},
{0x0BB9, 0x0BCD, 0x0000},
{0x0BE7, 0x0BB7, 0x0B82},
{0x0BE8, 0x0000, 0x0000},
{0x0BE9, 0x0000, 0x0000},
@ -331,8 +331,8 @@ static const ushort TsToUn [][3] = {
{0x0BEB, 0x0000, 0x0000},
{0x2018, 0x0000, 0x0000},
{0x2019, 0x0000, 0x0000},
{0x201C, 0x0000, 0x0000},
{0x201C, 0x0000, 0x0000}, // two of the same??
{0x201C, 0x0000, 0x0000}, // double quote left
{0x201C, 0x0000, 0x0000}, // double quote right
{0x0BEC, 0x0000, 0x0000},
{0x0BED, 0x0000, 0x0000},
{0x0BEE, 0x0000, 0x0000},
@ -420,24 +420,26 @@ static const ushort TsToUn [][3] = {
{0x0BB3, 0x0BC2, 0x0000},
{0x0BB1, 0x0BC2, 0x0000},
{0x0BA9, 0x0BC2, 0x0000},
{0x0B95, 0x0B82, 0x0000},
{0x0B99, 0x0B82, 0x0000},
{0x0B9A, 0x0B82, 0x0000},
{0x0B9E, 0x0B82, 0x0000},
{0x0B9F, 0x0B82, 0x0000},
{0x0BA3, 0x0B82, 0x0000},
{0x0BA1, 0x0B82, 0x0000},
{0x0BA8, 0x0B82, 0x0000},
{0x0BAA, 0x0B82, 0x0000},
{0x0BAE, 0x0B82, 0x0000},
{0x0BAF, 0x0B82, 0x0000},
{0x0BB0, 0x0B82, 0x0000},
{0x0BB2, 0x0B82, 0x0000},
{0x0BB5, 0x0B82, 0x0000},
{0x0BB4, 0x0B82, 0x0000},
{0x0BB3, 0x0B82, 0x0000},
{0x0BB1, 0x0B82, 0x0000},
{0x0BA9, 0x0B82, 0x0000}
{0x0B95, 0x0BCD, 0x0000},
{0x0B99, 0x0BCD, 0x0000},
{0x0B9A, 0x0BCD, 0x0000},
{0x0B9E, 0x0BCD, 0x0000},
{0x0B9F, 0x0BCD, 0x0000},
{0x0BA3, 0x0BCD, 0x0000},
{0x0BA4, 0x0BCD, 0x0000},
{0x0BA8, 0x0BCD, 0x0000},
{0x0BAA, 0x0BCD, 0x0000},
{0x0BAE, 0x0BCD, 0x0000},
{0x0BAF, 0x0BCD, 0x0000},
{0x0BB0, 0x0BCD, 0x0000},
{0x0BB2, 0x0BCD, 0x0000},
{0x0BB5, 0x0BCD, 0x0000},
{0x0BB4, 0x0BCD, 0x0000},
{0x0BB3, 0x0BCD, 0x0000},
{0x0BB1, 0x0BCD, 0x0000},
{0x0BA9, 0x0BCD, 0x0000},
{0x0000, 0x0000, 0x0000},
{0x0000, 0x0000, 0x0000}
};
static int cmp(const ushort *s1, const ushort *s2, size_t len)

View File

@ -67,6 +67,9 @@ private slots:
void aliasForUTF16() const;
void mibForTSCII() const;
void codecForTSCII() const;
void asciiToTSCII();
void unicodeToTSCII();
void iso8859_16() const;
void utf8Codec_data();
@ -552,6 +555,51 @@ void tst_QTextCodec::codecForTSCII() const
QCOMPARE(codec->mibEnum(), 2107);
}
void tst_QTextCodec::asciiToTSCII()
{
/* Add all low, 7-bit ASCII characters. */
QString ascii;
const int len = 0x7F - 1;
ascii.resize(len);
for (int i = 0; i < len; ++i)
ascii[i] = QChar(i + 1);
QTextCodec* textCodec = QTextCodec::codecForName("TSCII");
QVERIFY(textCodec);
for (int i2 = 0; i2 < len; ++i2) {
/* For each character in ascii. */
const QChar c(ascii[i2]);
QVERIFY2(textCodec->canEncode(c),
qPrintable(QString::fromLatin1("Failed to encode %1 with encoding TSCII")
.arg(QString::number(c.unicode()))));
}
QVERIFY(textCodec->canEncode(QStringView(ascii)));
QVERIFY2(textCodec->canEncode(ascii), "Failed for full string with encoding TSCII");
}
void tst_QTextCodec::unicodeToTSCII()
{
QTextCodec* codec = QTextCodec::codecForName("TSCII");
QVERIFY(codec != nullptr);
auto st = QString("\u0BA4\u0BBE\u0BAF\u0BCDKCharselect unicode block name");
auto ba = QByteArray::fromHex("BEA1F6") + "KCharselect unicode block name";
QTextCodec::ConverterState state;
QCOMPARE(codec->fromUnicode(st.constData(), st.size(), &state), ba);
QCOMPARE(codec->toUnicode(ba.constData(), ba.size(), &state), st);
st = QString("\u0BB5\u0BA3\u0B95\u0BCD\u0B95\u0BAE\u0BCD"); // Welcome
ba = QByteArray::fromHex("c5bdecb8f5");
state.clear();
QCOMPARE(codec->fromUnicode(st.constData(), st.size(), &state), ba);
QCOMPARE(codec->toUnicode(ba.constData(), ba.size(), &state), st);
}
void tst_QTextCodec::iso8859_16() const
{
QTextCodec *codec = QTextCodec::codecForName("ISO8859-16");