Home | History | Annotate | Download | only in rbbi
      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