tests/auto/qtextcodec/tst_qtextcodec.cpp
branchGCC_SURGE
changeset 31 5daf16870df6
parent 30 5dc02b23752f
child 33 3e2da88830cd
--- a/tests/auto/qtextcodec/tst_qtextcodec.cpp	Mon Jun 21 22:38:13 2010 +0100
+++ b/tests/auto/qtextcodec/tst_qtextcodec.cpp	Thu Jul 22 16:41:55 2010 +0100
@@ -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
@@ -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()