tests/auto/qtextcodec/tst_qtextcodec.cpp
changeset 30 5dc02b23752f
parent 29 b72c6db6890b
child 33 3e2da88830cd
--- a/tests/auto/qtextcodec/tst_qtextcodec.cpp	Wed Jun 23 19:07:03 2010 +0300
+++ b/tests/auto/qtextcodec/tst_qtextcodec.cpp	Tue Jul 06 15:10:48 2010 +0300
@@ -431,9 +431,12 @@
     Q_ASSERT(codec);
 
     const QByteArray asDecoded(codec->fromUnicode(input));
+    QCOMPARE(asDecoded, QByteArray("?"));
+
+    QByteArray ffff("\357\277\277");
     QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull);
-    QVERIFY(codec->toUnicode(asDecoded.constData(), asDecoded.length(), &state) == QChar(0));
-    QVERIFY(codec->toUnicode(asDecoded) == QChar(0xfffd));
+    QVERIFY(codec->toUnicode(ffff.constData(), ffff.length(), &state) == QChar(0));
+    QVERIFY(codec->toUnicode(ffff) == QChar(0xfffd));
 }
 
 void tst_QTextCodec::flagF7808080() const
@@ -494,12 +497,11 @@
     /* When 0xEFBFBF is preceeded by what seems to be an arbitrary character,
      * QTextCodec fails to flag it. */
     {
-        QEXPECT_FAIL("", "This is a bug and needs to be fixed.", Continue);
         QByteArray start("B");
         start.append(invalidInput);
 
         QTextCodec::ConverterState state(QTextCodec::ConvertInvalidToNull);
-        QVERIFY(codec->toUnicode(start.constData(), start.length(), &state) == QChar(0));
+        QVERIFY(codec->toUnicode(start.constData(), start.length(), &state) == QString::fromLatin1("B\0", 2));
     }
 }
 
@@ -744,15 +746,15 @@
     str = QChar(QChar::ReplacementCharacter);
     QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.3") << utf8 << str << -1;
 
-    // 2.3.4 U+0010FFFF
+    // 2.3.4 U+0010FFFD
     utf8.clear();
     utf8 += char(0xf4);
     utf8 += char(0x8f);
     utf8 += char(0xbf);
-    utf8 += char(0xbf);
+    utf8 += char(0xbd);
     str.clear();
     str += QChar(0xdbff);
-    str += QChar(0xdfff);
+    str += QChar(0xdffd);
     QTest::newRow("http://www.w3.org/2001/06/utf-8-wrong/UTF-8-test.html 2.3.4") << utf8 << str << -1;
 
     // 2.3.5 U+00110000
@@ -1987,6 +1989,8 @@
 
 void tst_QTextCodec::threadSafety()
 {
+    QList<QByteArray> codecList = QTextCodec::availableCodecs();
+    QList<int> mibList = QTextCodec::availableMibs();
 #ifndef QT_NO_CONCURRENT
     QThreadPool::globalInstance()->setMaxThreadCount(12);
 
@@ -1997,8 +2001,6 @@
 
     QCOMPARE(res.results(), codecList);
     QCOMPARE(res2.results(), mibList);
-#else
-    QSKIP("This function is not yet supported with QT_NO_CONCURRENT defined.", SkipAll);
 #endif
 }
 
@@ -2176,6 +2178,45 @@
         koi8_u_ba.append(x);
     }
     QTest::newRow("KOI8-U") << QByteArray("KOI8-U") << koi8_u_ba;
+
+
+    QByteArray big5_ba;
+    for (unsigned char u=0xa1; u<=0xf9; u++) {
+        if (u==0xc8) {
+            continue;
+        }
+        for (unsigned char v=0x40; v<=0x7e; v++) {
+            big5_ba.append(u);
+            big5_ba.append(v);
+        }
+        unsigned char v_up;
+        switch (u) {
+            case 0xa3: v_up=0xbf; break;
+            case 0xc7: v_up=0xfc; break;
+            case 0xf9: v_up=0xd5; break;
+            default: v_up=0xfe;
+        }
+
+        for (unsigned char v=0xa1; v<=v_up; v++) {
+            if (u==0xa2 && (v==0xcc || v==0xce)) {
+                continue;
+            }
+            big5_ba.append(u);
+            big5_ba.append(v);
+        }
+    }
+
+    QTest::newRow("BIG5") << QByteArray("BIG5") << big5_ba;
+
+    QByteArray gb2312_ba;
+    for (unsigned char u=0xa1; u<=0xf7; u++) {
+        for (unsigned char v=0xa1; v<=0xfe; v++) {
+            gb2312_ba.append(u);
+            gb2312_ba.append(v);
+        }
+    }
+
+    QTest::newRow("GB2312") << QByteArray("GB2312") << gb2312_ba;
 }
 
 void tst_QTextCodec::moreToFromUnicode()