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:
parent
86b1781bad
commit
2514babddc
@ -206,7 +206,7 @@
|
||||
ヨーロッパ、ソフトウェア、そしてインターネット:
|
||||
Unicode でグローバル化を狙って
|
||||
IUC10
|
||||
第 10 回の Unicode 会議は 1997 年 3 月 10~12日、ドイツのマインツで開かれます。参加希望の方は今すぐ登録してください。
|
||||
第 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>
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user