2 *******************************************************************************
\r
3 * Copyright (C) 1996-2010, International Business Machines Corporation and *
\r
4 * others. All Rights Reserved. *
\r
5 *******************************************************************************
\r
7 package com.ibm.icu.dev.test.rbbi;
\r
9 import java.text.CharacterIterator;
\r
10 import java.util.Arrays;
\r
11 import java.util.Locale;
\r
13 import com.ibm.icu.dev.test.TestFmwk;
\r
14 import com.ibm.icu.text.BreakIterator;
\r
16 public class BreakIteratorRegTest extends TestFmwk
\r
18 public static void main(String[] args) throws Exception {
\r
19 new BreakIteratorRegTest().run(args);
\r
22 public void TestRegUnreg() {
\r
23 Locale thailand_locale = new Locale("th", "TH", "");
\r
24 Locale foo_locale = new Locale("fu", "FU", "FOO");
\r
25 BreakIterator jwbi = BreakIterator.getWordInstance(Locale.JAPAN);
\r
26 BreakIterator uwbi = BreakIterator.getWordInstance(Locale.US);
\r
27 BreakIterator usbi = BreakIterator.getSentenceInstance(Locale.US);
\r
28 BreakIterator twbi = BreakIterator.getWordInstance(thailand_locale);
\r
29 BreakIterator rwbi = BreakIterator.getWordInstance(new Locale("", "", ""));
\r
31 BreakIterator sbi = (BreakIterator)usbi.clone();
\r
32 // todo: this will cause the test to fail, no way to set a breakiterator to null text so can't fix yet.
\r
33 // String text = "This is some test, by golly. Boy, they don't make tests like they used to, do they? This here test ain't worth $2.50. Nope.";
\r
34 // sbi.setText(text);
\r
36 assertTrue(!BreakIterator.unregister(""), "unregister before register"); // coverage
\r
38 Object key0 = BreakIterator.registerInstance((BreakIterator)twbi.clone(), foo_locale, BreakIterator.KIND_WORD);
\r
39 Object key1 = BreakIterator.registerInstance(sbi, Locale.US, BreakIterator.KIND_WORD);
\r
40 Object key2 = BreakIterator.registerInstance((BreakIterator)twbi.clone(), Locale.US, BreakIterator.KIND_WORD);
\r
43 BreakIterator test0 = BreakIterator.getWordInstance(Locale.JAPAN);
\r
44 BreakIterator test1 = BreakIterator.getWordInstance(Locale.US);
\r
45 BreakIterator test2 = BreakIterator.getSentenceInstance(Locale.US);
\r
46 BreakIterator test3 = BreakIterator.getWordInstance(thailand_locale);
\r
47 BreakIterator test4 = BreakIterator.getWordInstance(foo_locale);
\r
49 assertEqual(test0, jwbi, "japan word == japan word");
\r
50 assertEqual(test1, twbi, "us word == thai word");
\r
51 assertEqual(test2, usbi, "us sentence == us sentence");
\r
52 assertEqual(test3, twbi, "thai word == thai word");
\r
53 assertEqual(test4, twbi, "foo word == thai word");
\r
56 //Locale[] locales = BreakIterator.getAvailableLocales();
\r
58 assertTrue(BreakIterator.unregister(key2), "unregister us word (thai word)");
\r
59 assertTrue(!BreakIterator.unregister(key2), "unregister second time");
\r
60 boolean error = false;
\r
62 BreakIterator.unregister(null);
\r
64 catch (IllegalArgumentException e) {
\r
68 assertTrue(error, "unregister null");
\r
71 CharacterIterator sci = BreakIterator.getWordInstance(Locale.US).getText();
\r
72 int len = sci.getEndIndex() - sci.getBeginIndex();
\r
73 assertEqual(len, 0, "us word text: " + getString(sci));
\r
76 assertTrue(Arrays.asList(BreakIterator.getAvailableLocales()).contains(foo_locale), "foo_locale");
\r
77 assertTrue(BreakIterator.unregister(key0), "unregister foo word (thai word)");
\r
78 assertTrue(!Arrays.asList(BreakIterator.getAvailableLocales()).contains(foo_locale), "no foo_locale");
\r
79 assertEqual(BreakIterator.getWordInstance(Locale.US), usbi, "us word == us sentence");
\r
81 assertTrue(BreakIterator.unregister(key1), "unregister us word (us sentence)");
\r
83 BreakIterator test0 = BreakIterator.getWordInstance(Locale.JAPAN);
\r
84 BreakIterator test1 = BreakIterator.getWordInstance(Locale.US);
\r
85 BreakIterator test2 = BreakIterator.getSentenceInstance(Locale.US);
\r
86 BreakIterator test3 = BreakIterator.getWordInstance(thailand_locale);
\r
87 BreakIterator test4 = BreakIterator.getWordInstance(foo_locale);
\r
89 assertEqual(test0, jwbi, "japanese word break");
\r
90 assertEqual(test1, uwbi, "us sentence-word break");
\r
91 assertEqual(test2, usbi, "us sentence break");
\r
92 assertEqual(test3, twbi, "thai word break");
\r
93 assertEqual(test4, rwbi, "root word break");
\r
95 CharacterIterator sci = test1.getText();
\r
96 int len = sci.getEndIndex() - sci.getBeginIndex();
\r
97 assertEqual(len, 0, "us sentence-word break text: " + getString(sci));
\r
101 private void assertEqual(Object lhs, Object rhs, String msg) {
\r
102 msg(msg, lhs.equals(rhs) ? LOG : ERR, true, true);
\r
105 private void assertEqual(int lhs, int rhs, String msg) {
\r
106 msg(msg, lhs == rhs ? LOG : ERR, true, true);
\r
109 private void assertTrue(boolean arg, String msg) {
\r
110 msg(msg, arg ? LOG : ERR, true, true);
\r
113 private static String getString(CharacterIterator ci) {
\r
114 StringBuffer buf = new StringBuffer(ci.getEndIndex() - ci.getBeginIndex() + 2);
\r
116 for (char c = ci.first(); c != CharacterIterator.DONE; c = ci.next()) {
\r
120 return buf.toString();
\r