public void TestFirstNextFollowing() {
int p, q;
String testString = "This is a word break. Isn't it? 2.25";
logln("Testing first() and next(), following() with custom rules");
logln("testing word iterator - string :- \"" + testString + "\"\n");
RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault());
wordIter1.setText(testString);
p = wordIter1.first();
if (p != 0)
errln("ERROR: first() returned" + p + "instead of 0");
q = wordIter1.next(9);
doTest(testString, p, q, 20, "This is a word break");
p = q;
q = wordIter1.next();
doTest(testString, p, q, 21, ".");
p = q;
q = wordIter1.next(3);
doTest(testString, p, q, 28, " Isn't ");
p = q;
q = wordIter1.next(2);
doTest(testString, p, q, 31, "it?");
q = wordIter1.following(2);
doTest(testString, 2, q, 4, "is");
q = wordIter1.following(22);
doTest(testString, 22, q, 27, "Isn't");
wordIter1.last();
p = wordIter1.next();
q = wordIter1.following(wordIter1.last());
if (p != BreakIterator.DONE || q != BreakIterator.DONE)
errln("ERROR: next()/following() at last position returned #"
+ p + " and " + q + " instead of" + testString.length() + "\n");
RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault());
testString = "Write hindi here. ";
logln("testing char iter - string:- \"" + testString + "\"");
charIter1.setText(testString);
p = charIter1.first();
if (p != 0)
errln("ERROR: first() returned" + p + "instead of 0");
q = charIter1.next();
doTest(testString, p, q, 1, "W");
p = q;
q = charIter1.next(4);
doTest(testString, p, q, 5, "rite");
p = q;
q = charIter1.next(12);
doTest(testString, p, q, 17, " hindi here.");
p = q;
q = charIter1.next(-6);
doTest(testString, p, q, 11, " here.");
p = q;
q = charIter1.next(6);
doTest(testString, p, q, 17, " here.");
p = charIter1.following(charIter1.last());
q = charIter1.next(charIter1.last());
if (p != BreakIterator.DONE || q != BreakIterator.DONE)
errln("ERROR: following()/next() at last position returned #"
+ p + " and " + q + " instead of" + testString.length());
testString = "Hello! how are you? I'am fine. Thankyou. How are you doing? This costs $20,00,000.";
RuleBasedBreakIterator sentIter1 = (RuleBasedBreakIterator) BreakIterator.getSentenceInstance(Locale.getDefault());
logln("testing sentence iter - String:- \"" + testString + "\"");
sentIter1.setText(testString);
p = sentIter1.first();
if (p != 0)
errln("ERROR: first() returned" + p + "instead of 0");
q = sentIter1.next();
doTest(testString, p, q, 7, "Hello! ");
p = q;
q = sentIter1.next(2);
doTest(testString, p, q, 31, "how are you? I'am fine. ");
p = q;
q = sentIter1.next(-2);
doTest(testString, p, q, 7, "how are you? I'am fine. ");
p = q;
q = sentIter1.next(4);
doTest(testString, p, q, 60, "how are you? I'am fine. Thankyou. How are you doing? ");
p = q;
q = sentIter1.next();
doTest(testString, p, q, 83, "This costs $20,00,000.");
q = sentIter1.following(1);
doTest(testString, 1, q, 7, "ello! ");
q = sentIter1.following(10);
doTest(testString, 10, q, 20, " are you? ");
q = sentIter1.following(20);
doTest(testString, 20, q, 31, "I'am fine. ");
p = sentIter1.following(sentIter1.last());
q = sentIter1.next(sentIter1.last());
if (p != BreakIterator.DONE || q != BreakIterator.DONE)
errln("ERROR: following()/next() at last position returned #"
+ p + " and " + q + " instead of" + testString.length());
testString = "Hello! how\r\n (are)\r you? I'am fine- Thankyou. foo\u00a0bar How, are, you? This, costs $20,00,000.";
logln("(UnicodeString)testing line iter - String:- \"" + testString + "\"");
RuleBasedBreakIterator lineIter1 = (RuleBasedBreakIterator) BreakIterator.getLineInstance(Locale.getDefault());
lineIter1.setText(testString);
p = lineIter1.first();
if (p != 0)
errln("ERROR: first() returned" + p + "instead of 0");
q = lineIter1.next();
doTest(testString, p, q, 7, "Hello! ");
p = q;
p = q;
q = lineIter1.next(4);
doTest(testString, p, q, 20, "how\r\n (are)\r ");
p = q;
q = lineIter1.next(-4);
doTest(testString, p, q, 7, "how\r\n (are)\r ");
p = q;
q = lineIter1.next(6);
doTest(testString, p, q, 30, "how\r\n (are)\r you? I'am ");
p = q;
q = lineIter1.next();
doTest(testString, p, q, 36, "fine- ");
p = q;
q = lineIter1.next(2);
doTest(testString, p, q, 54, "Thankyou. foo\u00a0bar ");
q = lineIter1.following(60);
doTest(testString, 60, q, 64, "re, ");
q = lineIter1.following(1);
doTest(testString, 1, q, 7, "ello! ");
q = lineIter1.following(10);
doTest(testString, 10, q, 12, "\r\n");
q = lineIter1.following(20);
doTest(testString, 20, q, 25, "you? ");
p = lineIter1.following(lineIter1.last());
q = lineIter1.next(lineIter1.last());
if (p != BreakIterator.DONE || q != BreakIterator.DONE)
errln("ERROR: following()/next() at last position returned #"
+ p + " and " + q + " instead of" + testString.length());
}