ICU-4060 Add round-trip tests w/ getString(), getReader(), remove characters from test cases that don't round-trip.

X-SVN-Rev: 17752
This commit is contained in:
Eric Mader 2005-05-31 23:47:40 +00:00
parent 86b1781bad
commit 2514babddc
2 changed files with 115 additions and 20 deletions

View File

@ -206,7 +206,7 @@
ヨーロッパ、ソフトウェア、そしてインターネット:
Unicode でグローバル化を狙って
IUC10
第 10 回の Unicode 会議は 1997 年 3 月 1012日、ドイツのマインツで開かれます。参加希望の方は今すぐ登録してください。
第 10 回の Unicode 会議は 1997 年 3 月 10-12日、ドイツのマインツで開かれます。参加希望の方は今すぐ登録してください。
この会議では、グローバルなインタネット、Unicode、ソフトウェアの国際化およびローカリゼーション、OS およびアプリケーションでの
Unicode のインプリメンテーション、フォント、テキスト表示、マルチ言語コンピューティングにおける業界の専門家が集まります。
@ -380,9 +380,10 @@
<!-- No UTF-8 in this test because it detects as Shift_JIS -->
<!-- No ISO-2022-CN in this test because Java doesn't support it :-( -->
<test-case id="IUC10-zh" encodings="EUC-CN">
<!-- test-case id="IUC10-zh-Hant" encodings="UTF-8 ISO-2022-CN" -->
<!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. -->
<!--
歐洲,軟體及網際網路:
讓統一碼Unicode領你進入全世界
IUC10
@ -392,7 +393,24 @@
Unicode
當世界需要溝通時請用統一碼Unicode
-->
<!-- /test-case -->
<test-case id="IUC10-zh-Hans" encodings="UTF-8 EUC-CN">
<!-- Copyright © 1991-2005 Unicode, Inc. All rights reserved. -->
欧洲,软件+互联网
用统一码 (Unicode) 走遍世界
IUC10
将于1997年 3 月10日12日在德国 Mainz 市举行的第十届统一码国际研讨会现在开始注册。
本次会议将汇集各方面的专家。涉及的领域包括:国际互联网和统一码,国际化和本地化,
统一码在操作系统和应用软件中的实现,字型,文本格式以及多文种计算等。
Unicode
当世界需要沟通时请用Unicode
Conference Program
</test-case>
<test-case id="WIU-cz" encodings="UTF-8 ISO-8859-2/cs">
@ -439,7 +457,7 @@
Εκτός αυτού, οι κωδικοσελίδες αυτές διαφωνούσαν μεταξύ τους. Έτσι, δύο κωδικοσελίδες μπορούσαν κάλλιστα να
χρησιμοποιούν τον ίδιο αριθμό για δύο διαφορετικούς χαρακτήρες, ή να χρησιμοποιούν διαφορετικούς αριθμούς για
τον ίδιο χαρακτήρα. Κάθε υπολογιστής (και ιδίως εάν ήταν διακομιστής) έπρεπε να υποστηρίζει πλήθος διαφορετικών
κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή
κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή
λειτουργικών συστημάτων, τα δεδομένα αυτά κινδύνευαν να αλλοιωθούν.
</test-case>
@ -465,7 +483,7 @@
Εκτός αυτού, οι κωδικοσελίδες αυτές διαφωνούσαν μεταξύ τους. Έτσι, δύο κωδικοσελίδες μπορούσαν κάλλιστα να
χρησιμοποιούν τον ίδιο αριθμό για δύο διαφορετικούς χαρακτήρες, ή να χρησιμοποιούν διαφορετικούς αριθμούς για
τον ίδιο χαρακτήρα. Κάθε υπολογιστής (και ιδίως εάν ήταν διακομιστής) έπρεπε να υποστηρίζει πλήθος διαφορετικών
κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή
κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή
λειτουργικών συστημάτων, τα δεδομένα αυτά κινδύνευαν να αλλοιωθούν.
</test-case>

View File

