/* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package libcore.java.text; import java.text.BreakIterator; import java.util.Locale; public class BreakIteratorTest extends junit.framework.TestCase { BreakIterator iterator; @Override protected void setUp() throws Exception { super.setUp(); iterator = BreakIterator.getCharacterInstance(Locale.US); } public void testGetAvailableLocales() { Locale[] locales = BreakIterator.getAvailableLocales(); assertTrue("Array available locales is null", locales != null); assertTrue("Array available locales is 0-length", (locales != null && locales.length != 0)); boolean found = false; for (Locale l : locales) { if (l.equals(Locale.US)) { // expected found = true; } } assertTrue("At least locale " + Locale.US + " must be presented", found); } public void testGetWordInstanceLocale() { BreakIterator it1 = BreakIterator.getWordInstance(Locale.CANADA_FRENCH); assertTrue("Incorrect BreakIterator", it1 != BreakIterator.getWordInstance()); BreakIterator it2 = BreakIterator.getWordInstance(new Locale("bad locale")); assertTrue("Incorrect BreakIterator", it2 != BreakIterator.getWordInstance()); } public void testWordBoundaries() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1024; ++i) { if (i > 0) { sb.append(' '); } sb.append("12345"); } String s = sb.toString(); BreakIterator it = BreakIterator.getWordInstance(Locale.US); it.setText(s); // Check we're not leaking global references. 2048 would bust the VM's hard-coded limit. for (int i = 0; i < 2048; ++i) { it.setText(s); } BreakIterator clone = (BreakIterator) it.clone(); assertExpectedWordBoundaries(it, s); assertExpectedWordBoundaries(clone, s); } private void assertExpectedWordBoundaries(BreakIterator it, String s) { int expectedPos = 0; int pos = it.first(); assertEquals(expectedPos, pos); while (pos != BreakIterator.DONE) { expectedPos += 5; // The five characters until the end of this word. pos = it.next(); assertEquals(expectedPos, pos); expectedPos += 1; // The space before the start of the next word... if (expectedPos > s.length()) { expectedPos = BreakIterator.DONE; // ...unless we're done. } pos = it.next(); assertEquals(expectedPos, pos); } } public void testIsBoundary() { BreakIterator it = BreakIterator.getCharacterInstance(Locale.US); it.setText("hello"); try { it.isBoundary(-1); fail(); } catch (IllegalArgumentException expected) { // Note that this exception is not listed in the Java API documentation } assertTrue(it.isBoundary(0)); assertTrue(it.isBoundary(1)); assertTrue(it.isBoundary(4)); assertTrue(it.isBoundary(5)); try { it.isBoundary(6); fail(); } catch (IllegalArgumentException expected) { // Note that this exception is not listed in the Java API documentation } } public void testFollowing() { BreakIterator it = BreakIterator.getCharacterInstance(Locale.US); it.setText("hello"); try { it.following(-1); fail(); } catch (IllegalArgumentException expected) { // Expected exception } assertEquals(1, it.following(0)); assertEquals(2, it.following(1)); assertEquals(5, it.following(4)); assertEquals(BreakIterator.DONE, it.following(5)); try { it.following(6); fail(); } catch (IllegalArgumentException expected) { // Expected exception } } public void testPreceding() { BreakIterator it = BreakIterator.getCharacterInstance(Locale.US); it.setText("hello"); try { it.preceding(-1); fail(); } catch (IllegalArgumentException expected) { // Expected exception } assertEquals(BreakIterator.DONE, it.preceding(0)); assertEquals(0, it.preceding(1)); assertEquals(4, it.preceding(5)); try { it.preceding(6); fail(); } catch (IllegalArgumentException expected) { // Expected exception } } }