17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 1996-2010, International Business Machines Corporation and * 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.rbbi; 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.CharacterIterator; 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Arrays; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.BreakIterator; 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class BreakIteratorRegTest extends TestFmwk 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert{ 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) throws Exception { 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new BreakIteratorRegTest().run(args); 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestRegUnreg() { 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale thailand_locale = new Locale("th", "TH", ""); 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Locale foo_locale = new Locale("fu", "FU", "FOO"); 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator jwbi = BreakIterator.getWordInstance(Locale.JAPAN); 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator uwbi = BreakIterator.getWordInstance(Locale.US); 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator usbi = BreakIterator.getSentenceInstance(Locale.US); 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator twbi = BreakIterator.getWordInstance(thailand_locale); 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator rwbi = BreakIterator.getWordInstance(new Locale("", "", "")); 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator sbi = (BreakIterator)usbi.clone(); 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // todo: this will cause the test to fail, no way to set a breakiterator to null text so can't fix yet. 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // 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."; 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // sbi.setText(text); 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(!BreakIterator.unregister(""), "unregister before register"); // coverage 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object key0 = BreakIterator.registerInstance((BreakIterator)twbi.clone(), foo_locale, BreakIterator.KIND_WORD); 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object key1 = BreakIterator.registerInstance(sbi, Locale.US, BreakIterator.KIND_WORD); 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Object key2 = BreakIterator.registerInstance((BreakIterator)twbi.clone(), Locale.US, BreakIterator.KIND_WORD); 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test0 = BreakIterator.getWordInstance(Locale.JAPAN); 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test1 = BreakIterator.getWordInstance(Locale.US); 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test2 = BreakIterator.getSentenceInstance(Locale.US); 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test3 = BreakIterator.getWordInstance(thailand_locale); 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test4 = BreakIterator.getWordInstance(foo_locale); 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test0, jwbi, "japan word == japan word"); 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test1, twbi, "us word == thai word"); 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test2, usbi, "us sentence == us sentence"); 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test3, twbi, "thai word == thai word"); 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test4, twbi, "foo word == thai word"); 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //Locale[] locales = BreakIterator.getAvailableLocales(); 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(BreakIterator.unregister(key2), "unregister us word (thai word)"); 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(!BreakIterator.unregister(key2), "unregister second time"); 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean error = false; 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator.unregister(null); 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (IllegalArgumentException e) { 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert error = true; 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(error, "unregister null"); 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CharacterIterator sci = BreakIterator.getWordInstance(Locale.US).getText(); 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int len = sci.getEndIndex() - sci.getBeginIndex(); 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(len, 0, "us word text: " + getString(sci)); 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(Arrays.asList(BreakIterator.getAvailableLocales()).contains(foo_locale), "foo_locale"); 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(BreakIterator.unregister(key0), "unregister foo word (thai word)"); 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(!Arrays.asList(BreakIterator.getAvailableLocales()).contains(foo_locale), "no foo_locale"); 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(BreakIterator.getWordInstance(Locale.US), usbi, "us word == us sentence"); 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(BreakIterator.unregister(key1), "unregister us word (us sentence)"); 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test0 = BreakIterator.getWordInstance(Locale.JAPAN); 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test1 = BreakIterator.getWordInstance(Locale.US); 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test2 = BreakIterator.getSentenceInstance(Locale.US); 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test3 = BreakIterator.getWordInstance(thailand_locale); 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator test4 = BreakIterator.getWordInstance(foo_locale); 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test0, jwbi, "japanese word break"); 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test1, uwbi, "us sentence-word break"); 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test2, usbi, "us sentence break"); 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test3, twbi, "thai word break"); 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(test4, rwbi, "root word break"); 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CharacterIterator sci = test1.getText(); 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int len = sci.getEndIndex() - sci.getBeginIndex(); 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEqual(len, 0, "us sentence-word break text: " + getString(sci)); 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void assertEqual(Object lhs, Object rhs, String msg) { 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert msg(msg, lhs.equals(rhs) ? LOG : ERR, true, true); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void assertEqual(int lhs, int rhs, String msg) { 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert msg(msg, lhs == rhs ? LOG : ERR, true, true); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private void assertTrue(boolean arg, String msg) { 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert msg(msg, arg ? LOG : ERR, true, true); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static String getString(CharacterIterator ci) { 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer buf = new StringBuffer(ci.getEndIndex() - ci.getBeginIndex() + 2); 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("'"); 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (char c = ci.first(); c != CharacterIterator.DONE; c = ci.next()) { 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(c); 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("'"); 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return buf.toString(); 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 123