1 // 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html#License 3 /* 4 ******************************************************************************* 5 * Copyright (C) 1996-2010, International Business Machines Corporation and * 6 * others. All Rights Reserved. * 7 ******************************************************************************* 8 */ 9 package com.ibm.icu.dev.test.rbbi; 10 11 import java.text.CharacterIterator; 12 import java.util.Arrays; 13 import java.util.Locale; 14 15 import org.junit.Test; 16 import org.junit.runner.RunWith; 17 import org.junit.runners.JUnit4; 18 19 import com.ibm.icu.dev.test.TestFmwk; 20 import com.ibm.icu.text.BreakIterator; 21 22 @RunWith(JUnit4.class) 23 public class BreakIteratorRegTest extends TestFmwk 24 { 25 @Test 26 public void TestRegUnreg() { 27 Locale thailand_locale = new Locale("th", "TH", ""); 28 Locale foo_locale = new Locale("fu", "FU", "FOO"); 29 BreakIterator jwbi = BreakIterator.getWordInstance(Locale.JAPAN); 30 BreakIterator uwbi = BreakIterator.getWordInstance(Locale.US); 31 BreakIterator usbi = BreakIterator.getSentenceInstance(Locale.US); 32 BreakIterator twbi = BreakIterator.getWordInstance(thailand_locale); 33 BreakIterator rwbi = BreakIterator.getWordInstance(new Locale("", "", "")); 34 35 BreakIterator sbi = (BreakIterator)usbi.clone(); 36 // todo: this will cause the test to fail, no way to set a breakiterator to null text so can't fix yet. 37 // 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."; 38 // sbi.setText(text); 39 40 assertTrue(!BreakIterator.unregister(""), "unregister before register"); // coverage 41 42 Object key0 = BreakIterator.registerInstance((BreakIterator)twbi.clone(), foo_locale, BreakIterator.KIND_WORD); 43 Object key1 = BreakIterator.registerInstance(sbi, Locale.US, BreakIterator.KIND_WORD); 44 Object key2 = BreakIterator.registerInstance((BreakIterator)twbi.clone(), Locale.US, BreakIterator.KIND_WORD); 45 46 { 47 BreakIterator test0 = BreakIterator.getWordInstance(Locale.JAPAN); 48 BreakIterator test1 = BreakIterator.getWordInstance(Locale.US); 49 BreakIterator test2 = BreakIterator.getSentenceInstance(Locale.US); 50 BreakIterator test3 = BreakIterator.getWordInstance(thailand_locale); 51 BreakIterator test4 = BreakIterator.getWordInstance(foo_locale); 52 53 assertEqual(test0, jwbi, "japan word == japan word"); 54 assertEqual(test1, twbi, "us word == thai word"); 55 assertEqual(test2, usbi, "us sentence == us sentence"); 56 assertEqual(test3, twbi, "thai word == thai word"); 57 assertEqual(test4, twbi, "foo word == thai word"); 58 } 59 60 //Locale[] locales = BreakIterator.getAvailableLocales(); 61 62 assertTrue(BreakIterator.unregister(key2), "unregister us word (thai word)"); 63 assertTrue(!BreakIterator.unregister(key2), "unregister second time"); 64 boolean error = false; 65 try { 66 BreakIterator.unregister(null); 67 } 68 catch (IllegalArgumentException e) { 69 error = true; 70 } 71 72 assertTrue(error, "unregister null"); 73 74 { 75 CharacterIterator sci = BreakIterator.getWordInstance(Locale.US).getText(); 76 int len = sci.getEndIndex() - sci.getBeginIndex(); 77 assertEqual(len, 0, "us word text: " + getString(sci)); 78 } 79 80 assertTrue(Arrays.asList(BreakIterator.getAvailableLocales()).contains(foo_locale), "foo_locale"); 81 assertTrue(BreakIterator.unregister(key0), "unregister foo word (thai word)"); 82 assertTrue(!Arrays.asList(BreakIterator.getAvailableLocales()).contains(foo_locale), "no foo_locale"); 83 assertEqual(BreakIterator.getWordInstance(Locale.US), usbi, "us word == us sentence"); 84 85 assertTrue(BreakIterator.unregister(key1), "unregister us word (us sentence)"); 86 { 87 BreakIterator test0 = BreakIterator.getWordInstance(Locale.JAPAN); 88 BreakIterator test1 = BreakIterator.getWordInstance(Locale.US); 89 BreakIterator test2 = BreakIterator.getSentenceInstance(Locale.US); 90 BreakIterator test3 = BreakIterator.getWordInstance(thailand_locale); 91 BreakIterator test4 = BreakIterator.getWordInstance(foo_locale); 92 93 assertEqual(test0, jwbi, "japanese word break"); 94 assertEqual(test1, uwbi, "us sentence-word break"); 95 assertEqual(test2, usbi, "us sentence break"); 96 assertEqual(test3, twbi, "thai word break"); 97 assertEqual(test4, rwbi, "root word break"); 98 99 CharacterIterator sci = test1.getText(); 100 int len = sci.getEndIndex() - sci.getBeginIndex(); 101 assertEqual(len, 0, "us sentence-word break text: " + getString(sci)); 102 } 103 } 104 105 private void assertEqual(Object lhs, Object rhs, String msg) { 106 msg(msg, lhs.equals(rhs) ? LOG : ERR, true, true); 107 } 108 109 private void assertEqual(int lhs, int rhs, String msg) { 110 msg(msg, lhs == rhs ? LOG : ERR, true, true); 111 } 112 113 private void assertTrue(boolean arg, String msg) { 114 msg(msg, arg ? LOG : ERR, true, true); 115 } 116 117 private static String getString(CharacterIterator ci) { 118 StringBuffer buf = new StringBuffer(ci.getEndIndex() - ci.getBeginIndex() + 2); 119 buf.append("'"); 120 for (char c = ci.first(); c != CharacterIterator.DONE; c = ci.next()) { 121 buf.append(c); 122 } 123 buf.append("'"); 124 return buf.toString(); 125 } 126 } 127