|
1 /**************************************************************************** |
|
2 ** |
|
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). |
|
4 ** All rights reserved. |
|
5 ** Contact: Nokia Corporation (qt-info@nokia.com) |
|
6 ** |
|
7 ** This file is part of the test suite of the Qt Toolkit. |
|
8 ** |
|
9 ** $QT_BEGIN_LICENSE:LGPL$ |
|
10 ** No Commercial Usage |
|
11 ** This file contains pre-release code and may not be distributed. |
|
12 ** You may use this file in accordance with the terms and conditions |
|
13 ** contained in the Technology Preview License Agreement accompanying |
|
14 ** this package. |
|
15 ** |
|
16 ** GNU Lesser General Public License Usage |
|
17 ** Alternatively, this file may be used under the terms of the GNU Lesser |
|
18 ** General Public License version 2.1 as published by the Free Software |
|
19 ** Foundation and appearing in the file LICENSE.LGPL included in the |
|
20 ** packaging of this file. Please review the following information to |
|
21 ** ensure the GNU Lesser General Public License version 2.1 requirements |
|
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. |
|
23 ** |
|
24 ** In addition, as a special exception, Nokia gives you certain additional |
|
25 ** rights. These rights are described in the Nokia Qt LGPL Exception |
|
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. |
|
27 ** |
|
28 ** If you have questions regarding the use of this file, please contact |
|
29 ** Nokia at qt-info@nokia.com. |
|
30 ** |
|
31 ** |
|
32 ** |
|
33 ** |
|
34 ** |
|
35 ** |
|
36 ** |
|
37 ** |
|
38 ** $QT_END_LICENSE$ |
|
39 ** |
|
40 ****************************************************************************/ |
|
41 |
|
42 |
|
43 #include <QtTest/QtTest> |
|
44 |
|
45 #include <qtextcodec.h> |
|
46 #include <qfile.h> |
|
47 #include <qtextdocument.h> |
|
48 #include <time.h> |
|
49 #include <qprocess.h> |
|
50 |
|
51 #ifdef Q_OS_SYMBIAN |
|
52 #define SRCDIR "" |
|
53 #endif |
|
54 |
|
55 |
|
56 class tst_QTextCodec : public QObject |
|
57 { |
|
58 Q_OBJECT |
|
59 |
|
60 private slots: |
|
61 void toUnicode_data(); |
|
62 void toUnicode(); |
|
63 void codecForName_data(); |
|
64 void codecForName(); |
|
65 void fromUnicode_data(); |
|
66 void fromUnicode(); |
|
67 void toUnicode_codecForHtml(); |
|
68 void toUnicode_incremental(); |
|
69 void codecForLocale(); |
|
70 |
|
71 void asciiToIscii() const; |
|
72 void flagCodepointFFFF() const; |
|
73 void flagF7808080() const; |
|
74 void flagEFBFBF() const; |
|
75 void decode0D() const; |
|
76 void codecForIndex() const; |
|
77 void aliasForUTF16() const; |
|
78 void mibForTSCII() const; |
|
79 |
|
80 void utf8Codec_data(); |
|
81 void utf8Codec(); |
|
82 |
|
83 void utf8bom_data(); |
|
84 void utf8bom(); |
|
85 |
|
86 void utfHeaders_data(); |
|
87 void utfHeaders(); |
|
88 |
|
89 void codecForHtml(); |
|
90 |
|
91 void codecForUtfText_data(); |
|
92 void codecForUtfText(); |
|
93 |
|
94 #ifdef Q_OS_UNIX |
|
95 void toLocal8Bit(); |
|
96 #endif |
|
97 }; |
|
98 |
|
99 void tst_QTextCodec::toUnicode_data() |
|
100 { |
|
101 QTest::addColumn<QString>("fileName"); |
|
102 QTest::addColumn<QString>("codecName"); |
|
103 |
|
104 QTest::newRow( "korean-eucKR" ) << SRCDIR "korean.txt" << "eucKR"; |
|
105 QTest::newRow( "UTF-8" ) << SRCDIR "utf8.txt" << "UTF-8"; |
|
106 } |
|
107 |
|
108 void tst_QTextCodec::toUnicode() |
|
109 { |
|
110 QFETCH( QString, fileName ); |
|
111 QFETCH( QString, codecName ); |
|
112 |
|
113 QFile file( fileName ); |
|
114 |
|
115 if ( file.open( QIODevice::ReadOnly ) ) { |
|
116 QByteArray ba = file.readAll(); |
|
117 QTextCodec *c = QTextCodec::codecForName( codecName.toLatin1() ); |
|
118 QVERIFY(c != 0); |
|
119 QString uniString = c->toUnicode( ba ); |
|
120 if (codecName == QLatin1String("UTF-8")) { |
|
121 QCOMPARE(uniString, QString::fromUtf8(ba)); |
|
122 QCOMPARE(ba, uniString.toUtf8()); |
|
123 } |
|
124 QCOMPARE( ba, c->fromUnicode( uniString ) ); |
|
125 |
|
126 if (codecName == QLatin1String("eucKR")) { |
|
127 char ch = '\0'; |
|
128 QVERIFY(c->toUnicode(&ch, 1).isEmpty()); |
|
129 QVERIFY(c->toUnicode(&ch, 1).isNull()); |
|
130 } |
|
131 } else { |
|
132 QFAIL(qPrintable("File could not be opened: " + file.errorString())); |
|
133 } |
|
134 } |
|
135 |
|
136 void tst_QTextCodec::codecForName_data() |
|
137 { |
|
138 QTest::addColumn<QString>("hint"); |
|
139 QTest::addColumn<QString>("actualCodecName"); |
|
140 |
|
141 QTest::newRow("data1") << "iso88591" << "ISO-8859-1"; |
|
142 QTest::newRow("data2") << "iso88592" << "ISO-8859-2"; |
|
143 QTest::newRow("data3") << " IsO(8)8/5*9-2 " << "ISO-8859-2"; |
|
144 QTest::newRow("data4") << " IsO(8)8/5*2-9 " << ""; |
|
145 QTest::newRow("data5") << "latin2" << "ISO-8859-2"; |
|
146 } |
|
147 |
|
148 void tst_QTextCodec::codecForName() |
|
149 { |
|
150 QFETCH(QString, hint); |
|
151 QFETCH(QString, actualCodecName); |
|
152 |
|
153 QTextCodec *codec = QTextCodec::codecForName(hint.toLatin1()); |
|
154 if (actualCodecName.isEmpty()) { |
|
155 QVERIFY(codec == 0); |
|
156 } else { |
|
157 QVERIFY(codec != 0); |
|
158 QCOMPARE(QString(codec->name()), actualCodecName); |
|
159 } |
|
160 } |
|
161 |
|
162 void tst_QTextCodec::fromUnicode_data() |
|
163 { |
|
164 QTest::addColumn<QString>("codecName"); |
|
165 QTest::addColumn<bool>("eightBit"); |
|
166 |
|
167 QTest::newRow("data1") << "ISO-8859-1" << true; |
|
168 QTest::newRow("data2") << "ISO-8859-2" << true; |
|
169 QTest::newRow("data3") << "ISO-8859-3" << true; |
|
170 QTest::newRow("data4") << "ISO-8859-4" << true; |
|
171 QTest::newRow("data5") << "ISO-8859-5" << true; |
|
172 QTest::newRow("data6") << "ISO-8859-6" << true; |
|
173 QTest::newRow("data7") << "ISO-8859-7" << true; |
|
174 QTest::newRow("data8") << "ISO-8859-8" << true; |
|
175 QTest::newRow("data9") << "ISO-8859-9" << true; |
|
176 QTest::newRow("data10") << "ISO-8859-10" << true; |
|
177 QTest::newRow("data13") << "ISO-8859-13" << true; |
|
178 QTest::newRow("data14") << "ISO-8859-14" << true; |
|
179 QTest::newRow("data15") << "ISO-8859-15" << true; |
|
180 QTest::newRow("data16") << "ISO-8859-16" << true; |
|
181 |
|
182 QTest::newRow("data18") << "IBM850" << true; |
|
183 QTest::newRow("data19") << "IBM874" << true; |
|
184 QTest::newRow("data20") << "IBM866" << true; |
|
185 |
|
186 QTest::newRow("data21") << "windows-1250" << true; |
|
187 QTest::newRow("data22") << "windows-1251" << true; |
|
188 QTest::newRow("data23") << "windows-1252" << true; |
|
189 QTest::newRow("data24") << "windows-1253" << true; |
|
190 QTest::newRow("data25") << "windows-1254" << true; |
|
191 QTest::newRow("data26") << "windows-1255" << true; |
|
192 QTest::newRow("data27") << "windows-1256" << true; |
|
193 QTest::newRow("data28") << "windows-1257" << true; |
|
194 QTest::newRow("data28") << "windows-1258" << true; |
|
195 |
|
196 QTest::newRow("data29") << "Apple Roman" << true; |
|
197 QTest::newRow("data29") << "WINSAMI2" << true; |
|
198 QTest::newRow("data30") << "TIS-620" << true; |
|
199 QTest::newRow("data31") << "roman8" << true; |
|
200 |
|
201 QTest::newRow("data32") << "SJIS" << false; |
|
202 QTest::newRow("data33") << "EUC-KR" << false; |
|
203 } |
|
204 |
|
205 void tst_QTextCodec::fromUnicode() |
|
206 { |
|
207 QFETCH(QString, codecName); |
|
208 QFETCH(bool, eightBit); |
|
209 |
|
210 QTextCodec *codec = QTextCodec::codecForName(codecName.toLatin1()); |
|
211 QVERIFY(codec != 0); |
|
212 |
|
213 // Check if the reverse lookup is what we expect |
|
214 if (eightBit) { |
|
215 char chars[128]; |
|
216 for (int i = 0; i < 128; ++i) |
|
217 chars[i] = i + 128; |
|
218 QString s = codec->toUnicode(chars, 128); |
|
219 QByteArray c = codec->fromUnicode(s); |
|
220 |
|
221 int numberOfQuestionMarks = 0; |
|
222 for (int i = 0; i < 128; ++i) { |
|
223 if (c.at(i) == '?') |
|
224 ++numberOfQuestionMarks; |
|
225 else |
|
226 QCOMPARE(c.at(i), char(i + 128)); |
|
227 } |
|
228 QVERIFY(numberOfQuestionMarks != 128); |
|
229 } |
|
230 |
|
231 /* |
|
232 If the encoding is a superset of ASCII, test that the byte |
|
233 array is correct (no off by one, no trailing '\0'). |
|
234 */ |
|
235 QByteArray result = codec->fromUnicode(QString("abc")); |
|
236 if (result.startsWith("a")) { |
|
237 QCOMPARE(result.size(), 3); |
|
238 QCOMPARE(result, QByteArray("abc")); |
|
239 } else { |
|
240 QVERIFY(true); |
|
241 } |
|
242 } |
|
243 |
|
244 void tst_QTextCodec::toUnicode_codecForHtml() |
|
245 { |
|
246 QFile file(QString(SRCDIR "QT4-crashtest.txt")); |
|
247 QVERIFY(file.open(QFile::ReadOnly)); |
|
248 |
|
249 QByteArray data = file.readAll(); |
|
250 QTextCodec *codec = Qt::codecForHtml(data); |
|
251 codec->toUnicode(data); // this line crashes |
|
252 } |
|
253 |
|
254 |
|
255 void tst_QTextCodec::toUnicode_incremental() |
|
256 { |
|
257 QByteArray ba; |
|
258 ba += char(0xf0); |
|
259 ba += char(0x90); |
|
260 ba += char(0x80); |
|
261 ba += char(0x80); |
|
262 ba += char(0xf4); |
|
263 ba += char(0x8f); |
|
264 ba += char(0xbf); |
|
265 ba += char(0xbd); |
|
266 |
|
267 QString expected = QString::fromUtf8(ba); |
|
268 |
|
269 QString incremental; |
|
270 QTextDecoder *utf8Decoder = QTextCodec::codecForMib(106)->makeDecoder(); |
|
271 |
|
272 QString actual; |
|
273 for (int i = 0; i < ba.size(); ++i) |
|
274 utf8Decoder->toUnicode(&actual, ba.constData() + i, 1); |
|
275 |
|
276 QCOMPARE(actual, expected); |
|
277 |
|
278 |
|
279 delete utf8Decoder; |
|
280 } |
|
281 |
|
282 void tst_QTextCodec::codecForLocale() |
|
283 { |
|
284 QTextCodec *codec = QTextCodec::codecForLocale(); |
|
285 QVERIFY(codec != 0); |
|
286 |
|
287 #if defined(Q_OS_UNIX) |
|
288 // get a time string that is locale-encoded |
|
289 QByteArray originalLocaleEncodedTimeString; |
|
290 originalLocaleEncodedTimeString.resize(1024); |
|
291 time_t t; |
|
292 time(&t); |
|
293 int r = strftime(originalLocaleEncodedTimeString.data(), |
|
294 originalLocaleEncodedTimeString.size(), |
|
295 "%A%a%B%b%Z", |
|
296 localtime(&t)); |
|
297 if (r == 0) |
|
298 QSKIP("strftime() failed", SkipAll); |
|
299 originalLocaleEncodedTimeString.resize(r); |
|
300 |
|
301 QString unicodeTimeString = codec->toUnicode(originalLocaleEncodedTimeString); |
|
302 QByteArray localeEncodedTimeString = codec->fromUnicode(unicodeTimeString); |
|
303 QCOMPARE(localeEncodedTimeString, originalLocaleEncodedTimeString); |
|
304 #else |
|
305 QSKIP("This test is not implemented on Windows", SkipAll); |
|
306 #endif |
|
307 |
|
308 // find a codec that is not the codecForLocale() |
|
309 QTextCodec *codec2 = 0; |
|
310 foreach (int mib, QTextCodec::availableMibs()) { |
|
311 if (mib != codec->mibEnum()) { |
|
312 codec2 = QTextCodec::codecForMib(mib); |
|
313 if (codec2) |
|
314 break; |
|
315 } |
|
316 } |
|
317 if (!codec2) { |
|
318 QSKIP("Could not find a codec that is not already the codecForLocale()", SkipAll); |
|
319 } |
|
320 |
|
321 // set it, codecForLocale() should return it now |
|
322 QTextCodec::setCodecForLocale(codec2); |
|
323 QCOMPARE(QTextCodec::codecForLocale(), codec2); |
|
324 |
|
325 // reset back to the default |
|
326 QTextCodec::setCodecForLocale(0); |
|
327 QCOMPARE(QTextCodec::codecForLocale(), codec); |
|
328 } |
|
329 |
|
330 void tst_QTextCodec::asciiToIscii() const |
|
331 { |
|
332 /* Add all low, 7-bit ASCII characters. */ |
|
333 QString ascii; |
|
334 const int len = 0xA0 - 1; |
|
335 ascii.resize(len); |
|
336 |
|
337 for(int i = 0; i < len; ++i) |
|
338 ascii[i] = QChar(i + 1); |
|
339 |
|
340 static const char *const isciiCodecs[] = |
|
341 { |
|
342 "Iscii-Mlm", |
|
343 "Iscii-Knd", |
|
344 "Iscii-Tlg", |
|
345 "Iscii-Tml", |
|
346 "Iscii-Ori", |
|
347 "Iscii-Gjr", |
|
348 "Iscii-Pnj", |
|
349 "Iscii-Bng", |
|
350 "Iscii-Dev" |
|
351 }; |
|
352 const int isciiCodecsLen = sizeof(isciiCodecs) / sizeof(const char *); |
|
353 |
|
354 for(int i = 0; i < isciiCodecsLen; ++i) { |
|
355 /* For each codec. */ |
|
356 |
|
357 const QTextCodec *const textCodec = QTextCodec::codecForName(isciiCodecs[i]); |
|
358 Q_ASSERT(textCodec); |
|
359 |
|
360 for(int i2 = 0; i2 < len; ++i2) { |
|
361 /* For each character in ascii. */ |
|
362 const QChar c(ascii[i2]); |
|
363 QVERIFY2(textCodec->canEncode(c), qPrintable(QString::fromLatin1("Failed to encode %1 with encoding %2") |
|
364 .arg(QString::number(c.unicode()), QString::fromLatin1(textCodec->name().constData())))); |
|
365 } |
|
366 |
|
367 QVERIFY2(textCodec->canEncode(ascii), qPrintable(QString::fromLatin1("Failed for full string with encoding %1") |
|
368 .arg(QString::fromLatin1(textCodec->name().constData())))); |
|
369 } |
|
370 } |
|
371 |
|
372 void tst_QTextCodec::flagCodepointFFFF() const |
|
373 { |
|
374 // This is an invalid Unicode codepoint. |
|
375 const QChar ch(0xFFFF); |
|
376 QString input(ch); |
|
377 |
|
378 QTextCodec *const codec = QTextCodec::codecForMib(106); // UTF-8 |
|
379 Q_ASSERT(codec); |
|
380 |
|
381 const QByteArray asDecoded(codec->fromUnicode(input)); |
|
382 QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull); |
|
383 QVERIFY(codec->toUnicode(asDecoded.constData(), asDecoded.length(), &state) == QChar(0)); |
|
384 QVERIFY(codec->toUnicode(asDecoded) == QChar(0xfffd)); |
|
385 } |
|
386 |
|
387 void tst_QTextCodec::flagF7808080() const |
|
388 { |
|
389 /* This test case stems from test not-wf-sa-170, tests/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml, |
|
390 * whose description reads: |
|
391 * |
|
392 * "Four byte UTF-8 encodings can encode UCS-4 characters |
|
393 * which are beyond the range of legal XML characters |
|
394 * (and can't be expressed in Unicode surrogate pairs). |
|
395 * This document holds such a character." |
|
396 * |
|
397 * In binary, this is: |
|
398 * 11110111100000001000000010000000 |
|
399 * * * * * |
|
400 * 11110www10xxxxxx10yyyyyy10zzzzzz |
|
401 * |
|
402 * With multibyte logic removed it is the codepoint 0x1C0000. |
|
403 */ |
|
404 QByteArray input; |
|
405 input.resize(4); |
|
406 input[0] = char(0xF7); |
|
407 input[1] = char(0x80); |
|
408 input[2] = char(0x80); |
|
409 input[3] = char(0x80); |
|
410 |
|
411 |
|
412 QTextCodec *const codec = QTextCodec::codecForMib(106); // UTF-8 |
|
413 Q_ASSERT(codec); |
|
414 |
|
415 //QVERIFY(!codec->canEncode(QChar(0x1C0000))); |
|
416 |
|
417 QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull); |
|
418 QVERIFY(codec->toUnicode(input.constData(), input.length(), &state) == QChar(0)); |
|
419 } |
|
420 |
|
421 void tst_QTextCodec::flagEFBFBF() const |
|
422 { |
|
423 QByteArray invalidInput; |
|
424 invalidInput.resize(3); |
|
425 invalidInput[0] = char(0xEF); |
|
426 invalidInput[1] = char(0xBF); |
|
427 invalidInput[2] = char(0xBF); |
|
428 |
|
429 const QTextCodec *const codec = QTextCodec::codecForMib(106); // UTF-8 |
|
430 Q_ASSERT(codec); |
|
431 |
|
432 { |
|
433 //QVERIFY(!codec->canEncode(QChar(0xFFFF))); |
|
434 QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull); |
|
435 QVERIFY(codec->toUnicode(invalidInput.constData(), invalidInput.length(), &state) == QChar(0)); |
|
436 |
|
437 QByteArray start("<?pi "); |
|
438 start.append(invalidInput); |
|
439 start.append("?>"); |
|
440 } |
|
441 |
|
442 /* When 0xEFBFBF is preceeded by what seems to be an arbitrary character, |
|
443 * QTextCodec fails to flag it. */ |
|
444 { |
|
445 QEXPECT_FAIL("", "This is a bug and needs to be fixed.", Continue); |
|
446 QByteArray start("B"); |
|
447 start.append(invalidInput); |
|
448 |
|
449 QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull); |
|
450 QVERIFY(codec->toUnicode(start.constData(), start.length(), &state) == QChar(0)); |
|
451 } |
|
452 } |
|
453 |
|
454 void tst_QTextCodec::decode0D() const |
|
455 { |
|
456 QByteArray input; |
|
457 input.resize(3); |
|
458 input[0] = 'A'; |
|
459 input[1] = '\r'; |
|
460 input[2] = 'B'; |
|
461 |
|
462 QCOMPARE(QString::fromUtf8(input.constData()).toUtf8(), input); |
|
463 } |
|
464 |
|
465 void tst_QTextCodec::codecForIndex() const |
|
466 { |
|
467 } |
|
468 |
|
469 void tst_QTextCodec::aliasForUTF16() const |
|
470 { |
|
471 QVERIFY(QTextCodec::codecForName("UTF-16")->aliases().isEmpty()); |
|
472 } |
|
473 |
|
474 void tst_QTextCodec::mibForTSCII() const |
|
475 { |
|
476 QCOMPARE(QTextCodec::codecForName("TSCII")->mibEnum(), 2107); |
|
477 } |
|
478 |
|
479 static QString fromInvalidUtf8Sequence(const QByteArray &ba) |
|
480 { |
|
481 return QString().fill(QChar::ReplacementCharacter, ba.size()); |
|
482 } |
|
483 |
|
484 // copied from tst_QString::fromUtf8_data() |
|
485 void tst_QTextCodec::utf8Codec_data() |
|
486 { |
|
487 QTest::addColumn<QByteArray>("utf8"); |
|
488 QTest::addColumn<QString>("res"); |
|
489 QTest::addColumn<int>("len"); |
|
490 QString str; |
|
491 |
|
492 QTest::newRow("str0") << QByteArray("abcdefgh") << QString("abcdefgh") << -1; |
|
493 QTest::newRow("str0-len") << QByteArray("abcdefgh") << QString("abc") << 3; |
|
494 QTest::newRow("str1") << QByteArray("\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205") << QString("\366\344\374\326\304\334\370\346\345\330\306\305") << -1; |
|
495 QTest::newRow("str1-len") << QByteArray("\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205") << QString("\366\344\374\326\304") << 10; |
|
496 |
|
497 str += QChar(0x05e9); |
|
498 str += QChar(0x05d3); |
|
499 str += QChar(0x05d2); |
|
500 QTest::newRow("str2") << QByteArray("\327\251\327\223\327\222") << str << -1; |
|
501 |
|
502 str = QChar(0x05e9); |
|
503 QTest::newRow("str2-len") << QByteArray("\327\251\327\223\327\222") << str << 2; |
|
504 |
|
505 str = QChar(0x20ac); |
|
506 str += " some text"; |
|
507 QTest::newRow("str3") << QByteArray("\342\202\254 some text") << str << -1; |
|
508 |
|
509 str = QChar(0x20ac); |
|
510 str += " some "; |
|
511 QTest::newRow("str3-len") << QByteArray("\342\202\254 some text") << str << 9; |
|
512 |
|
513 str = "hello"; |
|
514 str += QChar::ReplacementCharacter; |
|
515 str += QChar(0x68); |
|
516 str += QChar::ReplacementCharacter; |
|
517 str += QChar::ReplacementCharacter; |
|
518 str += QChar::ReplacementCharacter; |
|
519 str += QChar::ReplacementCharacter; |
|
520 str += QChar(0x61); |
|
521 str += QChar::ReplacementCharacter; |
|
522 QTest::newRow("invalid utf8") << QByteArray("hello\344h\344\344\366\344a\304") << str << -1; |
|
523 QTest::newRow("invalid utf8-len") << QByteArray("hello\344h\344\344\366\344a\304") << QString("hello") << 5; |
|
524 |
|
525 str = "Prohl"; |
|
526 str += QChar::ReplacementCharacter; |
|
527 str += QChar::ReplacementCharacter; |
|
528 str += "e"; |
|
529 str += QChar::ReplacementCharacter; |
|
530 str += " plugin"; |
|
531 str += QChar::ReplacementCharacter; |
|
532 str += " Netscape"; |
|
533 |
|
534 QTest::newRow("task28417") << QByteArray("Prohl\355\276e\350 plugin\371 Netscape") << str << -1; |
|
535 QTest::newRow("task28417-len") << QByteArray("Prohl\355\276e\350 plugin\371 Netscape") << QString("") << 0; |
|
536 |
|
537 QTest::newRow("null-1") << QByteArray() << QString() << -1; |
|
538 QTest::newRow("null0") << QByteArray() << QString() << 0; |
|
539 // QTest::newRow("null5") << QByteArray() << QString() << 5; |
|
540 QTest::newRow("empty-1") << QByteArray("\0abcd", 5) << QString() << -1; |
|
541 QTest::newRow("empty0") << QByteArray() << QString() << 0; |
|
542 QTest::newRow("empty5") << QByteArray("\0abcd", 5) << QString::fromAscii("\0abcd", 5) << 5; |
|
543 QTest::newRow("other-1") << QByteArray("ab\0cd", 5) << QString::fromAscii("ab") << -1; |
|
544 QTest::newRow("other5") << QByteArray("ab\0cd", 5) << QString::fromAscii("ab\0cd", 5) << 5; |
|
545 |
|
546 str = "Old Italic: "; |
|
547 str += QChar(0xd800); |
|
548 str += QChar(0xdf00); |
|
549 str += QChar(0xd800); |
|
550 str += QChar(0xdf01); |
|
551 str += QChar(0xd800); |
|
552 str += QChar(0xdf02); |
|
553 str += QChar(0xd800); |
|
554 str += QChar(0xdf03); |
|
555 str += QChar(0xd800); |
|
556 str += QChar(0xdf04); |
|
557 QTest::newRow("surrogate") << QByteArray("Old Italic: \360\220\214\200\360\220\214\201\360\220\214\202\360\220\214\203\360\220\214\204") << str << -1; |
|
558 |
|
559 QTest::newRow("surrogate-len") << QByteArray("Old Italic: \360\220\214\200\360\220\214\201\360\220\214\202\360\220\214\203\360\220\214\204") << str.left(16) << 20; |
|
560 |
|
561 // from http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html |
|
562 |
|
563 // 2.1.1 U+00000000 |
|
564 QByteArray utf8; |
|
565 utf8 += char(0x00); |
|
566 str = QChar(QChar::Null); |
|
567 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.1.1") << utf8 << str << 1; |
|
568 |
|
569 // 2.1.2 U+00000080 |
|
570 utf8.clear(); |
|
571 utf8 += char(0xc2); |
|
572 utf8 += char(0x80); |
|
573 str = QChar(0x80); |
|
574 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.1.2") << utf8 << str << -1; |
|
575 |
|
576 // 2.1.3 U+00000800 |
|
577 utf8.clear(); |
|
578 utf8 += char(0xe0); |
|
579 utf8 += char(0xa0); |
|
580 utf8 += char(0x80); |
|
581 str = QChar(0x800); |
|
582 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.1.3") << utf8 << str << -1; |
|
583 |
|
584 // 2.1.4 U+00010000 |
|
585 utf8.clear(); |
|
586 utf8 += char(0xf0); |
|
587 utf8 += char(0x90); |
|
588 utf8 += char(0x80); |
|
589 utf8 += char(0x80); |
|
590 str.clear(); |
|
591 str += QChar(0xd800); |
|
592 str += QChar(0xdc00); |
|
593 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.1.4") << utf8 << str << -1; |
|
594 |
|
595 // 2.1.5 U+00200000 (not a valid Unicode character) |
|
596 utf8.clear(); |
|
597 utf8 += char(0xf8); |
|
598 utf8 += char(0x88); |
|
599 utf8 += char(0x80); |
|
600 utf8 += char(0x80); |
|
601 utf8 += char(0x80); |
|
602 str = fromInvalidUtf8Sequence(utf8); |
|
603 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.1.5") << utf8 << str << -1; |
|
604 |
|
605 // 2.1.6 U+04000000 (not a valid Unicode character) |
|
606 utf8.clear(); |
|
607 utf8 += char(0xfc); |
|
608 utf8 += char(0x84); |
|
609 utf8 += char(0x80); |
|
610 utf8 += char(0x80); |
|
611 utf8 += char(0x80); |
|
612 utf8 += char(0x80); |
|
613 str = fromInvalidUtf8Sequence(utf8); |
|
614 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.1.6") << utf8 << str << -1; |
|
615 |
|
616 // 2.2.1 U+0000007F |
|
617 utf8.clear(); |
|
618 utf8 += char(0x7f); |
|
619 str = QChar(0x7f); |
|
620 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.2.1") << utf8 << str << -1; |
|
621 |
|
622 // 2.2.2 U+000007FF |
|
623 utf8.clear(); |
|
624 utf8 += char(0xdf); |
|
625 utf8 += char(0xbf); |
|
626 str = QChar(0x7ff); |
|
627 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.2.2") << utf8 << str << -1; |
|
628 |
|
629 // 2.2.3 U+000FFFF |
|
630 utf8.clear(); |
|
631 utf8 += char(0xef); |
|
632 utf8 += char(0xbf); |
|
633 utf8 += char(0xbf); |
|
634 str.clear(); |
|
635 str += QChar::ReplacementCharacter; |
|
636 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.2.3") << utf8 << str << -1; |
|
637 |
|
638 // 2.2.4 U+001FFFFF |
|
639 utf8.clear(); |
|
640 utf8 += char(0xf7); |
|
641 utf8 += char(0xbf); |
|
642 utf8 += char(0xbf); |
|
643 utf8 += char(0xbf); |
|
644 str.clear(); |
|
645 str += QChar(QChar::ReplacementCharacter); |
|
646 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.2.4") << utf8 << str << -1; |
|
647 |
|
648 // 2.2.5 U+03FFFFFF (not a valid Unicode character) |
|
649 utf8.clear(); |
|
650 utf8 += char(0xfb); |
|
651 utf8 += char(0xbf); |
|
652 utf8 += char(0xbf); |
|
653 utf8 += char(0xbf); |
|
654 utf8 += char(0xbf); |
|
655 str = fromInvalidUtf8Sequence(utf8); |
|
656 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.2.5") << utf8 << str << -1; |
|
657 |
|
658 // 2.2.6 U+7FFFFFFF |
|
659 utf8.clear(); |
|
660 utf8 += char(0xfd); |
|
661 utf8 += char(0xbf); |
|
662 utf8 += char(0xbf); |
|
663 utf8 += char(0xbf); |
|
664 utf8 += char(0xbf); |
|
665 utf8 += char(0xbf); |
|
666 str = fromInvalidUtf8Sequence(utf8); |
|
667 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.2.6") << utf8 << str << -1; |
|
668 |
|
669 // 2.3.1 U+0000D7FF |
|
670 utf8.clear(); |
|
671 utf8 += char(0xed); |
|
672 utf8 += char(0x9f); |
|
673 utf8 += char(0xbf); |
|
674 str = QChar(0xd7ff); |
|
675 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.1") << utf8 << str << -1; |
|
676 |
|
677 // 2.3.2 U+0000E000 |
|
678 utf8.clear(); |
|
679 utf8 += char(0xee); |
|
680 utf8 += char(0x80); |
|
681 utf8 += char(0x80); |
|
682 str = QChar(0xe000); |
|
683 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.2") << utf8 << str << -1; |
|
684 |
|
685 // 2.3.3 U+0000FFFD |
|
686 utf8.clear(); |
|
687 utf8 += char(0xef); |
|
688 utf8 += char(0xbf); |
|
689 utf8 += char(0xbd); |
|
690 str = QChar(QChar::ReplacementCharacter); |
|
691 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.3") << utf8 << str << -1; |
|
692 |
|
693 // 2.3.4 U+0010FFFF |
|
694 utf8.clear(); |
|
695 utf8 += char(0xf4); |
|
696 utf8 += char(0x8f); |
|
697 utf8 += char(0xbf); |
|
698 utf8 += char(0xbf); |
|
699 str.clear(); |
|
700 str += QChar(0xdbff); |
|
701 str += QChar(0xdfff); |
|
702 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.4") << utf8 << str << -1; |
|
703 |
|
704 // 2.3.5 U+00110000 |
|
705 utf8.clear(); |
|
706 utf8 += char(0xf4); |
|
707 utf8 += char(0x90); |
|
708 utf8 += char(0x80); |
|
709 utf8 += char(0x80); |
|
710 str.clear(); |
|
711 str += QChar(QChar::ReplacementCharacter); |
|
712 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.5") << utf8 << str << -1; |
|
713 |
|
714 // 3.1.1 |
|
715 utf8.clear(); |
|
716 utf8 += char(0x80); |
|
717 str = fromInvalidUtf8Sequence(utf8); |
|
718 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.1") << utf8 << str << -1; |
|
719 |
|
720 // 3.1.2 |
|
721 utf8.clear(); |
|
722 utf8 += char(0xbf); |
|
723 str = fromInvalidUtf8Sequence(utf8); |
|
724 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.2") << utf8 << str << -1; |
|
725 |
|
726 // 3.1.3 |
|
727 utf8.clear(); |
|
728 utf8 += char(0x80); |
|
729 utf8 += char(0xbf); |
|
730 str = fromInvalidUtf8Sequence(utf8); |
|
731 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.3") << utf8 << str << -1; |
|
732 |
|
733 // 3.1.4 |
|
734 utf8.clear(); |
|
735 utf8 += char(0x80); |
|
736 utf8 += char(0xbf); |
|
737 utf8 += char(0x80); |
|
738 str = fromInvalidUtf8Sequence(utf8); |
|
739 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.4") << utf8 << str << -1; |
|
740 |
|
741 // 3.1.5 |
|
742 utf8.clear(); |
|
743 utf8 += char(0x80); |
|
744 utf8 += char(0xbf); |
|
745 utf8 += char(0x80); |
|
746 utf8 += char(0xbf); |
|
747 str = fromInvalidUtf8Sequence(utf8); |
|
748 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.5") << utf8 << str << -1; |
|
749 |
|
750 // 3.1.6 |
|
751 utf8.clear(); |
|
752 utf8 += char(0x80); |
|
753 utf8 += char(0xbf); |
|
754 utf8 += char(0x80); |
|
755 utf8 += char(0xbf); |
|
756 utf8 += char(0x80); |
|
757 str = fromInvalidUtf8Sequence(utf8); |
|
758 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.6") << utf8 << str << -1; |
|
759 |
|
760 // 3.1.7 |
|
761 utf8.clear(); |
|
762 utf8 += char(0x80); |
|
763 utf8 += char(0xbf); |
|
764 utf8 += char(0x80); |
|
765 utf8 += char(0xbf); |
|
766 utf8 += char(0x80); |
|
767 utf8 += char(0xbf); |
|
768 str = fromInvalidUtf8Sequence(utf8); |
|
769 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.7") << utf8 << str << -1; |
|
770 |
|
771 // 3.1.8 |
|
772 utf8.clear(); |
|
773 utf8 += char(0x80); |
|
774 utf8 += char(0xbf); |
|
775 utf8 += char(0x80); |
|
776 utf8 += char(0xbf); |
|
777 utf8 += char(0x80); |
|
778 utf8 += char(0xbf); |
|
779 utf8 += char(0x80); |
|
780 str = fromInvalidUtf8Sequence(utf8); |
|
781 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.8") << utf8 << str << -1; |
|
782 |
|
783 // 3.1.9 |
|
784 utf8.clear(); |
|
785 for (uint i = 0x80; i<= 0xbf; ++i) |
|
786 utf8 += i; |
|
787 str = fromInvalidUtf8Sequence(utf8); |
|
788 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.1.9") << utf8 << str << -1; |
|
789 |
|
790 // 3.2.1 |
|
791 utf8.clear(); |
|
792 str.clear(); |
|
793 for (uint i = 0xc8; i <= 0xdf; ++i) { |
|
794 utf8 += i; |
|
795 utf8 += char(0x20); |
|
796 |
|
797 str += QChar::ReplacementCharacter; |
|
798 str += QChar(0x0020); |
|
799 } |
|
800 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.2.1") << utf8 << str << -1; |
|
801 |
|
802 // 3.2.2 |
|
803 utf8.clear(); |
|
804 str.clear(); |
|
805 for (uint i = 0xe0; i <= 0xef; ++i) { |
|
806 utf8 += i; |
|
807 utf8 += char(0x20); |
|
808 |
|
809 str += QChar::ReplacementCharacter; |
|
810 str += QChar(0x0020); |
|
811 } |
|
812 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.2.2") << utf8 << str << -1; |
|
813 |
|
814 // 3.2.3 |
|
815 utf8.clear(); |
|
816 str.clear(); |
|
817 for (uint i = 0xf0; i <= 0xf7; ++i) { |
|
818 utf8 += i; |
|
819 utf8 += 0x20; |
|
820 |
|
821 str += QChar::ReplacementCharacter; |
|
822 str += QChar(0x0020); |
|
823 } |
|
824 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.2.3") << utf8 << str << -1; |
|
825 |
|
826 // 3.2.4 |
|
827 utf8.clear(); |
|
828 str.clear(); |
|
829 for (uint i = 0xf8; i <= 0xfb; ++i) { |
|
830 utf8 += i; |
|
831 utf8 += 0x20; |
|
832 |
|
833 str += QChar::ReplacementCharacter; |
|
834 str += QChar(0x0020); |
|
835 } |
|
836 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.2.4") << utf8 << str << -1; |
|
837 |
|
838 // 3.2.5 |
|
839 utf8.clear(); |
|
840 str.clear(); |
|
841 for (uint i = 0xfc; i <= 0xfd; ++i) { |
|
842 utf8 += i; |
|
843 utf8 += 0x20; |
|
844 |
|
845 str += QChar::ReplacementCharacter; |
|
846 str += QChar(0x0020); |
|
847 } |
|
848 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.2.5") << utf8 << str << -1; |
|
849 |
|
850 // 3.3.1 |
|
851 utf8.clear(); |
|
852 utf8 += char(0xc0); |
|
853 str = fromInvalidUtf8Sequence(utf8); |
|
854 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.1") << utf8 << str << -1; |
|
855 utf8 += char(0x30); |
|
856 str += 0x30; |
|
857 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.1-1") << utf8 << str << -1; |
|
858 |
|
859 // 3.3.2 |
|
860 utf8.clear(); |
|
861 utf8 += char(0xe0); |
|
862 utf8 += char(0x80); |
|
863 str = fromInvalidUtf8Sequence(utf8); |
|
864 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.2") << utf8 << str << -1; |
|
865 utf8 += char(0x30); |
|
866 str += 0x30; |
|
867 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.2-1") << utf8 << str << -1; |
|
868 |
|
869 utf8.clear(); |
|
870 utf8 += char(0xe0); |
|
871 str = fromInvalidUtf8Sequence(utf8); |
|
872 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.2-2") << utf8 << str << -1; |
|
873 utf8 += 0x30; |
|
874 str += 0x30; |
|
875 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.2-3") << utf8 << str << -1; |
|
876 |
|
877 // 3.3.3 |
|
878 utf8.clear(); |
|
879 utf8 += char(0xf0); |
|
880 utf8 += char(0x80); |
|
881 utf8 += char(0x80); |
|
882 str = fromInvalidUtf8Sequence(utf8); |
|
883 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.3") << utf8 << str << -1; |
|
884 utf8 += char(0x30); |
|
885 str += 0x30; |
|
886 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.3-1") << utf8 << str << -1; |
|
887 |
|
888 utf8.clear(); |
|
889 utf8 += char(0xf0); |
|
890 str = fromInvalidUtf8Sequence(utf8); |
|
891 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.3-2") << utf8 << str << -1; |
|
892 utf8 += char(0x30); |
|
893 str += 0x30; |
|
894 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.3-3") << utf8 << str << -1; |
|
895 |
|
896 utf8.clear(); |
|
897 utf8 += char(0xf0); |
|
898 utf8 += char(0x80); |
|
899 str = fromInvalidUtf8Sequence(utf8); |
|
900 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.3-4") << utf8 << str << -1; |
|
901 utf8 += char(0x30); |
|
902 str += 0x30; |
|
903 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.3-5") << utf8 << str << -1; |
|
904 |
|
905 // 3.3.4 |
|
906 utf8.clear(); |
|
907 utf8 += char(0xf8); |
|
908 utf8 += char(0x80); |
|
909 utf8 += char(0x80); |
|
910 utf8 += char(0x80); |
|
911 str = fromInvalidUtf8Sequence(utf8); |
|
912 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4") << utf8 << str << -1; |
|
913 utf8 += char(0x30); |
|
914 str += 0x30; |
|
915 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4-1") << utf8 << str << -1; |
|
916 |
|
917 utf8.clear(); |
|
918 utf8 += char(0xf8); |
|
919 utf8 += char(0x80); |
|
920 utf8 += char(0x80); |
|
921 str = fromInvalidUtf8Sequence(utf8); |
|
922 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4-2") << utf8 << str << -1; |
|
923 utf8 += char(0x30); |
|
924 str += 0x30; |
|
925 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4-3") << utf8 << str << -1; |
|
926 |
|
927 utf8.clear(); |
|
928 utf8 += char(0xf8); |
|
929 utf8 += char(0x80); |
|
930 str = fromInvalidUtf8Sequence(utf8); |
|
931 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4-4") << utf8 << str << -1; |
|
932 utf8 += char(0x30); |
|
933 str += 0x30; |
|
934 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4-5") << utf8 << str << -1; |
|
935 |
|
936 utf8.clear(); |
|
937 utf8 += char(0xf8); |
|
938 str = fromInvalidUtf8Sequence(utf8); |
|
939 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4-6") << utf8 << str << -1; |
|
940 utf8 += char(0x30); |
|
941 str += 0x30; |
|
942 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.4-7") << utf8 << str << -1; |
|
943 |
|
944 // 3.3.5 |
|
945 utf8.clear(); |
|
946 utf8 += char(0xfc); |
|
947 utf8 += char(0x80); |
|
948 utf8 += char(0x80); |
|
949 utf8 += char(0x80); |
|
950 utf8 += char(0x80); |
|
951 str = fromInvalidUtf8Sequence(utf8); |
|
952 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5") << utf8 << str << -1; |
|
953 utf8 += char(0x30); |
|
954 str += 0x30; |
|
955 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-1") << utf8 << str << -1; |
|
956 |
|
957 utf8.clear(); |
|
958 utf8 += char(0xfc); |
|
959 utf8 += char(0x80); |
|
960 utf8 += char(0x80); |
|
961 utf8 += char(0x80); |
|
962 str = fromInvalidUtf8Sequence(utf8); |
|
963 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-2") << utf8 << str << -1; |
|
964 utf8 += char(0x30); |
|
965 str += 0x30; |
|
966 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-3") << utf8 << str << -1; |
|
967 |
|
968 utf8.clear(); |
|
969 utf8 += char(0xfc); |
|
970 utf8 += char(0x80); |
|
971 utf8 += char(0x80); |
|
972 str = fromInvalidUtf8Sequence(utf8); |
|
973 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-4") << utf8 << str << -1; |
|
974 utf8 += char(0x30); |
|
975 str += 0x30; |
|
976 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-5") << utf8 << str << -1; |
|
977 |
|
978 utf8.clear(); |
|
979 utf8 += char(0xfc); |
|
980 utf8 += char(0x80); |
|
981 str = fromInvalidUtf8Sequence(utf8); |
|
982 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-6") << utf8 << str << -1; |
|
983 utf8 += char(0x30); |
|
984 str += 0x30; |
|
985 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-7") << utf8 << str << -1; |
|
986 |
|
987 utf8.clear(); |
|
988 utf8 += char(0xfc); |
|
989 str = fromInvalidUtf8Sequence(utf8); |
|
990 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-8") << utf8 << str << -1; |
|
991 utf8 += char(0x30); |
|
992 str += 0x30; |
|
993 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.5-9") << utf8 << str << -1; |
|
994 |
|
995 // 3.3.6 |
|
996 utf8.clear(); |
|
997 utf8 += char(0xdf); |
|
998 str = fromInvalidUtf8Sequence(utf8); |
|
999 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.6") << utf8 << str << -1; |
|
1000 utf8 += char(0x30); |
|
1001 str += 0x30; |
|
1002 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.6-1") << utf8 << str << -1; |
|
1003 |
|
1004 // 3.3.7 |
|
1005 utf8.clear(); |
|
1006 utf8 += char(0xef); |
|
1007 utf8 += char(0xbf); |
|
1008 str = fromInvalidUtf8Sequence(utf8); |
|
1009 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.7") << utf8 << str << -1; |
|
1010 utf8 += char(0x30); |
|
1011 str += 0x30; |
|
1012 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.7-1") << utf8 << str << -1; |
|
1013 |
|
1014 utf8.clear(); |
|
1015 utf8 += char(0xef); |
|
1016 str = fromInvalidUtf8Sequence(utf8); |
|
1017 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.7-2") << utf8 << str << -1; |
|
1018 utf8 += char(0x30); |
|
1019 str += 0x30; |
|
1020 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.7-3") << utf8 << str << -1; |
|
1021 |
|
1022 // 3.3.8 |
|
1023 utf8.clear(); |
|
1024 utf8 += char(0xf7); |
|
1025 utf8 += char(0xbf); |
|
1026 utf8 += char(0xbf); |
|
1027 str = fromInvalidUtf8Sequence(utf8); |
|
1028 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.8") << utf8 << str << -1; |
|
1029 utf8 += char(0x30); |
|
1030 str += 0x30; |
|
1031 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.8-1") << utf8 << str << -1; |
|
1032 |
|
1033 utf8.clear(); |
|
1034 utf8 += char(0xf7); |
|
1035 utf8 += char(0xbf); |
|
1036 str = fromInvalidUtf8Sequence(utf8); |
|
1037 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.8-2") << utf8 << str << -1; |
|
1038 utf8 += char(0x30); |
|
1039 str += 0x30; |
|
1040 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.8-3") << utf8 << str << -1; |
|
1041 |
|
1042 utf8.clear(); |
|
1043 utf8 += char(0xf7); |
|
1044 str = fromInvalidUtf8Sequence(utf8); |
|
1045 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.8-4") << utf8 << str << -1; |
|
1046 utf8 += char(0x30); |
|
1047 str += 0x30; |
|
1048 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.8-5") << utf8 << str << -1; |
|
1049 |
|
1050 // 3.3.9 |
|
1051 utf8.clear(); |
|
1052 utf8 += char(0xfb); |
|
1053 utf8 += char(0xbf); |
|
1054 utf8 += char(0xbf); |
|
1055 utf8 += char(0xbf); |
|
1056 str = fromInvalidUtf8Sequence(utf8); |
|
1057 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9") << utf8 << str << -1; |
|
1058 utf8 += char(0x30); |
|
1059 str += 0x30; |
|
1060 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9-1") << utf8 << str << -1; |
|
1061 |
|
1062 utf8.clear(); |
|
1063 utf8 += char(0xfb); |
|
1064 utf8 += char(0xbf); |
|
1065 utf8 += char(0xbf); |
|
1066 str = fromInvalidUtf8Sequence(utf8); |
|
1067 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9-2") << utf8 << str << -1; |
|
1068 utf8 += char(0x30); |
|
1069 str += 0x30; |
|
1070 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9-3") << utf8 << str << -1; |
|
1071 |
|
1072 utf8.clear(); |
|
1073 utf8 += char(0xfb); |
|
1074 utf8 += char(0xbf); |
|
1075 str = fromInvalidUtf8Sequence(utf8); |
|
1076 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9-4") << utf8 << str << -1; |
|
1077 utf8 += char(0x30); |
|
1078 str += 0x30; |
|
1079 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9-5") << utf8 << str << -1; |
|
1080 |
|
1081 utf8.clear(); |
|
1082 utf8 += char(0xfb); |
|
1083 str = fromInvalidUtf8Sequence(utf8); |
|
1084 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9-6") << utf8 << str << -1; |
|
1085 utf8 += char(0x30); |
|
1086 str += 0x30; |
|
1087 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.9-7") << utf8 << str << -1; |
|
1088 |
|
1089 // 3.3.10 |
|
1090 utf8.clear(); |
|
1091 utf8 += char(0xfd); |
|
1092 utf8 += char(0xbf); |
|
1093 utf8 += char(0xbf); |
|
1094 utf8 += char(0xbf); |
|
1095 utf8 += char(0xbf); |
|
1096 str = fromInvalidUtf8Sequence(utf8); |
|
1097 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10") << utf8 << str << -1; |
|
1098 utf8 += char(0x30); |
|
1099 str += 0x30; |
|
1100 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-1") << utf8 << str << -1; |
|
1101 |
|
1102 utf8.clear(); |
|
1103 utf8 += char(0xfd); |
|
1104 utf8 += char(0xbf); |
|
1105 utf8 += char(0xbf); |
|
1106 utf8 += char(0xbf); |
|
1107 str = fromInvalidUtf8Sequence(utf8); |
|
1108 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-2") << utf8 << str << -1; |
|
1109 utf8 += char(0x30); |
|
1110 str += 0x30; |
|
1111 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-3") << utf8 << str << -1; |
|
1112 |
|
1113 utf8.clear(); |
|
1114 utf8 += char(0xfd); |
|
1115 utf8 += char(0xbf); |
|
1116 utf8 += char(0xbf); |
|
1117 str = fromInvalidUtf8Sequence(utf8); |
|
1118 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-4") << utf8 << str << -1; |
|
1119 utf8 += char(0x30); |
|
1120 str += 0x30; |
|
1121 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-5") << utf8 << str << -1; |
|
1122 |
|
1123 utf8.clear(); |
|
1124 utf8 += char(0xfd); |
|
1125 utf8 += char(0xbf); |
|
1126 str = fromInvalidUtf8Sequence(utf8); |
|
1127 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-6") << utf8 << str << -1; |
|
1128 utf8 += char(0x30); |
|
1129 str += 0x30; |
|
1130 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-7") << utf8 << str << -1; |
|
1131 |
|
1132 utf8.clear(); |
|
1133 utf8 += char(0xfd); |
|
1134 str = fromInvalidUtf8Sequence(utf8); |
|
1135 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-8") << utf8 << str << -1; |
|
1136 utf8 += char(0x30); |
|
1137 str += 0x30; |
|
1138 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.3.10-9") << utf8 << str << -1; |
|
1139 |
|
1140 // 3.4 |
|
1141 utf8.clear(); |
|
1142 utf8 += char(0xc0); |
|
1143 utf8 += char(0xe0); |
|
1144 utf8 += char(0x80); |
|
1145 utf8 += char(0xf0); |
|
1146 utf8 += char(0x80); |
|
1147 utf8 += char(0x80); |
|
1148 utf8 += char(0xf8); |
|
1149 utf8 += char(0x80); |
|
1150 utf8 += char(0x80); |
|
1151 utf8 += char(0x80); |
|
1152 utf8 += char(0xfc); |
|
1153 utf8 += char(0x80); |
|
1154 utf8 += char(0x80); |
|
1155 utf8 += char(0x80); |
|
1156 utf8 += char(0x80); |
|
1157 utf8 += char(0xdf); |
|
1158 utf8 += char(0xef); |
|
1159 utf8 += char(0xbf); |
|
1160 utf8 += char(0xf7); |
|
1161 utf8 += char(0xbf); |
|
1162 utf8 += char(0xbf); |
|
1163 utf8 += char(0xfb); |
|
1164 utf8 += char(0xbf); |
|
1165 utf8 += char(0xbf); |
|
1166 utf8 += char(0xbf); |
|
1167 utf8 += char(0xfd); |
|
1168 utf8 += char(0xbf); |
|
1169 utf8 += char(0xbf); |
|
1170 utf8 += char(0xbf); |
|
1171 utf8 += char(0xbf); |
|
1172 str = fromInvalidUtf8Sequence(utf8); |
|
1173 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.4") << utf8 << str << -1; |
|
1174 |
|
1175 // 3.5.1 |
|
1176 utf8.clear(); |
|
1177 utf8 += char(0xfe); |
|
1178 str = fromInvalidUtf8Sequence(utf8); |
|
1179 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.5.1") << utf8 << str << -1; |
|
1180 |
|
1181 // 3.5.2 |
|
1182 utf8.clear(); |
|
1183 utf8 += char(0xff); |
|
1184 str = fromInvalidUtf8Sequence(utf8); |
|
1185 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.5.1") << utf8 << str << -1; |
|
1186 |
|
1187 // 3.5.2 |
|
1188 utf8.clear(); |
|
1189 utf8 += char(0xfe); |
|
1190 utf8 += char(0xfe); |
|
1191 utf8 += char(0xff); |
|
1192 str = fromInvalidUtf8Sequence(utf8); |
|
1193 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 3.5.1") << utf8 << str << -1; |
|
1194 |
|
1195 // 4.1.1 |
|
1196 utf8.clear(); |
|
1197 utf8 += char(0xc0); |
|
1198 utf8 += char(0xaf); |
|
1199 str = QChar(QChar::ReplacementCharacter); |
|
1200 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.1") << utf8 << str << -1; |
|
1201 |
|
1202 // 4.1.2 |
|
1203 utf8.clear(); |
|
1204 utf8 += char(0xe0); |
|
1205 utf8 += char(0x80); |
|
1206 utf8 += char(0xaf); |
|
1207 str = QChar(QChar::ReplacementCharacter); |
|
1208 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.2") << utf8 << str << -1; |
|
1209 |
|
1210 // 4.1.3 |
|
1211 utf8.clear(); |
|
1212 utf8 += char(0xf0); |
|
1213 utf8 += char(0x80); |
|
1214 utf8 += char(0x80); |
|
1215 utf8 += char(0xaf); |
|
1216 str = QChar(QChar::ReplacementCharacter); |
|
1217 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.3") << utf8 << str << -1; |
|
1218 |
|
1219 // 4.1.4 |
|
1220 utf8.clear(); |
|
1221 utf8 += char(0xf8); |
|
1222 utf8 += char(0x80); |
|
1223 utf8 += char(0x80); |
|
1224 utf8 += char(0x80); |
|
1225 utf8 += char(0xaf); |
|
1226 str = fromInvalidUtf8Sequence(utf8); |
|
1227 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.4") << utf8 << str << -1; |
|
1228 |
|
1229 // 4.1.5 |
|
1230 utf8.clear(); |
|
1231 utf8 += char(0xfc); |
|
1232 utf8 += char(0x80); |
|
1233 utf8 += char(0x80); |
|
1234 utf8 += char(0x80); |
|
1235 utf8 += char(0x80); |
|
1236 utf8 += char(0xaf); |
|
1237 str = fromInvalidUtf8Sequence(utf8); |
|
1238 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.1.5") << utf8 << str << -1; |
|
1239 |
|
1240 // 4.2.1 |
|
1241 utf8.clear(); |
|
1242 utf8 += char(0xc1); |
|
1243 utf8 += char(0xbf); |
|
1244 str = QChar(QChar::ReplacementCharacter); |
|
1245 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.1") << utf8 << str << -1; |
|
1246 |
|
1247 // 4.2.2 |
|
1248 utf8.clear(); |
|
1249 utf8 += char(0xe0); |
|
1250 utf8 += char(0x9f); |
|
1251 utf8 += char(0xbf); |
|
1252 str = QChar(QChar::ReplacementCharacter); |
|
1253 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.2") << utf8 << str << -1; |
|
1254 |
|
1255 // 4.2.3 |
|
1256 utf8.clear(); |
|
1257 utf8 += char(0xf0); |
|
1258 utf8 += char(0x8f); |
|
1259 utf8 += char(0xbf); |
|
1260 utf8 += char(0xbf); |
|
1261 str = QChar(QChar::ReplacementCharacter); |
|
1262 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.3") << utf8 << str << -1; |
|
1263 |
|
1264 // 4.2.4 |
|
1265 utf8.clear(); |
|
1266 utf8 += char(0xf8); |
|
1267 utf8 += char(0x87); |
|
1268 utf8 += char(0xbf); |
|
1269 utf8 += char(0xbf); |
|
1270 utf8 += char(0xbf); |
|
1271 str = fromInvalidUtf8Sequence(utf8); |
|
1272 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.4") << utf8 << str << -1; |
|
1273 |
|
1274 // 4.2.5 |
|
1275 utf8.clear(); |
|
1276 utf8 += char(0xfc); |
|
1277 utf8 += char(0x83); |
|
1278 utf8 += char(0xbf); |
|
1279 utf8 += char(0xbf); |
|
1280 utf8 += char(0xbf); |
|
1281 utf8 += char(0xbf); |
|
1282 str = fromInvalidUtf8Sequence(utf8); |
|
1283 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.2.5") << utf8 << str << -1; |
|
1284 |
|
1285 // 4.3.1 |
|
1286 utf8.clear(); |
|
1287 utf8 += char(0xc0); |
|
1288 utf8 += char(0x80); |
|
1289 str = QChar(QChar::ReplacementCharacter); |
|
1290 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.1") << utf8 << str << -1; |
|
1291 |
|
1292 // 4.3.2 |
|
1293 utf8.clear(); |
|
1294 utf8 += char(0xe0); |
|
1295 utf8 += char(0x80); |
|
1296 utf8 += char(0x80); |
|
1297 str = QChar(QChar::ReplacementCharacter); |
|
1298 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.2") << utf8 << str << -1; |
|
1299 |
|
1300 // 4.3.3 |
|
1301 utf8.clear(); |
|
1302 utf8 += char(0xf0); |
|
1303 utf8 += char(0x80); |
|
1304 utf8 += char(0x80); |
|
1305 utf8 += char(0x80); |
|
1306 str = QChar(QChar::ReplacementCharacter); |
|
1307 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.3") << utf8 << str << -1; |
|
1308 |
|
1309 // 4.3.4 |
|
1310 utf8.clear(); |
|
1311 utf8 += char(0xf8); |
|
1312 utf8 += char(0x80); |
|
1313 utf8 += char(0x80); |
|
1314 utf8 += char(0x80); |
|
1315 utf8 += char(0x80); |
|
1316 str = fromInvalidUtf8Sequence(utf8); |
|
1317 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.4") << utf8 << str << -1; |
|
1318 |
|
1319 // 4.3.5 |
|
1320 utf8.clear(); |
|
1321 utf8 += char(0xfc); |
|
1322 utf8 += char(0x80); |
|
1323 utf8 += char(0x80); |
|
1324 utf8 += char(0x80); |
|
1325 utf8 += char(0x80); |
|
1326 utf8 += char(0x80); |
|
1327 str = fromInvalidUtf8Sequence(utf8); |
|
1328 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 4.3.5") << utf8 << str << -1; |
|
1329 |
|
1330 // 5.1.1 |
|
1331 utf8.clear(); |
|
1332 utf8 += char(0xed); |
|
1333 utf8 += char(0xa0); |
|
1334 utf8 += char(0x80); |
|
1335 str = QChar(QChar::ReplacementCharacter); |
|
1336 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.1") << utf8 << str << -1; |
|
1337 |
|
1338 // 5.1.2 |
|
1339 utf8.clear(); |
|
1340 utf8 += char(0xed); |
|
1341 utf8 += char(0xad); |
|
1342 utf8 += char(0xbf); |
|
1343 str = QChar(QChar::ReplacementCharacter); |
|
1344 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.2") << utf8 << str << -1; |
|
1345 |
|
1346 // 5.1.3 |
|
1347 utf8.clear(); |
|
1348 utf8 += char(0xed); |
|
1349 utf8 += char(0xae); |
|
1350 utf8 += char(0x80); |
|
1351 str = QChar(QChar::ReplacementCharacter); |
|
1352 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.3") << utf8 << str << -1; |
|
1353 |
|
1354 // 5.1.4 |
|
1355 utf8.clear(); |
|
1356 utf8 += char(0xed); |
|
1357 utf8 += char(0xaf); |
|
1358 utf8 += char(0xbf); |
|
1359 str = QChar(QChar::ReplacementCharacter); |
|
1360 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.4") << utf8 << str << -1; |
|
1361 |
|
1362 // 5.1.5 |
|
1363 utf8.clear(); |
|
1364 utf8 += char(0xed); |
|
1365 utf8 += char(0xb0); |
|
1366 utf8 += char(0x80); |
|
1367 str = QChar(QChar::ReplacementCharacter); |
|
1368 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.5") << utf8 << str << -1; |
|
1369 |
|
1370 // 5.1.6 |
|
1371 utf8.clear(); |
|
1372 utf8 += char(0xed); |
|
1373 utf8 += char(0xbe); |
|
1374 utf8 += char(0x80); |
|
1375 str = QChar(QChar::ReplacementCharacter); |
|
1376 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.6") << utf8 << str << -1; |
|
1377 |
|
1378 // 5.1.7 |
|
1379 utf8.clear(); |
|
1380 utf8 += char(0xed); |
|
1381 utf8 += char(0xbf); |
|
1382 utf8 += char(0xbf); |
|
1383 str = QChar(QChar::ReplacementCharacter); |
|
1384 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.1.7") << utf8 << str << -1; |
|
1385 |
|
1386 // 5.2.1 |
|
1387 utf8.clear(); |
|
1388 utf8 += char(0xed); |
|
1389 utf8 += char(0xa0); |
|
1390 utf8 += char(0x80); |
|
1391 utf8 += char(0xed); |
|
1392 utf8 += char(0xb0); |
|
1393 utf8 += char(0x80); |
|
1394 str.clear(); |
|
1395 str += QChar(QChar::ReplacementCharacter); |
|
1396 str += QChar(QChar::ReplacementCharacter); |
|
1397 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.1") << utf8 << str << -1; |
|
1398 |
|
1399 // 5.2.2 |
|
1400 utf8.clear(); |
|
1401 utf8 += char(0xed); |
|
1402 utf8 += char(0xa0); |
|
1403 utf8 += char(0x80); |
|
1404 utf8 += char(0xed); |
|
1405 utf8 += char(0xbf); |
|
1406 utf8 += char(0xbf); |
|
1407 str.clear(); |
|
1408 str += QChar(QChar::ReplacementCharacter); |
|
1409 str += QChar(QChar::ReplacementCharacter); |
|
1410 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.2") << utf8 << str << -1; |
|
1411 |
|
1412 // 5.2.3 |
|
1413 utf8.clear(); |
|
1414 utf8 += char(0xed); |
|
1415 utf8 += char(0xad); |
|
1416 utf8 += char(0xbf); |
|
1417 utf8 += char(0xed); |
|
1418 utf8 += char(0xb0); |
|
1419 utf8 += char(0x80); |
|
1420 str.clear(); |
|
1421 str += QChar(QChar::ReplacementCharacter); |
|
1422 str += QChar(QChar::ReplacementCharacter); |
|
1423 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.3") << utf8 << str << -1; |
|
1424 |
|
1425 // 5.2.4 |
|
1426 utf8.clear(); |
|
1427 utf8 += char(0xed); |
|
1428 utf8 += char(0xad); |
|
1429 utf8 += char(0xbf); |
|
1430 utf8 += char(0xed); |
|
1431 utf8 += char(0xbf); |
|
1432 utf8 += char(0xbf); |
|
1433 str.clear(); |
|
1434 str += QChar(QChar::ReplacementCharacter); |
|
1435 str += QChar(QChar::ReplacementCharacter); |
|
1436 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.4") << utf8 << str << -1; |
|
1437 |
|
1438 // 5.2.5 |
|
1439 utf8.clear(); |
|
1440 utf8 += char(0xed); |
|
1441 utf8 += char(0xae); |
|
1442 utf8 += char(0x80); |
|
1443 utf8 += char(0xed); |
|
1444 utf8 += char(0xb0); |
|
1445 utf8 += char(0x80); |
|
1446 str.clear(); |
|
1447 str += QChar(QChar::ReplacementCharacter); |
|
1448 str += QChar(QChar::ReplacementCharacter); |
|
1449 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.5") << utf8 << str << -1; |
|
1450 |
|
1451 // 5.2.6 |
|
1452 utf8.clear(); |
|
1453 utf8 += char(0xed); |
|
1454 utf8 += char(0xae); |
|
1455 utf8 += char(0x80); |
|
1456 utf8 += char(0xed); |
|
1457 utf8 += char(0xbf); |
|
1458 utf8 += char(0xbf); |
|
1459 str.clear(); |
|
1460 str += QChar(QChar::ReplacementCharacter); |
|
1461 str += QChar(QChar::ReplacementCharacter); |
|
1462 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.6") << utf8 << str << -1; |
|
1463 |
|
1464 // 5.2.7 |
|
1465 utf8.clear(); |
|
1466 utf8 += char(0xed); |
|
1467 utf8 += char(0xaf); |
|
1468 utf8 += char(0xbf); |
|
1469 utf8 += char(0xed); |
|
1470 utf8 += char(0xb0); |
|
1471 utf8 += char(0x80); |
|
1472 str.clear(); |
|
1473 str += QChar(QChar::ReplacementCharacter); |
|
1474 str += QChar(QChar::ReplacementCharacter); |
|
1475 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.7") << utf8 << str << -1; |
|
1476 |
|
1477 // 5.2.8 |
|
1478 utf8.clear(); |
|
1479 utf8 += char(0xed); |
|
1480 utf8 += char(0xaf); |
|
1481 utf8 += char(0xbf); |
|
1482 utf8 += char(0xed); |
|
1483 utf8 += char(0xbf); |
|
1484 utf8 += char(0xbf); |
|
1485 str.clear(); |
|
1486 str += QChar(QChar::ReplacementCharacter); |
|
1487 str += QChar(QChar::ReplacementCharacter); |
|
1488 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.2.8") << utf8 << str << -1; |
|
1489 |
|
1490 // 5.3.1 |
|
1491 utf8.clear(); |
|
1492 utf8 += char(0xef); |
|
1493 utf8 += char(0xbf); |
|
1494 utf8 += char(0xbe); |
|
1495 str = QChar(QChar::ReplacementCharacter); |
|
1496 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.3.1") << utf8 << str << -1; |
|
1497 |
|
1498 // 5.3.2 |
|
1499 utf8.clear(); |
|
1500 utf8 += char(0xef); |
|
1501 utf8 += char(0xbf); |
|
1502 utf8 += char(0xbf); |
|
1503 str = QChar(QChar::ReplacementCharacter); |
|
1504 QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 5.3.2") << utf8 << str << -1; |
|
1505 } |
|
1506 |
|
1507 void tst_QTextCodec::utf8Codec() |
|
1508 { |
|
1509 QTextCodec *codec = QTextCodec::codecForMib(106); // UTF-8 |
|
1510 QVERIFY(codec != 0); |
|
1511 |
|
1512 QFETCH(QByteArray, utf8); |
|
1513 QFETCH(QString, res); |
|
1514 QFETCH(int, len); |
|
1515 |
|
1516 QString str = codec->toUnicode(utf8.isNull() ? 0 : utf8.constData(), |
|
1517 len < 0 ? qstrlen(utf8.constData()) : len); |
|
1518 QCOMPARE(str, res); |
|
1519 |
|
1520 str = QString::fromUtf8(utf8.isNull() ? 0 : utf8.constData(), len); |
|
1521 QCOMPARE(str, res); |
|
1522 } |
|
1523 |
|
1524 void tst_QTextCodec::utf8bom_data() |
|
1525 { |
|
1526 QTest::addColumn<QByteArray>("data"); |
|
1527 QTest::addColumn<QString>("result"); |
|
1528 |
|
1529 QTest::newRow("nobom") |
|
1530 << QByteArray("\302\240", 2) |
|
1531 << QString("\240"); |
|
1532 |
|
1533 { |
|
1534 static const ushort data[] = { 0x201d }; |
|
1535 QTest::newRow("nobom 2") |
|
1536 << QByteArray("\342\200\235", 3) |
|
1537 << QString::fromUtf16(data, sizeof(data)/sizeof(short)); |
|
1538 } |
|
1539 |
|
1540 { |
|
1541 static const ushort data[] = { 0xf000 }; |
|
1542 QTest::newRow("bom1") |
|
1543 << QByteArray("\357\200\200", 3) |
|
1544 << QString::fromUtf16(data, sizeof(data)/sizeof(short)); |
|
1545 } |
|
1546 |
|
1547 { |
|
1548 static const ushort data[] = { 0xfec0 }; |
|
1549 QTest::newRow("bom2") |
|
1550 << QByteArray("\357\273\200", 3) |
|
1551 << QString::fromUtf16(data, sizeof(data)/sizeof(short)); |
|
1552 } |
|
1553 |
|
1554 { |
|
1555 QTest::newRow("normal-bom") |
|
1556 << QByteArray("\357\273\277a", 4) |
|
1557 << QString("a"); |
|
1558 } |
|
1559 |
|
1560 { |
|
1561 static const ushort data[] = { 0x61, 0xfeff, 0x62 }; |
|
1562 QTest::newRow("middle-bom") |
|
1563 << QByteArray("a\357\273\277b", 5) |
|
1564 << QString::fromUtf16(data, sizeof(data)/sizeof(short)); |
|
1565 } |
|
1566 } |
|
1567 |
|
1568 void tst_QTextCodec::utf8bom() |
|
1569 { |
|
1570 QFETCH(QByteArray, data); |
|
1571 QFETCH(QString, result); |
|
1572 |
|
1573 QTextCodec *const codec = QTextCodec::codecForMib(106); // UTF-8 |
|
1574 Q_ASSERT(codec); |
|
1575 |
|
1576 QCOMPARE(codec->toUnicode(data.constData(), data.length(), 0), result); |
|
1577 |
|
1578 QTextCodec::ConverterState state; |
|
1579 QCOMPARE(codec->toUnicode(data.constData(), data.length(), &state), result); |
|
1580 } |
|
1581 |
|
1582 void tst_QTextCodec::utfHeaders_data() |
|
1583 { |
|
1584 QTest::addColumn<QByteArray>("codecName"); |
|
1585 QTest::addColumn<int>("flags"); |
|
1586 QTest::addColumn<QByteArray>("encoded"); |
|
1587 QTest::addColumn<QString>("unicode"); |
|
1588 QTest::addColumn<bool>("toUnicode"); |
|
1589 |
|
1590 QTest::newRow("utf8 bom") |
|
1591 << QByteArray("UTF-8") |
|
1592 << 0 |
|
1593 << QByteArray("\xef\xbb\xbfhello") |
|
1594 << QString::fromLatin1("hello") |
|
1595 << true; |
|
1596 QTest::newRow("utf8 nobom") |
|
1597 << QByteArray("UTF-8") |
|
1598 << 0 |
|
1599 << QByteArray("hello") |
|
1600 << QString::fromLatin1("hello") |
|
1601 << true; |
|
1602 QTest::newRow("utf8 bom ignore header") |
|
1603 << QByteArray("UTF-8") |
|
1604 << (int)QTextCodec::IgnoreHeader |
|
1605 << QByteArray("\xef\xbb\xbfhello") |
|
1606 << (QString(QChar(0xfeff)) + QString::fromLatin1("hello")) |
|
1607 << true; |
|
1608 QTest::newRow("utf8 nobom ignore header") |
|
1609 << QByteArray("UTF-8") |
|
1610 << (int)QTextCodec::IgnoreHeader |
|
1611 << QByteArray("hello") |
|
1612 << QString::fromLatin1("hello") |
|
1613 << true; |
|
1614 |
|
1615 QTest::newRow("utf16 bom be") |
|
1616 << QByteArray("UTF-16") |
|
1617 << 0 |
|
1618 << QByteArray("\xfe\xff\0h\0e\0l", 8) |
|
1619 << QString::fromLatin1("hel") |
|
1620 << true; |
|
1621 QTest::newRow("utf16 bom le") |
|
1622 << QByteArray("UTF-16") |
|
1623 << 0 |
|
1624 << QByteArray("\xff\xfeh\0e\0l\0", 8) |
|
1625 << QString::fromLatin1("hel") |
|
1626 << true; |
|
1627 if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { |
|
1628 QTest::newRow("utf16 nobom") |
|
1629 << QByteArray("UTF-16") |
|
1630 << 0 |
|
1631 << QByteArray("\0h\0e\0l", 6) |
|
1632 << QString::fromLatin1("hel") |
|
1633 << true; |
|
1634 QTest::newRow("utf16 bom be ignore header") |
|
1635 << QByteArray("UTF-16") |
|
1636 << (int)QTextCodec::IgnoreHeader |
|
1637 << QByteArray("\xfe\xff\0h\0e\0l", 8) |
|
1638 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1639 << true; |
|
1640 } else { |
|
1641 QTest::newRow("utf16 nobom") |
|
1642 << QByteArray("UTF-16") |
|
1643 << 0 |
|
1644 << QByteArray("h\0e\0l\0", 6) |
|
1645 << QString::fromLatin1("hel") |
|
1646 << true; |
|
1647 QTest::newRow("utf16 bom le ignore header") |
|
1648 << QByteArray("UTF-16") |
|
1649 << (int)QTextCodec::IgnoreHeader |
|
1650 << QByteArray("\xff\xfeh\0e\0l\0", 8) |
|
1651 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1652 << true; |
|
1653 } |
|
1654 |
|
1655 QTest::newRow("utf16-be bom be") |
|
1656 << QByteArray("UTF-16BE") |
|
1657 << 0 |
|
1658 << QByteArray("\xfe\xff\0h\0e\0l", 8) |
|
1659 << QString::fromLatin1("hel") |
|
1660 << true; |
|
1661 QTest::newRow("utf16-be nobom") |
|
1662 << QByteArray("UTF-16BE") |
|
1663 << 0 |
|
1664 << QByteArray("\0h\0e\0l", 6) |
|
1665 << QString::fromLatin1("hel") |
|
1666 << true; |
|
1667 QTest::newRow("utf16-be bom be ignore header") |
|
1668 << QByteArray("UTF-16BE") |
|
1669 << (int)QTextCodec::IgnoreHeader |
|
1670 << QByteArray("\xfe\xff\0h\0e\0l", 8) |
|
1671 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1672 << true; |
|
1673 |
|
1674 QTest::newRow("utf16-le bom le") |
|
1675 << QByteArray("UTF-16LE") |
|
1676 << 0 |
|
1677 << QByteArray("\xff\xfeh\0e\0l\0", 8) |
|
1678 << QString::fromLatin1("hel") |
|
1679 << true; |
|
1680 QTest::newRow("utf16-le nobom") |
|
1681 << QByteArray("UTF-16LE") |
|
1682 << 0 |
|
1683 << QByteArray("h\0e\0l\0", 6) |
|
1684 << QString::fromLatin1("hel") |
|
1685 << true; |
|
1686 QTest::newRow("utf16-le bom le ignore header") |
|
1687 << QByteArray("UTF-16LE") |
|
1688 << (int)QTextCodec::IgnoreHeader |
|
1689 << QByteArray("\xff\xfeh\0e\0l\0", 8) |
|
1690 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1691 << true; |
|
1692 |
|
1693 |
|
1694 QTest::newRow("utf32 bom be") |
|
1695 << QByteArray("UTF-32") |
|
1696 << 0 |
|
1697 << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) |
|
1698 << QString::fromLatin1("hel") |
|
1699 << true; |
|
1700 QTest::newRow("utf32 bom le") |
|
1701 << QByteArray("UTF-32") |
|
1702 << 0 |
|
1703 << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) |
|
1704 << QString::fromLatin1("hel") |
|
1705 << true; |
|
1706 if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { |
|
1707 QTest::newRow("utf32 nobom") |
|
1708 << QByteArray("UTF-32") |
|
1709 << 0 |
|
1710 << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12) |
|
1711 << QString::fromLatin1("hel") |
|
1712 << true; |
|
1713 QTest::newRow("utf32 bom be ignore header") |
|
1714 << QByteArray("UTF-32") |
|
1715 << (int)QTextCodec::IgnoreHeader |
|
1716 << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) |
|
1717 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1718 << true; |
|
1719 } else { |
|
1720 QTest::newRow("utf32 nobom") |
|
1721 << QByteArray("UTF-32") |
|
1722 << 0 |
|
1723 << QByteArray("h\0\0\0e\0\0\0l\0\0\0", 12) |
|
1724 << QString::fromLatin1("hel") |
|
1725 << true; |
|
1726 QTest::newRow("utf32 bom le ignore header") |
|
1727 << QByteArray("UTF-32") |
|
1728 << (int)QTextCodec::IgnoreHeader |
|
1729 << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) |
|
1730 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1731 << true; |
|
1732 } |
|
1733 |
|
1734 |
|
1735 QTest::newRow("utf32-be bom be") |
|
1736 << QByteArray("UTF-32BE") |
|
1737 << 0 |
|
1738 << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) |
|
1739 << QString::fromLatin1("hel") |
|
1740 << true; |
|
1741 QTest::newRow("utf32-be nobom") |
|
1742 << QByteArray("UTF-32BE") |
|
1743 << 0 |
|
1744 << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12) |
|
1745 << QString::fromLatin1("hel") |
|
1746 << true; |
|
1747 QTest::newRow("utf32-be bom be ignore header") |
|
1748 << QByteArray("UTF-32BE") |
|
1749 << (int)QTextCodec::IgnoreHeader |
|
1750 << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) |
|
1751 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1752 << true; |
|
1753 |
|
1754 |
|
1755 QTest::newRow("utf32-le bom le") |
|
1756 << QByteArray("UTF-32LE") |
|
1757 << 0 |
|
1758 << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) |
|
1759 << QString::fromLatin1("hel") |
|
1760 << true; |
|
1761 QTest::newRow("utf32-le nobom") |
|
1762 << QByteArray("UTF-32LE") |
|
1763 << 0 |
|
1764 << QByteArray("h\0\0\0e\0\0\0l\0\0\0", 12) |
|
1765 << QString::fromLatin1("hel") |
|
1766 << true; |
|
1767 QTest::newRow("utf32-le bom le ignore header") |
|
1768 << QByteArray("UTF-32LE") |
|
1769 << (int)QTextCodec::IgnoreHeader |
|
1770 << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) |
|
1771 << (QString(QChar(0xfeff)) + QString::fromLatin1("hel")) |
|
1772 << true; |
|
1773 } |
|
1774 |
|
1775 void tst_QTextCodec::utfHeaders() |
|
1776 { |
|
1777 QFETCH(QByteArray, codecName); |
|
1778 QTextCodec *codec = QTextCodec::codecForName(codecName); |
|
1779 QVERIFY(codec != 0); |
|
1780 |
|
1781 QFETCH(int, flags); |
|
1782 QTextCodec::ConversionFlags cFlags = QTextCodec::ConversionFlags(flags); |
|
1783 QTextCodec::ConverterState state(cFlags); |
|
1784 |
|
1785 QFETCH(QByteArray, encoded); |
|
1786 QFETCH(QString, unicode); |
|
1787 |
|
1788 QFETCH(bool, toUnicode); |
|
1789 |
|
1790 QLatin1String ignoreReverseTestOn = (QSysInfo::ByteOrder == QSysInfo::BigEndian) ? QLatin1String(" le") : QLatin1String(" be"); |
|
1791 QString rowName(QTest::currentDataTag()); |
|
1792 |
|
1793 for (int i = 0; i < encoded.length(); ++i) |
|
1794 qDebug() << hex << " " << (uint)(uchar)encoded.at(i); |
|
1795 if (toUnicode) { |
|
1796 QString result = codec->toUnicode(encoded.constData(), encoded.length(), &state); |
|
1797 for (int i = 0; i < result.length(); ++i) |
|
1798 qDebug() << hex << " " << (uint)result.at(i).unicode(); |
|
1799 QCOMPARE(result.length(), unicode.length()); |
|
1800 QCOMPARE(result, unicode); |
|
1801 |
|
1802 if (!rowName.endsWith("nobom") && !rowName.contains(ignoreReverseTestOn)) { |
|
1803 QTextCodec::ConverterState state2(cFlags); |
|
1804 QByteArray reencoded = codec->fromUnicode(unicode.unicode(), unicode.length(), &state2); |
|
1805 QCOMPARE(reencoded, encoded); |
|
1806 } |
|
1807 } else { |
|
1808 QByteArray result = codec->fromUnicode(unicode.unicode(), unicode.length(), &state); |
|
1809 QCOMPARE(result, encoded); |
|
1810 } |
|
1811 } |
|
1812 |
|
1813 void tst_QTextCodec::codecForHtml() |
|
1814 { |
|
1815 QByteArray html("<html><head></head><body>blah</body></html>"); |
|
1816 |
|
1817 QCOMPARE(QTextCodec::codecForHtml(html)->mibEnum(), 4); // latin 1 |
|
1818 |
|
1819 QCOMPARE(QTextCodec::codecForHtml(html, QTextCodec::codecForMib(106))->mibEnum(), 106); // UTF-8 |
|
1820 |
|
1821 html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-15\" /></head></html>"; |
|
1822 QCOMPARE(QTextCodec::codecForHtml(html, QTextCodec::codecForMib(106))->mibEnum(), 111); // latin 15 |
|
1823 |
|
1824 html = "<html><head><meta content=\"text/html; charset=ISO-8859-15\" http-equiv=\"content-type\" /></head></html>"; |
|
1825 QCOMPARE(QTextCodec::codecForHtml(html, QTextCodec::codecForMib(106))->mibEnum(), 111); // latin 15 |
|
1826 |
|
1827 html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=invalid-foo\" /></head></html>"; |
|
1828 QCOMPARE(QTextCodec::codecForHtml(html, QTextCodec::codecForMib(106))->mibEnum(), 106); // UTF-8 |
|
1829 QCOMPARE(QTextCodec::codecForHtml(html)->mibEnum(), 4); // latin 1 |
|
1830 } |
|
1831 |
|
1832 void tst_QTextCodec::codecForUtfText_data() |
|
1833 { |
|
1834 QTest::addColumn<QByteArray>("encoded"); |
|
1835 QTest::addColumn<bool>("detected"); |
|
1836 QTest::addColumn<int>("mib"); |
|
1837 |
|
1838 |
|
1839 QTest::newRow("utf8 bom") |
|
1840 << QByteArray("\xef\xbb\xbfhello") |
|
1841 << true |
|
1842 << 106; |
|
1843 QTest::newRow("utf8 nobom") |
|
1844 << QByteArray("hello") |
|
1845 << false |
|
1846 << 0; |
|
1847 |
|
1848 QTest::newRow("utf16 bom be") |
|
1849 << QByteArray("\xfe\xff\0h\0e\0l", 8) |
|
1850 << true |
|
1851 << 1013; |
|
1852 QTest::newRow("utf16 bom le") |
|
1853 << QByteArray("\xff\xfeh\0e\0l\0", 8) |
|
1854 << true |
|
1855 << 1014; |
|
1856 QTest::newRow("utf16 nobom") |
|
1857 << QByteArray("\0h\0e\0l", 6) |
|
1858 << false |
|
1859 << 0; |
|
1860 |
|
1861 QTest::newRow("utf32 bom be") |
|
1862 << QByteArray("\0\0\xfe\xff\0\0\0h\0\0\0e\0\0\0l", 16) |
|
1863 << true |
|
1864 << 1018; |
|
1865 QTest::newRow("utf32 bom le") |
|
1866 << QByteArray("\xff\xfe\0\0h\0\0\0e\0\0\0l\0\0\0", 16) |
|
1867 << true |
|
1868 << 1019; |
|
1869 QTest::newRow("utf32 nobom") |
|
1870 << QByteArray("\0\0\0h\0\0\0e\0\0\0l", 12) |
|
1871 << false |
|
1872 << 0; |
|
1873 } |
|
1874 |
|
1875 void tst_QTextCodec::codecForUtfText() |
|
1876 { |
|
1877 QFETCH(QByteArray, encoded); |
|
1878 QFETCH(bool, detected); |
|
1879 QFETCH(int, mib); |
|
1880 |
|
1881 QTextCodec *codec = QTextCodec::codecForUtfText(encoded, 0); |
|
1882 if (detected) |
|
1883 QCOMPARE(codec->mibEnum(), mib); |
|
1884 else |
|
1885 QVERIFY(codec == 0); |
|
1886 } |
|
1887 |
|
1888 #ifdef Q_OS_UNIX |
|
1889 void tst_QTextCodec::toLocal8Bit() |
|
1890 { |
|
1891 #ifdef QT_NO_PROCESS |
|
1892 QSKIP("This test requires QProcess", SkipAll); |
|
1893 #else |
|
1894 QProcess process; |
|
1895 process.start("echo/echo"); |
|
1896 QString string(QChar(0x410)); |
|
1897 process.write((const char*)string.utf16(), string.length()*2); |
|
1898 |
|
1899 process.closeWriteChannel(); |
|
1900 process.waitForFinished(); |
|
1901 QCOMPARE(process.exitStatus(), QProcess::NormalExit); |
|
1902 QCOMPARE(process.exitCode(), 0); |
|
1903 #endif |
|
1904 } |
|
1905 #endif |
|
1906 |
|
1907 QTEST_MAIN(tst_QTextCodec) |
|
1908 #include "tst_qtextcodec.moc" |