12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Copyright (C) 2001-2014, International Business Machines Corporation and * 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved. * 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ******************************************************************************* 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 102d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert/** 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Port From: ICU4C v1.8.1 : rbbi : RBBIAPITest 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Source File: $ICU4CRoot/source/test/intltest/rbbiapts.cpp 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.rbbi; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 172d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport java.io.ByteArrayOutputStream; 182d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport java.io.PrintStream; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.CharacterIterator; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.StringCharacterIterator; 21fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport java.util.ArrayList; 22fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport java.util.List; 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Locale; 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 252d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport org.junit.Test; 26fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport org.junit.runner.RunWith; 27fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertimport org.junit.runners.JUnit4; 282d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 292d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.BreakIterator; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.RuleBasedBreakIterator; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.util.ULocale; 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * API Test the RuleBasedBreakIterator class 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 37fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert@RunWith(JUnit4.class) 38fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubertpublic class RBBIAPITest extends TestFmwk { 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 402d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * Tests clone() and equals() methods of RuleBasedBreakIterator 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 422d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestCloneEquals() { 442d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator bi1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 452d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator biequal = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 462d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator bi3 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 472d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator bi2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault()); 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String testString = "Testing word break iterators's clone() and equals()"; 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi1.setText(testString); 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi2.setText(testString); 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert biequal.setText(testString); 532d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi3.setText("hello"); 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing equals()"); 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing == and !="); 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!bi1.equals(biequal) || bi1.equals(bi2) || bi1.equals(bi3)) 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:1 RBBI's == and !- operator failed."); 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bi2.equals(biequal) || bi2.equals(bi1) || biequal.equals(bi3)) 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:2 RBBI's == and != operator failed."); 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing clone()"); 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator bi1clone = (RuleBasedBreakIterator) bi1.clone(); 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator bi2clone = (RuleBasedBreakIterator) bi2.clone(); 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!bi1clone.equals(bi1) 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !bi1clone.equals(biequal) 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi1clone.equals(bi3) 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi1clone.equals(bi2)) 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:1 RBBI's clone() method failed"); 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bi2clone.equals(bi1) 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi2clone.equals(biequal) 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi2clone.equals(bi3) 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !bi2clone.equals(bi2)) 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:2 RBBI's clone() method failed"); 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!bi1.getText().equals(bi1clone.getText()) 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || !bi2clone.getText().equals(bi2.getText()) 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi2clone.equals(bi1clone)) 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: RBBI's clone() method failed"); 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 812d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests toString() method of RuleBasedBreakIterator 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 852d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestToString() { 872d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator bi1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator bi2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault()); 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing toString()"); 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi1.setText("Hello there"); 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator bi3 = (RuleBasedBreakIterator) bi1.clone(); 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp = bi1.toString(); 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp2 = bi2.toString(); 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp3 = bi3.toString(); 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (temp2.equals(temp3) || temp.equals(temp2) || !temp.equals(temp3)) 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: error in toString() method"); 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 982d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests the method hashCode() of RuleBasedBreakIterator 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 1022d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestHashCode() { 1042d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator bi1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 1052d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator bi3 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator bi2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault()); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing hashCode()"); 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi1.setText("Hash code"); 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi2.setText("Hash code"); 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi3.setText("Hash code"); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator bi1clone = (RuleBasedBreakIterator) bi1.clone(); 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator bi2clone = (RuleBasedBreakIterator) bi2.clone(); 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bi1.hashCode() != bi1clone.hashCode() 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi1.hashCode() != bi3.hashCode() 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi1clone.hashCode() != bi3.hashCode() 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi2.hashCode() != bi2clone.hashCode()) 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: identical objects have different hashcodes"); 1182d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bi1.hashCode() == bi2.hashCode() 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi2.hashCode() == bi3.hashCode() 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi1clone.hashCode() == bi2clone.hashCode() 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert || bi1clone.hashCode() == bi2.hashCode()) 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: different objects have same hashcodes"); 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1252d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests the methods getText() and setText() of RuleBasedBreakIterator 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 1292d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestGetSetText() { 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing getText setText "); 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str1 = "first string."; 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String str2 = "Second string."; 1342d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert //RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 1352d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault()); 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert CharacterIterator text1 = new StringCharacterIterator(str1); 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //CharacterIterator text1Clone = (CharacterIterator) text1.clone(); 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //CharacterIterator text2 = new StringCharacterIterator(str2); 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert wordIter1.setText(str1); 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!wordIter1.getText().equals(text1)) 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:1 error in setText or getText "); 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (wordIter1.current() != 0) 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:1 setText did not set the iteration position to the beginning of the text, it is" 1442d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert + wordIter1.current() + "\n"); 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert wordIter1.next(2); 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert wordIter1.setText(str2); 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (wordIter1.current() != 0) 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:2 setText did not reset the iteration position to the beginning of the text, it is" 1492d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert + wordIter1.current() + "\n"); 1502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 151fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert // Test the CharSequence overload of setText() for a simple case. 152fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert BreakIterator lineIter = BreakIterator.getLineInstance(Locale.ENGLISH); 153fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert CharSequence csText = "Hello, World. "; 154fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert // Expected Line Brks ^ ^ ^ 155fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert // 0123456789012345 156fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert List<Integer> expected = new ArrayList<Integer>(); 157fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert expected.add(0); expected.add(7); expected.add(14); 158fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert lineIter.setText(csText); 159fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert for (int pos = lineIter.first(); pos != BreakIterator.DONE; pos = lineIter.next()) { 160fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert assertTrue("", expected.contains(pos)); 161fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert } 162fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert assertEquals("", csText.length(), lineIter.current()); 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1642d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Testing the methods first(), next(), next(int) and following() of RuleBasedBreakIterator 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * TODO: Most of this test should be retired, rule behavior is much better covered by 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * TestExtended, which is also easier to understand and maintain. 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 1702d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestFirstNextFollowing() { 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int p, q; 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String testString = "This is a word break. Isn't it? 2.25"; 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing first() and next(), following() with custom rules"); 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("testing word iterator - string :- \"" + testString + "\"\n"); 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.getDefault()); 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert wordIter1.setText(testString); 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = wordIter1.first(); 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != 0) 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: first() returned" + p + "instead of 0"); 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.next(9); 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 20, "This is a word break"); 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.next(); 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 21, "."); 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.next(3); 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 28, " Isn't "); 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.next(2); 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 31, "it?"); 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.following(2); 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 2, q, 4, "is"); 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.following(22); 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 22, q, 27, "Isn't"); 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert wordIter1.last(); 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = wordIter1.next(); 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.following(wordIter1.last()); 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE || q != BreakIterator.DONE) 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: next()/following() at last position returned #" 2012d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert + p + " and " + q + " instead of" + testString.length() + "\n"); 2022d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.getDefault()); 2032d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert testString = "Write hindi here. "; 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("testing char iter - string:- \"" + testString + "\""); 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert charIter1.setText(testString); 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = charIter1.first(); 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != 0) 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: first() returned" + p + "instead of 0"); 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = charIter1.next(); 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 1, "W"); 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = charIter1.next(4); 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 5, "rite"); 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = charIter1.next(12); 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 17, " hindi here."); 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = charIter1.next(-6); 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 11, " here."); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = charIter1.next(6); 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 17, " here."); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = charIter1.following(charIter1.last()); 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = charIter1.next(charIter1.last()); 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE || q != BreakIterator.DONE) 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: following()/next() at last position returned #" 2272d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert + p + " and " + q + " instead of" + testString.length()); 2282d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert testString = "Hello! how are you? I'am fine. Thankyou. How are you doing? This costs $20,00,000."; 2292d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator sentIter1 = (RuleBasedBreakIterator) BreakIterator.getSentenceInstance(Locale.getDefault()); 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("testing sentence iter - String:- \"" + testString + "\""); 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sentIter1.setText(testString); 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = sentIter1.first(); 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != 0) 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: first() returned" + p + "instead of 0"); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.next(); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 7, "Hello! "); 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.next(2); 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 31, "how are you? I'am fine. "); 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.next(-2); 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 7, "how are you? I'am fine. "); 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.next(4); 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 60, "how are you? I'am fine. Thankyou. How are you doing? "); 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.next(); 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 83, "This costs $20,00,000."); 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.following(1); 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 1, q, 7, "ello! "); 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.following(10); 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 10, q, 20, " are you? "); 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.following(20); 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 20, q, 31, "I'am fine. "); 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = sentIter1.following(sentIter1.last()); 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.next(sentIter1.last()); 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE || q != BreakIterator.DONE) 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: following()/next() at last position returned #" 2592d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert + p + " and " + q + " instead of" + testString.length()); 2602d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert testString = "Hello! how\r\n (are)\r you? I'am fine- Thankyou. foo\u00a0bar How, are, you? This, costs $20,00,000."; 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("(UnicodeString)testing line iter - String:- \"" + testString + "\""); 2622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator lineIter1 = (RuleBasedBreakIterator) BreakIterator.getLineInstance(Locale.getDefault()); 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert lineIter1.setText(testString); 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = lineIter1.first(); 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != 0) 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: first() returned" + p + "instead of 0"); 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.next(); 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 7, "Hello! "); 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.next(4); 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 20, "how\r\n (are)\r "); 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.next(-4); 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 7, "how\r\n (are)\r "); 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.next(6); 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 30, "how\r\n (are)\r you? I'am "); 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.next(); 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 36, "fine- "); 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.next(2); 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 54, "Thankyou. foo\u00a0bar "); 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.following(60); 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 60, q, 64, "re, "); 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.following(1); 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 1, q, 7, "ello! "); 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.following(10); 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 10, q, 12, "\r\n"); 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.following(20); 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 20, q, 25, "you? "); 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = lineIter1.following(lineIter1.last()); 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.next(lineIter1.last()); 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE || q != BreakIterator.DONE) 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: following()/next() at last position returned #" 2972d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert + p + " and " + q + " instead of" + testString.length()); 2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2992d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 301fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert * Testing the methods last(), previous(), and preceding() of RuleBasedBreakIterator 3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 3032d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestLastPreviousPreceding() { 3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int p, q; 3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String testString = "This is a word break. Isn't it? 2.25 dollars"; 3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Testing last(),previous(), preceding() with custom rules"); 3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("testing word iteration for string \"" + testString + "\""); 309fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert RuleBasedBreakIterator wordIter1 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.ENGLISH); 3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert wordIter1.setText(testString); 3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = wordIter1.last(); 3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != testString.length()) { 313fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert errln("ERROR: last() returned" + p + "instead of" + testString.length()); 3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.previous(); 3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 37, "dollars"); 3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.previous(); 3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 36, " "); 3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.preceding(25); 3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 25, q, 22, "Isn"); 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.previous(); 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 21, " "); 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = wordIter1.preceding(20); 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 20, q, 15, "break"); 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = wordIter1.preceding(wordIter1.first()); 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE) 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: preceding() at starting position returned #" + p + " instead of 0"); 3302d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert testString = "Hello! how are you? I'am fine. Thankyou. How are you doing? This costs $20,00,000."; 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("testing sentence iter - String:- \"" + testString + "\""); 3322d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator sentIter1 = (RuleBasedBreakIterator) BreakIterator.getSentenceInstance(Locale.getDefault()); 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sentIter1.setText(testString); 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = sentIter1.last(); 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != testString.length()) 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: last() returned" + p + "instead of " + testString.length()); 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.previous(); 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 60, "This costs $20,00,000."); 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.previous(); 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 41, "How are you doing? "); 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.preceding(40); 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 40, q, 31, "Thankyou."); 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.preceding(25); 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 25, q, 20, "I'am "); 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert sentIter1.first(); 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = sentIter1.previous(); 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = sentIter1.preceding(sentIter1.first()); 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE || q != BreakIterator.DONE) 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: previous()/preceding() at starting position returned #" 3512d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert + p + " and " + q + " instead of 0\n"); 3522d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert testString = "Hello! how are you? I'am fine. Thankyou. How are you doing? This\n costs $20,00,000."; 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("testing line iter - String:- \"" + testString + "\""); 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert RuleBasedBreakIterator lineIter1 = (RuleBasedBreakIterator) BreakIterator.getLineInstance(Locale.getDefault()); 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert lineIter1.setText(testString); 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = lineIter1.last(); 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != testString.length()) 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: last() returned" + p + "instead of " + testString.length()); 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.previous(); 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 72, "$20,00,000."); 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = q; 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.previous(); 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, p, q, 66, "costs "); 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.preceding(40); 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 40, q, 31, "Thankyou."); 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.preceding(25); 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doTest(testString, 25, q, 20, "I'am "); 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert lineIter1.first(); 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p = lineIter1.previous(); 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert q = lineIter1.preceding(sentIter1.first()); 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (p != BreakIterator.DONE || q != BreakIterator.DONE) 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR: previous()/preceding() at starting position returned #" 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + p + " and " + q + " instead of 0\n"); 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3752d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests the method IsBoundary() of RuleBasedBreakIterator 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert **/ 3792d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestIsBoundary() { 3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String testString1 = "Write here. \u092d\u0301\u0930\u0924 \u0938\u0941\u0902\u0926\u0930 a\u0301u"; 382fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert RuleBasedBreakIterator charIter1 = (RuleBasedBreakIterator) BreakIterator.getCharacterInstance(Locale.ENGLISH); 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert charIter1.setText(testString1); 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 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}; 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doBoundaryTest(charIter1, testString1, bounds1); 386fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert RuleBasedBreakIterator wordIter2 = (RuleBasedBreakIterator) BreakIterator.getWordInstance(Locale.ENGLISH); 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert wordIter2.setText(testString1); 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int bounds2[] = {0, 5, 6, 10, 11, 12, 16, 17, 22, 23, 26}; 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert doBoundaryTest(wordIter2, testString1, bounds2); 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 3912d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /** 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Tests the rule status return value constants 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 3952d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestRuleStatus() { 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert BreakIterator bi = BreakIterator.getWordInstance(ULocale.ENGLISH); 3982d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi.setText("# "); 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, bi.next(), 1); 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_NONE); 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_NONE_LIMIT); 4032d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi.setText("3 "); 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, bi.next(), 1); 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_NUMBER); 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_NUMBER_LIMIT); 4082d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi.setText("a "); 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, bi.next(), 1); 4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_LETTER ); 4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_LETTER_LIMIT); 4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4142d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi.setText("イ "); 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, bi.next(), 1); 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_KANA ); 4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // TODO: ticket #10261, Kana is not returning the correct status. 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_KANA_LIMIT); 4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // System.out.println("\n" + bi.getRuleStatus()); 4212d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bi.setText("退 "); 4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals(null, bi.next(), 1); 4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() >= RuleBasedBreakIterator.WORD_IDEO ); 4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertTrue(null, bi.getRuleStatus() < RuleBasedBreakIterator.WORD_IDEO_LIMIT); 4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4272d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4282d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert /** 4292d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert * Tests the rule dump debug function. 4302d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert */ 4312d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 4322d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void TestRuledump() { 4332d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert RuleBasedBreakIterator bi = (RuleBasedBreakIterator)BreakIterator.getCharacterInstance(); 4342d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ByteArrayOutputStream bos = new ByteArrayOutputStream(); 4352d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert PrintStream out = new PrintStream(bos); 4362d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert bi.dump(out); 4372d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertTrue(null, bos.size() > 100); 4382d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 4392d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //--------------------------------------------- 4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //Internal subroutines 4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert //--------------------------------------------- 4432d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4442d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert /* Internal subroutine used by TestIsBoundary() */ 4452d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert private void doBoundaryTest(BreakIterator bi, String text, int[] boundaries) { 4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("testIsBoundary():"); 4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int p = 0; 4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert boolean isB; 4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < text.length(); i++) { 4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert isB = bi.isBoundary(i); 4517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("bi.isBoundary(" + i + ") -> " + isB); 4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (i == boundaries[p]) { 4537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!isB) 4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Wrong result from isBoundary() for " + i + ": expected true, got false"); 4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert p++; 4567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 4577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (isB) 4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Wrong result from isBoundary() for " + i + ": expected false, got true"); 4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 463fe77e7203e518f62b5bd8e8c603bca361e9cf47bFredrik Roubert /*Internal subroutine used for comparison of expected and acquired results */ 4642d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert private void doTest(String testString, int start, int gotoffset, int expectedOffset, String expectedString) { 4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String selected; 4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String expected = expectedString; 4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (gotoffset != expectedOffset) 4687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:****returned #" + gotoffset + " instead of #" + expectedOffset); 4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (start <= gotoffset) { 4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert selected = testString.substring(start, gotoffset); 4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert selected = testString.substring(gotoffset, start); 4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!selected.equals(expected)) 4757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ERROR:****selected \"" + selected + "\" instead of \"" + expected + "\""); 4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert else 4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("****selected \"" + selected + "\""); 4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4792d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 4802d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 4812d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void testGetTitleInstance() { 4822d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert BreakIterator bi = BreakIterator.getTitleInstance(new Locale("en", "CA")); 4832d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestFmwk.assertNotEquals("Title instance break iterator not correctly instantiated", bi.first(), null); 4842d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert bi.setText("Here is some Text"); 4852d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestFmwk.assertEquals("Title instance break iterator not correctly instantiated", bi.first(), 0); 4862d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 4877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 488