1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/*
5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Copyright (C) 2001-2014, International Business Machines Corporation and    *
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * others. All Rights Reserved.                                                *
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
11f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert/**
12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Port From:   ICU4C v1.8.1 : rbbi : RBBIAPITest
13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Source File: $ICU4CRoot/source/test/intltest/rbbiapts.cpp
14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin **/
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.rbbi;
17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
18f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport java.io.ByteArrayOutputStream;
19f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport java.io.PrintStream;
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.text.CharacterIterator;
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.text.StringCharacterIterator;
2205fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport java.util.ArrayList;
2305fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport java.util.List;
24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport java.util.Locale;
25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
26f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
2705fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runner.RunWith;
2805fa7802d0874812c234a29745586677ee5837eaFredrik Roubertimport org.junit.runners.JUnit4;
29f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
30f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport android.icu.dev.test.TestFmwk;
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.BreakIterator;
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.RuleBasedBreakIterator;
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.util.ULocale;
342e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillinimport android.icu.testsharding.MainTestShard;
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * API Test the RuleBasedBreakIterator class
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
392e13a2bdade5cd0a635f0bd89805931a6fd710daPete Gillin@MainTestShard
4005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert@RunWith(JUnit4.class)
4105fa7802d0874812c234a29745586677ee5837eaFredrik Roubertpublic class RBBIAPITest extends TestFmwk {
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
43f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert     * Tests clone() and equals() methods of RuleBasedBreakIterator
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     **/
45f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestCloneEquals() {
47f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator bi1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
48f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator biequal = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
49f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator bi3 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
50f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator bi2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault());
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String testString = "Testing word break iterators's clone() and equals()";
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi1.setText(testString);
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi2.setText(testString);
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        biequal.setText(testString);
56f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi3.setText("hello");
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing equals()");
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing == and !=");
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!bi1.equals(biequal) || bi1.equals(bi2) || bi1.equals(bi3))
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:1 RBBI's == and !- operator failed.");
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (bi2.equals(biequal) || bi2.equals(bi1) || biequal.equals(bi3))
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:2 RBBI's == and != operator  failed.");
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing clone()");
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator bi1clone = (RuleBasedBreakIterator) bi1.clone();
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator bi2clone = (RuleBasedBreakIterator) bi2.clone();
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!bi1clone.equals(bi1)
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || !bi1clone.equals(biequal)
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi1clone.equals(bi3)
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi1clone.equals(bi2))
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:1 RBBI's clone() method failed");
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (bi2clone.equals(bi1)
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi2clone.equals(biequal)
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi2clone.equals(bi3)
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || !bi2clone.equals(bi2))
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:2 RBBI's clone() method failed");
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!bi1.getText().equals(bi1clone.getText())
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || !bi2clone.getText().equals(bi2.getText())
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi2clone.equals(bi1clone))
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: RBBI's clone() method failed");
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
84f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * Tests toString() method of RuleBasedBreakIterator
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     **/
88f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestToString() {
90f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator bi1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator bi2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault());
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing toString()");
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi1.setText("Hello there");
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator bi3 = (RuleBasedBreakIterator) bi1.clone();
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String temp = bi1.toString();
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String temp2 = bi2.toString();
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String temp3 = bi3.toString();
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (temp2.equals(temp3) || temp.equals(temp2) || !temp.equals(temp3))
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: error in toString() method");
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
101f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * Tests the method hashCode() of RuleBasedBreakIterator
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     **/
105f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestHashCode() {
107f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator bi1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
108f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator bi3 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator bi2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault());
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing hashCode()");
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi1.setText("Hash code");
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi2.setText("Hash code");
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi3.setText("Hash code");
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator bi1clone = (RuleBasedBreakIterator) bi1.clone();
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator bi2clone = (RuleBasedBreakIterator) bi2.clone();
116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (bi1.hashCode() != bi1clone.hashCode()
117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi1.hashCode() != bi3.hashCode()
118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi1clone.hashCode() != bi3.hashCode()
119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi2.hashCode() != bi2clone.hashCode())
120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: identical objects have different hashcodes");
121f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (bi1.hashCode() == bi2.hashCode()
123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi2.hashCode() == bi3.hashCode()
124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi1clone.hashCode() == bi2clone.hashCode()
125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            || bi1clone.hashCode() == bi2.hashCode())
126aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: different objects have same hashcodes");
127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
128f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
129aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin      * Tests the methods getText() and setText() of RuleBasedBreakIterator
131aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin      **/
132f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestGetSetText() {
134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing getText setText ");
135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String str1 = "first string.";
136aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String str2 = "Second string.";
137f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        //RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
138f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault());
139aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        CharacterIterator text1 = new StringCharacterIterator(str1);
140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //CharacterIterator text1Clone = (CharacterIterator) text1.clone();
141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //CharacterIterator text2 = new StringCharacterIterator(str2);
142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        wordIter1.setText(str1);
143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!wordIter1.getText().equals(text1))
144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:1 error in setText or getText ");
145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (wordIter1.current() != 0)
146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:1 setText did not set the iteration position to the beginning of the text, it is"
147f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                   + wordIter1.current() + "\n");
148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        wordIter1.next(2);
149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        wordIter1.setText(str2);
150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (wordIter1.current() != 0)
151aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:2 setText did not reset the iteration position to the beginning of the text, it is"
152f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + wordIter1.current() + "\n");
153f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
15405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        // Test the CharSequence overload of setText() for a simple case.
15505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        BreakIterator lineIter = BreakIterator.getLineInstance(Locale.ENGLISH);
15605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        CharSequence csText = "Hello, World. ";
15705fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        // Expected Line Brks  ^      ^      ^
15805fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        //                     0123456789012345
15905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        List<Integer> expected = new ArrayList<Integer>();
16005fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        expected.add(0); expected.add(7); expected.add(14);
16105fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        lineIter.setText(csText);
16205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        for (int pos = lineIter.first(); pos != BreakIterator.DONE; pos = lineIter.next()) {
16305fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            assertTrue("", expected.contains(pos));
16405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        }
16505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        assertEquals("", csText.length(), lineIter.current());
166aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
167f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
168aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
169aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin      * Testing the methods first(), next(), next(int) and following() of RuleBasedBreakIterator
170aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin      *   TODO:  Most of this test should be retired, rule behavior is much better covered by
171aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin      *          TestExtended, which is also easier to understand and maintain.
172aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin      **/
173f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
174aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestFirstNextFollowing() {
175aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int p, q;
176aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String testString = "This is a word break. Isn't it? 2.25";
177aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing first() and next(), following() with custom rules");
178aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("testing word iterator - string :- \"" + testString + "\"\n");
179aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault());
180aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        wordIter1.setText(testString);
181aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = wordIter1.first();
182aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != 0)
183aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: first() returned" + p + "instead of 0");
184aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.next(9);
185aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 20, "This is a word break");
186aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
187aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.next();
188aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 21, ".");
189aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
190aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.next(3);
191aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 28, " Isn't ");
192aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
193aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.next(2);
194aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 31, "it?");
195aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.following(2);
196aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 2, q, 4, "is");
197aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.following(22);
198aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 22, q, 27, "Isn't");
199aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        wordIter1.last();
200aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = wordIter1.next();
201aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.following(wordIter1.last());
202aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != BreakIterator.DONE || q != BreakIterator.DONE)
203aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: next()/following() at last position returned #"
204f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + p + " and " + q + " instead of" + testString.length() + "\n");
205f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
206f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        testString = "Write hindi here. ";
207aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("testing char iter - string:- \"" + testString + "\"");
208aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        charIter1.setText(testString);
209aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = charIter1.first();
210aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != 0)
211aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: first() returned" + p + "instead of 0");
212aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = charIter1.next();
213aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 1, "W");
214aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
215aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = charIter1.next(4);
216aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 5, "rite");
217aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
218aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = charIter1.next(12);
219aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 17, " hindi here.");
220aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
221aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = charIter1.next(-6);
222aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 11, " here.");
223aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
224aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = charIter1.next(6);
225aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 17, " here.");
226aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = charIter1.following(charIter1.last());
227aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = charIter1.next(charIter1.last());
228aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != BreakIterator.DONE || q != BreakIterator.DONE)
229aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: following()/next() at last position returned #"
230f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + p + " and " + q + " instead of" + testString.length());
231f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        testString = "Hello! how are you? I'am fine. Thankyou. How are you doing? This  costs $20,00,000.";
232f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator sentIter1 = (RuleBasedBreakIterator) BreakIterator.getSentenceInstance(Locale.getDefault());
233aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("testing sentence iter - String:- \"" + testString + "\"");
234aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        sentIter1.setText(testString);
235aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = sentIter1.first();
236aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != 0)
237aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: first() returned" + p + "instead of 0");
238aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.next();
239aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 7, "Hello! ");
240aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
241aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.next(2);
242aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 31, "how are you? I'am fine. ");
243aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
244aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.next(-2);
245aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 7, "how are you? I'am fine. ");
246aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
247aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.next(4);
248aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 60, "how are you? I'am fine. Thankyou. How are you doing? ");
249aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
250aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.next();
251aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 83, "This  costs $20,00,000.");
252aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.following(1);
253aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 1, q, 7, "ello! ");
254aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.following(10);
255aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 10, q, 20, " are you? ");
256aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.following(20);
257aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 20, q, 31, "I'am fine. ");
258aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = sentIter1.following(sentIter1.last());
259aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.next(sentIter1.last());
260aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != BreakIterator.DONE || q != BreakIterator.DONE)
261aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: following()/next() at last position returned #"
262f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + p + " and " + q + " instead of" + testString.length());
263f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        testString = "Hello! how\r\n (are)\r you? I'am fine- Thankyou. foo\u00a0bar How, are, you? This, costs $20,00,000.";
264aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("(UnicodeString)testing line iter - String:- \"" + testString + "\"");
265f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator lineIter1 = (RuleBasedBreakIterator) BreakIterator.getLineInstance(Locale.getDefault());
266aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        lineIter1.setText(testString);
267aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = lineIter1.first();
268aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != 0)
269aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: first() returned" + p + "instead of 0");
270aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.next();
271aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 7, "Hello! ");
272aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
273aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
274aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.next(4);
275aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 20, "how\r\n (are)\r ");
276aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
277aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.next(-4);
278aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 7, "how\r\n (are)\r ");
279aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
280aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.next(6);
281aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 30, "how\r\n (are)\r you? I'am ");
282aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
283aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.next();
284aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 36, "fine- ");
285aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
286aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.next(2);
287aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 54, "Thankyou. foo\u00a0bar ");
288aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.following(60);
289aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 60, q, 64, "re, ");
290aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.following(1);
291aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 1, q, 7, "ello! ");
292aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.following(10);
293aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 10, q, 12, "\r\n");
294aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.following(20);
295aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 20, q, 25, "you? ");
296aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = lineIter1.following(lineIter1.last());
297aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.next(lineIter1.last());
298aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != BreakIterator.DONE || q != BreakIterator.DONE)
299aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: following()/next() at last position returned #"
300f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + p + " and " + q + " instead of" + testString.length());
301aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
302f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
303aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
30405fa7802d0874812c234a29745586677ee5837eaFredrik Roubert     * Testing the methods last(), previous(), and preceding() of RuleBasedBreakIterator
305aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     **/
306f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
307aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestLastPreviousPreceding() {
308aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int p, q;
309aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String testString = "This is a word break. Isn't it? 2.25 dollars";
310aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("Testing last(),previous(), preceding() with custom rules");
311aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("testing word iteration for string \"" + testString + "\"");
31205fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.ENGLISH);
313aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        wordIter1.setText(testString);
314aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = wordIter1.last();
315aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != testString.length()) {
31605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert            errln("ERROR: last() returned" + p + "instead of" + testString.length());
317aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
318aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.previous();
319aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 37, "dollars");
320aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
321aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.previous();
322aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 36, " ");
323aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.preceding(25);
324aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 25, q, 22, "Isn");
325aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
326aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.previous();
327aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 21, " ");
328aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = wordIter1.preceding(20);
329aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 20, q, 15, "break");
330aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = wordIter1.preceding(wordIter1.first());
331aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != BreakIterator.DONE)
332aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: preceding()  at starting position returned #" + p + " instead of 0");
333f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        testString = "Hello! how are you? I'am fine. Thankyou. How are you doing? This  costs $20,00,000.";
334aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("testing sentence iter - String:- \"" + testString + "\"");
335f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator sentIter1 = (RuleBasedBreakIterator) BreakIterator.getSentenceInstance(Locale.getDefault());
336aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        sentIter1.setText(testString);
337aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = sentIter1.last();
338aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != testString.length())
339aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: last() returned" + p + "instead of " + testString.length());
340aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.previous();
341aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 60, "This  costs $20,00,000.");
342aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
343aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.previous();
344aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 41, "How are you doing? ");
345aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.preceding(40);
346aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 40, q, 31, "Thankyou.");
347aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.preceding(25);
348aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 25, q, 20, "I'am ");
349aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        sentIter1.first();
350aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = sentIter1.previous();
351aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = sentIter1.preceding(sentIter1.first());
352aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != BreakIterator.DONE || q != BreakIterator.DONE)
353aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: previous()/preceding() at starting position returned #"
354f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert                    + p + " and " + q + " instead of 0\n");
355f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        testString = "Hello! how are you? I'am fine. Thankyou. How are you doing? This\n costs $20,00,000.";
356aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("testing line iter - String:- \"" + testString + "\"");
357aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        RuleBasedBreakIterator lineIter1 = (RuleBasedBreakIterator) BreakIterator.getLineInstance(Locale.getDefault());
358aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        lineIter1.setText(testString);
359aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = lineIter1.last();
360aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != testString.length())
361aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: last() returned" + p + "instead of " + testString.length());
362aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.previous();
363aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 72, "$20,00,000.");
364aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = q;
365aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.previous();
366aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, p, q, 66, "costs ");
367aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.preceding(40);
368aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 40, q, 31, "Thankyou.");
369aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.preceding(25);
370aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doTest(testString, 25, q, 20, "I'am ");
371aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        lineIter1.first();
372aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        p = lineIter1.previous();
373aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        q = lineIter1.preceding(sentIter1.first());
374aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (p != BreakIterator.DONE || q != BreakIterator.DONE)
375aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR: previous()/preceding() at starting position returned #"
376aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    + p + " and " + q + " instead of 0\n");
377aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
378f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
379aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
380aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     * Tests the method IsBoundary() of RuleBasedBreakIterator
381aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     **/
382f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
383aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestIsBoundary() {
384aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String testString1 = "Write here. \u092d\u0301\u0930\u0924 \u0938\u0941\u0902\u0926\u0930 a\u0301u";
38505fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.ENGLISH);
386aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        charIter1.setText(testString1);
387aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int bounds1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 20, 21, 22, 23, 25, 26};
388aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doBoundaryTest(charIter1, testString1, bounds1);
38905fa7802d0874812c234a29745586677ee5837eaFredrik Roubert        RuleBasedBreakIterator wordIter2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.ENGLISH);
390aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        wordIter2.setText(testString1);
391aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int bounds2[] = {0, 5, 6, 10, 11, 12, 16, 17, 22, 23, 26};
392aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        doBoundaryTest(wordIter2, testString1, bounds2);
393aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
394f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
395aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    /**
396aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     *  Tests the rule status return value constants
397aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin     */
398f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
399aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestRuleStatus() {
400aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        BreakIterator bi = BreakIterator.getWordInstance(ULocale.ENGLISH);
401f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
402aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi.setText("# ");
403aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals(null, bi.next(), 1);
404aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_NONE);
405aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_NONE_LIMIT);
406f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
407aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi.setText("3 ");
408aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals(null, bi.next(), 1);
409aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_NUMBER);
410aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_NUMBER_LIMIT);
411f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
412aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi.setText("a ");
413aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals(null, bi.next(), 1);
414aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_LETTER );
415aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_LETTER_LIMIT);
416aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
417f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
418aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi.setText("イ  ");
419aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals(null, bi.next(), 1);
420aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_KANA );
421aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // TODO: ticket #10261, Kana is not returning the correct status.
422aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_KANA_LIMIT);
423aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // System.out.println("\n" + bi.getRuleStatus());
424f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
425aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bi.setText("退 ");
426aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertEquals(null, bi.next(), 1);
427aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_IDEO );
428aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_IDEO_LIMIT);
429aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
430f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
431f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    /**
432f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert     *  Tests the rule dump debug function.
433f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert     */
434f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
435f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public void TestRuledump() {
436f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        RuleBasedBreakIterator bi = (RuleBasedBreakIterator)BreakIterator.getCharacterInstance();
437f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        ByteArrayOutputStream bos = new ByteArrayOutputStream();
438f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        PrintStream out = new PrintStream(bos);
439f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        bi.dump(out);
440f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        assertTrue(null, bos.size() > 100);
441f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    }
442f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
443aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    //---------------------------------------------
444aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    //Internal subroutines
445aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    //---------------------------------------------
446f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
447f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    /* Internal subroutine used by TestIsBoundary() */
448f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    private void doBoundaryTest(BreakIterator bi, String text, int[] boundaries) {
449aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("testIsBoundary():");
450aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int p = 0;
451aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        boolean isB;
452aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        for (int i = 0; i < text.length(); i++) {
453aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            isB = bi.isBoundary(i);
454aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("bi.isBoundary(" + i + ") -> " + isB);
455aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (i == boundaries[p]) {
456aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (!isB)
457aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("Wrong result from isBoundary() for " + i + ": expected true, got false");
458aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                p++;
459aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            } else {
460aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                if (isB)
461aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("Wrong result from isBoundary() for " + i + ": expected false, got true");
462aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
463aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
464aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
465f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
46605fa7802d0874812c234a29745586677ee5837eaFredrik Roubert    /*Internal subroutine used for comparison of expected and acquired results */
467f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    private void doTest(String testString, int start, int gotoffset, int expectedOffset, String expectedString) {
468aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String selected;
469aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String expected = expectedString;
470aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (gotoffset != expectedOffset)
471aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:****returned #" + gotoffset + " instead of #" + expectedOffset);
472aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (start <= gotoffset) {
473aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            selected = testString.substring(start, gotoffset);
474aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else {
475aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            selected = testString.substring(gotoffset, start);
476aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
477aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!selected.equals(expected))
478aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("ERROR:****selected \"" + selected + "\" instead of \"" + expected + "\"");
479aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        else
480aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("****selected \"" + selected + "\"");
481aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
482f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
483f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
484f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    public void testGetTitleInstance() {
485f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        BreakIterator bi = BreakIterator.getTitleInstance(new Locale("en", "CA"));
486f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        TestFmwk.assertNotEquals("Title instance break iterator not correctly instantiated", bi.first(), null);
487f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        bi.setText("Here is some Text");
488f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert        TestFmwk.assertEquals("Title instance break iterator not correctly instantiated", bi.first(), 0);
489f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    }
490aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
491