blob: 1a2baf6a05ace17258989a36c58304a033c5b602 [file] [log] [blame]
// © 2017 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
package com.ibm.icu.dev.test.impl;
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import com.ibm.icu.impl.StringSegment;
/**
* @author sffc
*
*/
public class StringSegmentTest {
static final String SAMPLE_STRING = "📻 radio 📻";
@Test
public void testOffset() {
StringSegment segment = new StringSegment(SAMPLE_STRING, false);
assertEquals(0, segment.getOffset());
segment.adjustOffsetByCodePoint();
assertEquals(2, segment.getOffset());
segment.adjustOffset(1);
assertEquals(3, segment.getOffset());
segment.adjustOffset(2);
assertEquals(5, segment.getOffset());
segment.setOffset(4);
assertEquals(4, segment.getOffset());
}
@Test
public void testLength() {
StringSegment segment = new StringSegment(SAMPLE_STRING, false);
assertEquals(11, segment.length());
segment.adjustOffset(3);
assertEquals(8, segment.length());
segment.setLength(4);
assertEquals(4, segment.length());
segment.setOffset(5);
assertEquals(2, segment.length());
segment.resetLength();
assertEquals(6, segment.length());
}
@Test
public void testCharAt() {
StringSegment segment = new StringSegment(SAMPLE_STRING, false);
assertCharSequenceEquals(SAMPLE_STRING, segment);
segment.adjustOffset(3);
assertCharSequenceEquals("radio 📻", segment);
segment.setLength(5);
assertCharSequenceEquals("radio", segment);
}
@Test
public void testGetCodePoint() {
StringSegment segment = new StringSegment(SAMPLE_STRING, false);
assertEquals(0x1F4FB, segment.getCodePoint());
segment.setLength(1);
assertEquals(0xD83D, segment.getCodePoint());
segment.resetLength();
segment.adjustOffset(1);
assertEquals(0xDCFB, segment.getCodePoint());
segment.adjustOffset(1);
assertEquals(0x20, segment.getCodePoint());
}
@Test
public void testCommonPrefixLength() {
StringSegment segment = new StringSegment(SAMPLE_STRING, true);
assertEquals(11, segment.getCommonPrefixLength(SAMPLE_STRING));
assertEquals(4, segment.getCommonPrefixLength("📻 r"));
assertEquals(3, segment.getCommonPrefixLength("📻 x"));
assertEquals(0, segment.getCommonPrefixLength("x"));
segment.adjustOffset(3);
assertEquals(5, segment.getCommonPrefixLength("raDio"));
assertEquals(5, segment.getCommonPrefixLength("radio"));
assertEquals(2, segment.getCommonPrefixLength("rafio"));
assertEquals(0, segment.getCommonPrefixLength("fadio"));
assertEquals(5, segment.getCaseSensitivePrefixLength("radio"));
assertEquals(2, segment.getCaseSensitivePrefixLength("raDio"));
segment.setLength(3);
assertEquals(3, segment.getCommonPrefixLength("radio"));
assertEquals(2, segment.getCommonPrefixLength("rafio"));
assertEquals(0, segment.getCommonPrefixLength("fadio"));
segment.resetLength();
segment.setOffset(11); // end of string
assertEquals(0, segment.getCommonPrefixLength("foo"));
}
private static void assertCharSequenceEquals(CharSequence a, CharSequence b) {
assertEquals(a.length(), b.length());
for (int i = 0; i < a.length(); i++) {
assertEquals(a.charAt(i), b.charAt(i));
}
}
}