blob: a1f6cc1fa3f364dea41e365b395a9cc65e451b18 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.text.tests;
import com.ibm.icu.text.BreakIterator;
import junit.framework.TestCase;
/**
* @since 3.0
*/
public class BreakIteratorTest extends TestCase {
protected BreakIterator fBreakIterator;
public void assertNextPositions(CharSequence ci, int position) {
assertNextPositions(ci, new int[] {position});
}
public void assertNextPositions(CharSequence ci, int[] positions) {
fBreakIterator.setText(ci.toString());
// test next()
for (int i = 0; i < positions.length; i++) {
int pos= fBreakIterator.next();
assertEquals(positions[i], pos);
}
// test following()
int idx= 0;
for (int i = 0; i < positions.length; i++) {
int position= positions[i];
while (idx < position) {
if (!illegalPos(ci, idx))
assertEquals(position, fBreakIterator.following(idx));
idx++;
}
}
}
/**
* Check if we are in a multibyte delimiter
* @param idx
* @return
*/
private boolean illegalPos(CharSequence seq, int idx) {
String DELIMS= "\n\r";
if (idx == 0 || idx == seq.length())
return false;
char one= seq.charAt(idx - 1);
char two= seq.charAt(idx);
return one != two && DELIMS.indexOf(one) != -1 && DELIMS.indexOf(two) != -1;
}
public void assertPreviousPositions(CharSequence ci, int position) {
assertPreviousPositions(ci, new int[] {position});
}
public void assertPreviousPositions(CharSequence ci, int[] positions) {
fBreakIterator.setText(ci.toString());
fBreakIterator.last();
for (int i = positions.length - 1; i >= 0; i--) {
int pos= fBreakIterator.previous();
assertEquals(positions[i], pos);
}
// test preceding()
int idx= ci.length();
for (int i = positions.length - 1; i >= 0; i--) {
int position= positions[i];
while (idx > position) {
if (!illegalPos(ci, idx))
assertEquals(position, fBreakIterator.preceding(idx));
idx--;
}
}
}
}