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