From 2514babddc7c629070142ac71083fd646a872c84 Mon Sep 17 00:00:00 2001 From: Eric Mader Date: Tue, 31 May 2005 23:47:40 +0000 Subject: [PATCH] ICU-4060 Add round-trip tests w/ getString(), getReader(), remove characters from test cases that don't round-trip. X-SVN-Rev: 17752 --- .../test/charsetdet/CharsetDetectionTests.xml | 26 ++++- .../test/charsetdet/TestCharsetDetector.java | 109 +++++++++++++++--- 2 files changed, 115 insertions(+), 20 deletions(-) diff --git a/icu4j/src/com/ibm/icu/dev/test/charsetdet/CharsetDetectionTests.xml b/icu4j/src/com/ibm/icu/dev/test/charsetdet/CharsetDetectionTests.xml index 090c0f13ab..efb7f4b5ce 100644 --- a/icu4j/src/com/ibm/icu/dev/test/charsetdet/CharsetDetectionTests.xml +++ b/icu4j/src/com/ibm/icu/dev/test/charsetdet/CharsetDetectionTests.xml @@ -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 @@ - + + + + + + + + 欧洲,软件+互联网 + 用统一码 (Unicode) 走遍世界 + IUC10 + 将于1997年 3 月10日-12日在德国 Mainz 市举行的第十届统一码国际研讨会现在开始注册。 + 本次会议将汇集各方面的专家。涉及的领域包括:国际互联网和统一码,国际化和本地化, + 统一码在操作系统和应用软件中的实现,字型,文本格式以及多文种计算等。 + + Unicode + 当世界需要沟通时,请用Unicode! + +Conference Program @@ -439,7 +457,7 @@ Εκτός αυτού, οι κωδικοσελίδες αυτές διαφωνούσαν μεταξύ τους. Έτσι, δύο κωδικοσελίδες μπορούσαν κάλλιστα να χρησιμοποιούν τον ίδιο αριθμό για δύο διαφορετικούς χαρακτήρες, ή να χρησιμοποιούν διαφορετικούς αριθμούς για τον ίδιο χαρακτήρα. Κάθε υπολογιστής (και ιδίως εάν ήταν διακομιστής) έπρεπε να υποστηρίζει πλήθος διαφορετικών - κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή + κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή λειτουργικών συστημάτων, τα δεδομένα αυτά κινδύνευαν να αλλοιωθούν. @@ -465,7 +483,7 @@ Εκτός αυτού, οι κωδικοσελίδες αυτές διαφωνούσαν μεταξύ τους. Έτσι, δύο κωδικοσελίδες μπορούσαν κάλλιστα να χρησιμοποιούν τον ίδιο αριθμό για δύο διαφορετικούς χαρακτήρες, ή να χρησιμοποιούν διαφορετικούς αριθμούς για τον ίδιο χαρακτήρα. Κάθε υπολογιστής (και ιδίως εάν ήταν διακομιστής) έπρεπε να υποστηρίζει πλήθος διαφορετικών - κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή + κωδικοσελίδων· ταυτόχρονα κάθε φορά που δεδομένα μεταφέρονταν μεταξύ διαφορετικών κωδικοσελίδων ή λειτουργικών συστημάτων, τα δεδομένα αυτά κινδύνευαν να αλλοιωθούν. diff --git a/icu4j/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java b/icu4j/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java index 6511e943ed..dac0282542 100644 --- a/icu4j/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java +++ b/icu4j/src/com/ibm/icu/dev/test/charsetdet/TestCharsetDetector.java @@ -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 = " Une peut de Fran\u00E7ais. "; + 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()