@ -6,8 +6,10 @@
*/
package com.ibm.icu.dev.test.charsetdet;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.text.*;
@ -59,6 +61,51 @@ public class TestCharsetDetector extends TestFmwk {
}
private String stringFromReader(Reader reader)
{
StringBuffer sb = new StringBuffer();
char[] buffer = new char[1024];
int bytesRead = 0;
try {
while ((bytesRead = reader.read(buffer, 0, 1024)) >= 0) {
sb.append(buffer, 0, bytesRead);
}
return sb.toString();
} catch (Exception e) {
errln("stringFromReader() failed: " + e.toString());
return null;
}
}
private void checkMatch(CharsetDetector det, String testString, String encoding, String language, String id) throws Exception
{
CharsetMatch m = det.detect();
String decoded;
if (! m.getName().equals(encoding)) {
errln(id + ": encoding detection failure - expected " + encoding + ", got " + m.getName());
return;
}
if (! (language == null || m.getLanguage().equals(language))) {
errln(id + ", " + encoding + ": language detection failure - expected " + language + ", got " + m.getLanguage());
}
decoded = m.getString();
if (! testString.equals(decoded)) {
errln(id + ", " + encoding + ": getString() didn't return the original string!");
}
decoded = stringFromReader(m.getReader());
if (! testString.equals(decoded)) {
errln(id + ", " + encoding + ": getReader() didn't yield the original string!");
}
}
private void checkEncoding(String testString, String encoding, String id)
{
String enc = null, lang = null;
@ -74,21 +121,11 @@ public class TestCharsetDetector extends TestFmwk {
CharsetDetector det = new CharsetDetector();
det.setText(bytes);
checkMatch(det, testString, enc, lang, id);
CharsetMatch m = det.detect();
// CheckAssert(m.getName().equals(enc));
if (! m.getName().equals(enc)) {
errln(id + ": detection failure - expected " + enc + " got " + m.getName());
}
if (lang != null) {
// CheckAssert(m.getLanguage().equals(lang));
if (! m.getLanguage().equals(lang)) {
errln(id + ": language detection failure - expected " + lang + " got " + m.getLanguage());
}
}
} catch (Exception e) {
det.setText(new ByteArrayInputStream(bytes));
checkMatch(det, testString, enc, lang, id);
} catch (Exception e) {
errln(id + ": " + e.toString());
}
@ -105,6 +142,30 @@ public class TestCharsetDetector extends TestFmwk {
// System.out.println("\"" + charsetNames[i] + "\"");
}
}
public void TestInputFilter() throws Exception
{
String s = "<a> <lot> <of> <English> <inside> <the> <markup> Une peut de Fran\u00E7ais. <to> <confuse> <the> <detector>";
byte[] bytes = s.getBytes("ISO-8859-1");
CharsetDetector det = new CharsetDetector();
CharsetMatch m;
det.enableInputFilter(true);
det.setText(bytes);
m = det.detect();
if (! m.getLanguage().equals("fr")) {
errln("input filter did not strip markup!");
}
det.enableInputFilter(false);
det.setText(bytes);
m = det.detect();
if (! m.getLanguage().equals("en")) {
errln("unfiltered input did not detect as English!");
}
}
public void TestUTF8() throws Exception {
@ -114,11 +175,27 @@ public class TestCharsetDetector extends TestFmwk {
"Sure would be nice if our source could contain Unicode directly!";
byte [] bytes = s.getBytes("UTF-8");
CharsetDetector det = new CharsetDetector();
CharsetMatch m;
String retrievedS;
Reader reader;
det.setText(bytes);
CharsetMatch m = det.detect();
m = det.detect();
CheckAssert(m.getName().equals("UTF-8"));
String retrievedS = m.getString();
retrievedS = m.getString();
CheckAssert(s.equals(retrievedS));
reader = m.getReader();
CheckAssert(s.equals(stringFromReader(reader)));
det.setText(new ByteArrayInputStream(bytes));
m = det.detect();
CheckAssert(m.getName().equals("UTF-8"));
retrievedS = m.getString();
CheckAssert(s.equals(retrievedS));
reader = m.getReader();
CheckAssert(s.equals(stringFromReader(reader)));
}
public void TestDetection()