14968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi/* 24968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * Copyright (C) 2015 The Android Open Source Project 34968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * 44968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * Licensed under the Apache License, Version 2.0 (the "License"); 54968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * you may not use this file except in compliance with the License. 64968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * You may obtain a copy of the License at 74968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * 84968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * http://www.apache.org/licenses/LICENSE-2.0 94968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * 104968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * Unless required by applicable law or agreed to in writing, software 114968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * distributed under the License is distributed on an "AS IS" BASIS, 124968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * See the License for the specific language governing permissions and 144968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi * limitations under the License. 154968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi */ 164968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 174968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagipackage android.text.method; 184968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 19bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanuimport static org.junit.Assert.assertEquals; 20bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanuimport static org.junit.Assert.assertFalse; 21bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanuimport static org.junit.Assert.assertTrue; 22bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanuimport static org.junit.Assert.fail; 23bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu 24bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanuimport android.support.test.filters.SmallTest; 2502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournaderimport android.support.test.runner.AndroidJUnit4; 264968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 27bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanuimport org.junit.Test; 28bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanuimport org.junit.runner.RunWith; 294968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournaderimport java.text.BreakIterator; 3102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournaderimport java.util.Locale; 3202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 334968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi// TODO(Bug: 24062099): Add more tests for non-ascii text. 34bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu@SmallTest 35bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu@RunWith(AndroidJUnit4.class) 36bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanupublic class WordIteratorTest { 374968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader private WordIterator mWordIterator = new WordIterator(); 3902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 4002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader private void verifyIsWordWithSurrogate(int beginning, int end, int surrogateIndex) { 4102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader for (int i = beginning; i <= end; i++) { 4202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader if (i == surrogateIndex) continue; 4302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(beginning, mWordIterator.getBeginning(i)); 4402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(end, mWordIterator.getEnd(i)); 4502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 4602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 4702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 4802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader private void setCharSequence(String string) { 4902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader mWordIterator.setCharSequence(string, 0, string.length()); 5002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 5102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 5202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader private void verifyIsWord(int beginning, int end) { 5302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWordWithSurrogate(beginning, end, -1); 5402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 5502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 5602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader private void verifyIsNotWord(int beginning, int end) { 5702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader for (int i = beginning; i <= end; i++) { 5802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(BreakIterator.DONE, mWordIterator.getBeginning(i)); 5902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(BreakIterator.DONE, mWordIterator.getEnd(i)); 6002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 6102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 6202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 6302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader @Test 6402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader public void testEmptyString() { 6502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence(""); 6602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(BreakIterator.DONE, mWordIterator.following(0)); 6702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(BreakIterator.DONE, mWordIterator.preceding(0)); 6802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 6902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(BreakIterator.DONE, mWordIterator.getBeginning(0)); 7002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader assertEquals(BreakIterator.DONE, mWordIterator.getEnd(0)); 7102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 7202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 7302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader @Test 7402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader public void testOneWord() { 7502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("I"); 7602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 1); 7702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 7802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("am"); 7902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 2); 8002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 8102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("zen"); 8202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 3); 8302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 8402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 8502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader @Test 8602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader public void testSpacesOnly() { 8702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence(" "); 8802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsNotWord(0, 1); 8902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 9002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence(", "); 9102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsNotWord(0, 2); 9202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 9302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence(":-)"); 9402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsNotWord(0, 3); 9502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 9602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 9702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader @Test 9802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader public void testBeginningEnd() { 9902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("Well hello, there! "); 10002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader // 0123456789012345678901 10102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 4); 10202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(5, 10); 10302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsNotWord(11, 13); 10402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(14, 19); 10502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsNotWord(20, 21); 10602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 10702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence(" Another - sentence"); 10802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader // 012345678901234567890 10902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsNotWord(0, 1); 11002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(2, 9); 11102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsNotWord(10, 11); 11202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(12, 20); 11302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 11402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("This is \u0644\u0627 tested"); // Lama-aleph 11502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader // 012345678 9 01234567 11602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 4); 11702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(5, 7); 11802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(8, 10); 11902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(11, 17); 12002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 12102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 12202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader @Test 12302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader public void testSurrogate() { 12402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader final String gothicBairkan = "\uD800\uDF31"; 12502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 12602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("one we" + gothicBairkan + "ird word"); 12702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader // 012345 67 890123456 12802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 12902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 3); 13002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader // Skip index 7 (there is no point in starting between the two surrogate characters) 13102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWordWithSurrogate(4, 11, 7); 13202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(12, 16); 13302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 13402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("one " + gothicBairkan + "xxx word"); 13502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader // 0123 45 678901234 13602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 13702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 3); 13802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWordWithSurrogate(4, 9, 5); 13902f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(10, 14); 14002f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 14102f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader setCharSequence("one xxx" + gothicBairkan + " word"); 14202f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader // 0123456 78 901234 14302f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 14402f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(0, 3); 14502f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWordWithSurrogate(4, 9, 8); 14602f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader verifyIsWord(10, 14); 14702f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader } 14802f167c35ad81fce82c0ebc14a15892fb6981866Roozbeh Pournader 149bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 1504968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testSetCharSequence() { 1514968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "text"; 1524968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 1534968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 1544968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 1554968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 100, 100); 1564968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("setCharSequence with invalid start and end values should throw " 1574968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IndexOutOfBoundsException."); 1584968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IndexOutOfBoundsException e) { 1594968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 1604968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 1614968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, -100, -100); 1624968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("setCharSequence with invalid start and end values should throw " 1634968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IndexOutOfBoundsException."); 1644968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IndexOutOfBoundsException e) { 1654968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 1664968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 1674968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 1684968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, 0); 1694968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, text.length(), text.length()); 1704968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 1714968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 172bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 173b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader public void testWindowWidth() { 174b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader final String text = "aaaa bbbb cccc dddd eeee ffff gggg hhhh iiii jjjj kkkk llll mmmm nnnn"; 175b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 176b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader 177b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader // The first 'n' is more than 50 characters into the string. 178b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader wordIterator.setCharSequence(text, text.indexOf('n'), text.length()); 179b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader final int expectedWindowStart = text.indexOf('n') - 50; 180b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(expectedWindowStart, wordIterator.preceding(expectedWindowStart + 1)); 181b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(BreakIterator.DONE, wordIterator.preceding(expectedWindowStart)); 182b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader 183b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader wordIterator.setCharSequence(text, 0, 1); 184b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader final int expectedWindowEnd = 1 + 50; 185b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(expectedWindowEnd, wordIterator.following(expectedWindowEnd - 1)); 186b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(BreakIterator.DONE, wordIterator.following(expectedWindowEnd)); 187b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader } 188b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader 189bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 1904968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testPreceding() { 1914968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 1924968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 1934968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 1944968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 1954968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 1964968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.preceding(-1); 1974968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("preceding with invalid offset should throw IllegalArgumentException."); 1984968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 1994968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2004968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 2014968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.preceding(text.length() + 1); 2024968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("preceding with invalid offset should throw IllegalArgumentException."); 2034968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 2044968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2054968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 2064968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.preceding(text.indexOf('a'))); 2074968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('a'), wordIterator.preceding(text.indexOf('c'))); 2084968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('a'), wordIterator.preceding(text.indexOf('d'))); 2094968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('d'), wordIterator.preceding(text.indexOf('e'))); 2104968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('d'), wordIterator.preceding(text.indexOf('g'))); 2114968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('g'), wordIterator.preceding(text.indexOf('h'))); 2124968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('g'), wordIterator.preceding(text.indexOf('j'))); 2134968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('j'), wordIterator.preceding(text.indexOf('l'))); 214b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader 215b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader // The results should be the same even if we set an smaller window, since WordIterator 216b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader // enlargens the window by 50 code units on each side anyway. 217b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader wordIterator.setCharSequence(text, text.indexOf('d'), text.indexOf('e')); 218b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader 219b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(BreakIterator.DONE, wordIterator.preceding(text.indexOf('a'))); 220b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('a'), wordIterator.preceding(text.indexOf('c'))); 221b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('a'), wordIterator.preceding(text.indexOf('d'))); 222b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('d'), wordIterator.preceding(text.indexOf('e'))); 223b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('d'), wordIterator.preceding(text.indexOf('g'))); 224b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('g'), wordIterator.preceding(text.indexOf('h'))); 225b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('g'), wordIterator.preceding(text.indexOf('j'))); 226b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('j'), wordIterator.preceding(text.indexOf('l'))); 2274968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2284968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 229bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 2304968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testFollowing() { 2314968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 2324968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 2334968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 2344968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 2354968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 2364968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.following(-1); 2374968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("following with invalid offset should throw IllegalArgumentException."); 2384968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 2394968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2404968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 2414968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.following(text.length() + 1); 2424968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("following with invalid offset should throw IllegalArgumentException."); 2434968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 2444968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2454968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 2464968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('c') + 1, wordIterator.following(text.indexOf('a'))); 2474968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('c') + 1, wordIterator.following(text.indexOf('c'))); 248b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('f') + 1, wordIterator.following(text.indexOf('c') + 1)); 249b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('f') + 1, wordIterator.following(text.indexOf('d'))); 250b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('i') + 1, wordIterator.following(text.indexOf('-'))); 251b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('i') + 1, wordIterator.following(text.indexOf('g'))); 252b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.length(), wordIterator.following(text.indexOf('j'))); 253b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(BreakIterator.DONE, wordIterator.following(text.length())); 254b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader 255b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader // The results should be the same even if we set an smaller window, since WordIterator 256b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader // enlargens the window by 50 code units on each side anyway. 257b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader wordIterator.setCharSequence(text, text.indexOf('d'), text.indexOf('e')); 258b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader 259b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('c') + 1, wordIterator.following(text.indexOf('a'))); 260b08a07165fdc9ee6df40bbce94676755461ff3e0Roozbeh Pournader assertEquals(text.indexOf('c') + 1, wordIterator.following(text.indexOf('c'))); 2614968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('f') + 1, wordIterator.following(text.indexOf('c') + 1)); 2624968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('f') + 1, wordIterator.following(text.indexOf('d'))); 2634968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('i') + 1, wordIterator.following(text.indexOf('-'))); 2644968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('i') + 1, wordIterator.following(text.indexOf('g'))); 2654968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.length(), wordIterator.following(text.indexOf('j'))); 2664968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.following(text.length())); 2674968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2684968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 269bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 2704968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testIsBoundary() { 2714968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 2724968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 2734968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 2744968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 2754968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 2764968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.isBoundary(-1); 2774968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("isBoundary with invalid offset should throw IllegalArgumentException."); 2784968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 2794968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2804968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 2814968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.isBoundary(text.length() + 1); 2824968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("isBoundary with invalid offset should throw IllegalArgumentException."); 2834968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 2844968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2854968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 2864968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.indexOf('a'))); 2874968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isBoundary(text.indexOf('b'))); 2884968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.indexOf('c') + 1)); 2894968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.indexOf('d'))); 2904968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.indexOf('-'))); 2914968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.indexOf('g'))); 2924968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.indexOf('.'))); 2934968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.indexOf('j'))); 2944968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isBoundary(text.length())); 2954968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 2964968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 297bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 2984968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testNextBoundary() { 2994968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 3004968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 3014968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 3024968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3034968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 3044968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.nextBoundary(-1); 3054968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("nextBoundary with invalid offset should throw IllegalArgumentException."); 3064968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 3074968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 3084968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 3094968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.nextBoundary(text.length() + 1); 3104968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("nextBoundary with invalid offset should throw IllegalArgumentException."); 3114968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 3124968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 3134968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3144968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3154968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi int currentOffset = 0; 3164968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3174968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('c') + 1, currentOffset); 3184968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3194968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3204968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('d'), currentOffset); 3214968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3224968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3234968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('f') + 1, currentOffset); 3244968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3254968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3264968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('g'), currentOffset); 3274968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3284968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3294968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('i') + 1, currentOffset); 3304968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3314968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3324968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('.') + 1, currentOffset); 3334968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3344968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3354968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('j'), currentOffset); 3364968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3374968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3384968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.length(), currentOffset); 3394968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3404968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.nextBoundary(currentOffset); 3414968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, currentOffset); 3424968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 3434968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 344bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 3454968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testPrevBoundary() { 3464968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 3474968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 3484968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 3494968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3504968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 3514968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.prevBoundary(-1); 3524968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("prevBoundary with invalid offset should throw IllegalArgumentException."); 3534968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 3544968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 3554968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 3564968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.prevBoundary(text.length() + 1); 3574968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("prevBoundary with invalid offset should throw IllegalArgumentException."); 3584968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 3594968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 3604968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3614968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi int currentOffset = text.length(); 3624968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3634968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('j'), currentOffset); 3644968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3654968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3664968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('.') + 1, currentOffset); 3674968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3684968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3694968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('i') + 1, currentOffset); 3704968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3714968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3724968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('g'), currentOffset); 3734968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3744968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3754968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('f') + 1, currentOffset); 3764968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3774968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3784968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('d'), currentOffset); 3794968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3804968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3814968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('c') + 1, currentOffset); 3824968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3834968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3844968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('a'), currentOffset); 3854968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 3864968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi currentOffset = wordIterator.prevBoundary(currentOffset); 3874968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, currentOffset); 3884968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 3894968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 390bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 3914968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testGetBeginning() { 3924968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi { 3934968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 3944968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 3954968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 3964968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 3974968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getBeginning(-1); 3984968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getBeginning with invalid offset should throw IllegalArgumentException."); 3994968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4004968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4014968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 4024968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getBeginning(text.length() + 1); 4034968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getBeginning with invalid offset should throw IllegalArgumentException."); 4044968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4054968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4064968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 4074968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPrevWordBeginningOnTwoWordsBoundary(-1); 4084968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getPrevWordBeginningOnTwoWordsBoundary with invalid offset should throw " 4094968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IllegalArgumentException."); 4104968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4114968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4124968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 4134968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPrevWordBeginningOnTwoWordsBoundary(text.length() + 1); 4144968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getPrevWordBeginningOnTwoWordsBoundary with invalid offset should throw " 4154968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IllegalArgumentException."); 4164968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4174968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4184968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4194968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4204968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi { 4214968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 4224968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 4234968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 4244968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4254968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('a'), wordIterator.getBeginning(text.indexOf('a'))); 4264968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('a'), wordIterator.getBeginning(text.indexOf('c'))); 4274968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('a'), wordIterator.getBeginning(text.indexOf('c') + 1)); 4284968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('d'), wordIterator.getBeginning(text.indexOf('d'))); 4294968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('d'), wordIterator.getBeginning(text.indexOf('-'))); 4304968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('g'), wordIterator.getBeginning(text.indexOf('g'))); 4314968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('g'), wordIterator.getBeginning(text.indexOf('.'))); 4324968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.getBeginning(text.indexOf('.') + 1)); 4334968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('j'), wordIterator.getBeginning(text.indexOf('j'))); 4344968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('j'), wordIterator.getBeginning(text.indexOf('l') + 1)); 4354968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4364968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi for (int i = 0; i < text.length(); i++) { 4374968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(wordIterator.getBeginning(i), 4384968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPrevWordBeginningOnTwoWordsBoundary(i)); 4394968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4404968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4414968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4424968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi { 4434968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi // Japanese HIRAGANA letter + KATAKANA letters 4444968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "\u3042\u30A2\u30A3\u30A4"; 4454968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.JAPANESE); 4464968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 4474968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4484968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u3042'), wordIterator.getBeginning(text.indexOf('\u3042'))); 4494968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A2'), wordIterator.getBeginning(text.indexOf('\u30A2'))); 4504968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A2'), wordIterator.getBeginning(text.indexOf('\u30A4'))); 4514968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A2'), wordIterator.getBeginning(text.length())); 4524968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4534968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u3042'), 4544968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPrevWordBeginningOnTwoWordsBoundary(text.indexOf('\u3042'))); 4554968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u3042'), 4564968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPrevWordBeginningOnTwoWordsBoundary(text.indexOf('\u30A2'))); 4574968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A2'), 4584968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPrevWordBeginningOnTwoWordsBoundary(text.indexOf('\u30A4'))); 4594968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A2'), 4604968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPrevWordBeginningOnTwoWordsBoundary(text.length())); 4614968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4624968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4634968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 464bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 4654968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testGetEnd() { 4664968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi { 4674968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 4684968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 4694968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 4704968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 4714968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getEnd(-1); 4724968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getEnd with invalid offset should throw IllegalArgumentException."); 4734968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4744968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4754968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 4764968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getEnd(text.length() + 1); 4774968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getEnd with invalid offset should throw IllegalArgumentException."); 4784968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4794968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4804968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 4814968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getNextWordEndOnTwoWordBoundary(-1); 4824968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getNextWordEndOnTwoWordBoundary with invalid offset should throw " 4834968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IllegalArgumentException."); 4844968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4854968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4864968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 4874968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getNextWordEndOnTwoWordBoundary(text.length() + 1); 4884968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getNextWordEndOnTwoWordBoundary with invalid offset should throw " 4894968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IllegalArgumentException."); 4904968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 4914968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4924968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 4934968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4944968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi { 4954968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc def-ghi. jkl"; 4964968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 4974968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 4984968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 4994968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('c') + 1, wordIterator.getEnd(text.indexOf('a'))); 5004968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('c') + 1, wordIterator.getEnd(text.indexOf('c'))); 5014968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('c') + 1, wordIterator.getEnd(text.indexOf('c') + 1)); 5024968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('f') + 1, wordIterator.getEnd(text.indexOf('d'))); 5034968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('f') + 1, wordIterator.getEnd(text.indexOf('f') + 1)); 5044968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('i') + 1, wordIterator.getEnd(text.indexOf('g'))); 5054968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('i') + 1, wordIterator.getEnd(text.indexOf('i') + 1)); 5064968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.getEnd(text.indexOf('.') + 1)); 5074968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('l') + 1, wordIterator.getEnd(text.indexOf('j'))); 5084968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('l') + 1, wordIterator.getEnd(text.indexOf('l') + 1)); 5094968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5104968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi for (int i = 0; i < text.length(); i++) { 5114968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(wordIterator.getEnd(i), 5124968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getNextWordEndOnTwoWordBoundary(i)); 5134968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5144968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5154968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5164968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi { 5174968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi // Japanese HIRAGANA letter + KATAKANA letters 5184968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "\u3042\u30A2\u30A3\u30A4"; 5194968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.JAPANESE); 5204968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 5214968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5224968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u3042') + 1, wordIterator.getEnd(text.indexOf('\u3042'))); 5234968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u3042') + 1, wordIterator.getEnd(text.indexOf('\u30A2'))); 5244968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A4') + 1, wordIterator.getEnd(text.indexOf('\u30A4'))); 5254968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A4') + 1, 5264968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getEnd(text.indexOf('\u30A4') + 1)); 5274968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5284968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u3042') + 1, 5294968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getNextWordEndOnTwoWordBoundary(text.indexOf('\u3042'))); 5304968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A4') + 1, 5314968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getNextWordEndOnTwoWordBoundary(text.indexOf('\u30A2'))); 5324968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A4') + 1, 5334968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getNextWordEndOnTwoWordBoundary(text.indexOf('\u30A4'))); 5344968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('\u30A4') + 1, 5354968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getNextWordEndOnTwoWordBoundary(text.indexOf('\u30A4') + 1)); 5364968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5374968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5384968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 539bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 5404968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testGetPunctuationBeginning() { 5414968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc!? (^^;) def"; 5424968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 5434968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 5444968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5459dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader try { 5469dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader wordIterator.getPunctuationBeginning(BreakIterator.DONE); 5479dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader fail("getPunctuationBeginning with invalid offset should throw " 5489dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader + "IllegalArgumentException."); 5499dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader } catch (IllegalArgumentException e) { 5509dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader } 5514968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 5524968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPunctuationBeginning(-2); 5534968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getPunctuationBeginning with invalid offset should throw " 5544968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IllegalArgumentException."); 5554968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 5564968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5574968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 5584968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPunctuationBeginning(text.length() + 1); 5594968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getPunctuationBeginning with invalid offset should throw " 5604968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IllegalArgumentException."); 5614968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 5624968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5634968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5644968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.getPunctuationBeginning(text.indexOf('a'))); 5654968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.getPunctuationBeginning(text.indexOf('c'))); 5664968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('!'), wordIterator.getPunctuationBeginning(text.indexOf('!'))); 5674968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('!'), 5684968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPunctuationBeginning(text.indexOf('?') + 1)); 5694968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf(';'), wordIterator.getPunctuationBeginning(text.indexOf(';'))); 5704968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf(';'), wordIterator.getPunctuationBeginning(text.indexOf(')'))); 5714968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf(';'), wordIterator.getPunctuationBeginning(text.length())); 5724968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5734968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 574bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 5754968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testGetPunctuationEnd() { 5764968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc!? (^^;) def"; 5774968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 5784968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 5794968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5809dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader try { 5819dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader wordIterator.getPunctuationEnd(BreakIterator.DONE); 5829dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader fail("getPunctuationEnd with invalid offset should throw IllegalArgumentException."); 5839dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader } catch (IllegalArgumentException e) { 5849dad5811d7232c85c07761dddd9ebd035524f955Roozbeh Pournader } 5854968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 5864968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPunctuationEnd(-2); 5874968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getPunctuationEnd with invalid offset should throw IllegalArgumentException."); 5884968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 5894968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5904968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi try { 5914968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.getPunctuationEnd(text.length() + 1); 5924968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi fail("getPunctuationBeginning with invalid offset should throw " 5934968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi + "IllegalArgumentException."); 5944968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } catch (IllegalArgumentException e) { 5954968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 5964968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 5974968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('?') + 1, wordIterator.getPunctuationEnd(text.indexOf('a'))); 5984968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('?') + 1, wordIterator.getPunctuationEnd(text.indexOf('?') + 1)); 5994968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf('(') + 1, wordIterator.getPunctuationEnd(text.indexOf('('))); 6004968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf(')') + 1, wordIterator.getPunctuationEnd(text.indexOf('(') + 2)); 6014968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(text.indexOf(')') + 1, wordIterator.getPunctuationEnd(text.indexOf(')') + 1)); 6024968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.getPunctuationEnd(text.indexOf('d'))); 6034968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertEquals(BreakIterator.DONE, wordIterator.getPunctuationEnd(text.length())); 6044968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 6054968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 606bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 6074968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testIsAfterPunctuation() { 6084968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc!? (^^;) def"; 6094968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 6104968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 6114968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 6124968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isAfterPunctuation(text.indexOf('a'))); 6134968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isAfterPunctuation(text.indexOf('!'))); 6144968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isAfterPunctuation(text.indexOf('?'))); 6154968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isAfterPunctuation(text.indexOf('?') + 1)); 6164968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isAfterPunctuation(text.indexOf('d'))); 6174968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 6184968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isAfterPunctuation(BreakIterator.DONE)); 6194968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isAfterPunctuation(text.length() + 1)); 6204968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 6214968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 622bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 6234968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi public void testIsOnPunctuation() { 6244968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi final String text = "abc!? (^^;) def"; 6254968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 6264968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi wordIterator.setCharSequence(text, 0, text.length()); 6274968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 6284968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isOnPunctuation(text.indexOf('a'))); 6294968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isOnPunctuation(text.indexOf('!'))); 6304968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isOnPunctuation(text.indexOf('?'))); 6314968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isOnPunctuation(text.indexOf('?') + 1)); 6324968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertTrue(wordIterator.isOnPunctuation(text.indexOf(')'))); 6334968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isOnPunctuation(text.indexOf(')') + 1)); 6344968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isOnPunctuation(text.indexOf('d'))); 6354968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi 6364968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isOnPunctuation(BreakIterator.DONE)); 6374968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isOnPunctuation(text.length())); 6384968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi assertFalse(wordIterator.isOnPunctuation(text.length() + 1)); 6394968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi } 6401f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader 641bbe51f8290af05b4071c7ed44fcbaa98e2f85e13Andrei Stingaceanu @Test 6421f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader public void testApostropheMiddleOfWord() { 6431f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader // These tests confirm that the word "isn't" is treated like one word. 6441f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader final String text = "isn't he"; 6451f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader WordIterator wordIterator = new WordIterator(Locale.ENGLISH); 6461f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader wordIterator.setCharSequence(text, 0, text.length()); 6471f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader 6481f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('i'), wordIterator.preceding(text.indexOf('h'))); 6491f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('t') + 1, wordIterator.following(text.indexOf('i'))); 6501f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader 6511f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertTrue(wordIterator.isBoundary(text.indexOf('i'))); 6521f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertFalse(wordIterator.isBoundary(text.indexOf('\''))); 6531f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertFalse(wordIterator.isBoundary(text.indexOf('t'))); 6541f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertTrue(wordIterator.isBoundary(text.indexOf('t') + 1)); 6551f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertTrue(wordIterator.isBoundary(text.indexOf('h'))); 6561f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader 6571f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('i'), wordIterator.getBeginning(text.indexOf('i'))); 6581f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('i'), wordIterator.getBeginning(text.indexOf('n'))); 6591f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('i'), wordIterator.getBeginning(text.indexOf('\''))); 6601f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('i'), wordIterator.getBeginning(text.indexOf('t'))); 6611f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('i'), wordIterator.getBeginning(text.indexOf('t') + 1)); 6621f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('h'), wordIterator.getBeginning(text.indexOf('h'))); 6631f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader 6641f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('t') + 1, wordIterator.getEnd(text.indexOf('i'))); 6651f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('t') + 1, wordIterator.getEnd(text.indexOf('n'))); 6661f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('t') + 1, wordIterator.getEnd(text.indexOf('\''))); 6671f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('t') + 1, wordIterator.getEnd(text.indexOf('t'))); 6681f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader assertEquals(text.indexOf('e') + 1, wordIterator.getEnd(text.indexOf('h'))); 6691f7ab84b0ebd38c0054d7f840f9a649555e21591Roozbeh Pournader } 6704968a219bf091df2e76ada29d39531bdde647c88Keisuke Kuroyanagi} 671