blob: e3ea9dc664fc30a0000a7f546e9054a97a52ffd0 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.harmony.text.tests.java.text;
import dalvik.annotation.AndroidOnly;
import dalvik.annotation.KnownFailure;
import dalvik.annotation.TestLevel;
import dalvik.annotation.TestTargetClass;
import dalvik.annotation.TestTargetNew;
import dalvik.annotation.TestTargets;
import junit.framework.TestCase;
import java.text.AttributedString;
import java.text.Bidi;
import java.util.Arrays;
@TestTargetClass(Bidi.class)
public class BidiTest extends TestCase {
Bidi bd;
public static void assertRunArrayEquals(int[][] expected, Bidi bidi) {
assertEquals("different length", expected.length, bidi.getRunCount());
FORRUN: for (int i = 0; i < bidi.getRunCount(); i++) {
int[] butWas = new int[] { bidi.getRunStart(i),
bidi.getRunLimit(i), bidi.getRunLevel(i) };
for (int j = 0; j < expected.length; j++) {
if (expected[j][0] == butWas[0] && expected[j][1] == butWas[1]
&& expected[j][2] == butWas[2]) {
continue FORRUN;
}
}
fail("expected [" + i + "] " + " start: " + butWas[0] + " limit: "
+ butWas[1] + " level: " + butWas[2]);
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify positive case for Bidi(AttributedCharacterIterator paragraph).",
method = "Bidi",
args = {char[].class, int.class, byte[].class, int.class, int.class, int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify positive case for Bidi(AttributedCharacterIterator paragraph).",
method = "Bidi",
args = {java.text.AttributedCharacterIterator.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
public void testNullPointerConstructor() {
try {
bd = new Bidi(null, Bidi.DIRECTION_RIGHT_TO_LEFT);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi(null, 0, new byte[] { 0 }, 0, 0,
Bidi.DIRECTION_RIGHT_TO_LEFT);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi(null);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
}
bd = new Bidi("a".toCharArray(), 0, null, 0, 1,
Bidi.DIRECTION_RIGHT_TO_LEFT);
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {char[].class, int.class, byte[].class, int.class, int.class, int.class}
)
public void testBadLength() {
try {
bd = new Bidi("1".toCharArray(), 0, new byte[] { 0 }, 0, 20,
Bidi.DIRECTION_RIGHT_TO_LEFT);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi("1234567".toCharArray(), 0, new byte[] { 0 }, 0, 4,
Bidi.DIRECTION_RIGHT_TO_LEFT);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi("1234567".toCharArray(), 4, new byte[] { 0, 1, 2, 3,
4 }, 0, 5, Bidi.DIRECTION_RIGHT_TO_LEFT);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi("1234567".toCharArray(), 0, new byte[] { 0, 1, 2, 3,
4 }, 4, 5, Bidi.DIRECTION_RIGHT_TO_LEFT);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
// regression for HARMONY-1031
try {
bd = new Bidi(new char[] { 't', 't', 't' }, -1,
new byte[] { 2, 2 }, 1, 1, 1);
fail("should be IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi(new char[] { 't', 't', 't' }, 1, new byte[] { 2, 2 },
-1, 1, 1);
fail("should be IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi(new char[] { 't', 't', 't' }, 1, new byte[] { 2, 2 },
1, -1, 1);
fail("should be IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi(new char[] {}, 5, new byte[] { 2, 2, 2, 2, 2, 2 }, 8,
Integer.MAX_VALUE, 5);
fail("should be IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
bd = new Bidi(null, 5, null, 8, Integer.MAX_VALUE, 5);
fail("should be IllegalArgumentException.");
} catch (IllegalArgumentException e) {
// expected
}
bd = new Bidi(new char[] { 'o' }, 0, new byte[] { 2, 2 }, 2, 0, 2);
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
public void testEmptyParagraph() {
bd = new Bidi("", Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(0, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 0, 0 } }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("", Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(0, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 0, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertTrue(bd.isRightToLeft());
bd = new Bidi("", Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(0, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 0, 0 }, }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("", Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(0, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 0, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertTrue(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
)
})
public void testSpaceParagraph() {
bd = new Bidi(" ", Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(" ", Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertTrue(bd.isRightToLeft());
bd = new Bidi(" ", Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(" ", Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertTrue(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
)
})
public void testSimpleParagraph() {
bd = new Bidi("t", Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("t", Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("t", Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
/**
* @tests java.text.Bidi#toString() Test of method java.text.Bidi#toString()
*/
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "toString",
args = {}
)
public void testToString() {
try {
bd = new Bidi("bidi", 173);
assertNotNull("Bidi representation is null", bd.toString());
} catch (Exception e) {
fail("Unexpected exception " + e.toString());
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify that these methods can return all possible flags.",
method = "Bidi",
args = {java.lang.String.class, int.class}
)
})
public void testBadFlags() {
bd = new Bidi("", 173);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(0, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 0, 0 }, }, bd);
assertTrue(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Verifies IllegalArgumentException.",
method = "Bidi",
args = {char[].class, int.class, byte[].class, int.class, int.class, int.class}
)
public void testBadEmbeddings() {
try {
bd = new Bidi("".toCharArray(), 0, new byte[] {}, 0, 1,
Bidi.DIRECTION_RIGHT_TO_LEFT);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
)
})
public void testOverrideEmbeddings() {
bd = new Bidi(new char[] { 's', 's', 's' }, 0, new byte[] { (byte) -7,
(byte) -2, (byte) -3 }, 0, 3,
Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(7, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 7 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(new char[] { 's', 's', 's' }, 0, new byte[] { (byte) -1,
(byte) -2, (byte) -3 }, 0, 3,
Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(new char[] { 's', 's', 's' }, 0, new byte[] { (byte) -1,
(byte) -2, (byte) -3 }, 0, 3, Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(new char[] { 's', 's', 's' }, 0, new byte[] { (byte) -1,
(byte) -2, (byte) -3 }, 0, 3, Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
)
})
public void testDefaultEmbeddings() {
bd = new Bidi(new char[] { 's', 's', 's' }, 0, new byte[] { (byte) 0,
(byte) 0, (byte) 0 }, 0, 3, Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(2, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(2, bd.getLevelAt(2));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 3, 2 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
)
})
public void testRelativeEmbeddings() {
bd = new Bidi(new char[] { 's', 's', 's' }, 0, new byte[] { (byte) 1,
(byte) 2, (byte) 3 }, 0, 3, Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(2, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(4, bd.getLevelAt(2));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 2, 2 }, { 2, 3, 4 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
public void testSimpleHebrewParagraph() {
bd = new Bidi("\u05D0", Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertTrue(bd.isRightToLeft());
bd = new Bidi("\u05D0", Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertTrue(bd.isRightToLeft());
bd = new Bidi("\u05D0", Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertFalse(bd.isMixed());
assertTrue(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
public void testSimpleBidiParagraph_1() {
bd = new Bidi("\u05D0a", Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("\u05D0a", Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("\u05D0a", Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 0 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("\u05D0a", Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
public void testSimpleBidiParagraph_2() {
bd = new Bidi("a\u05D0", Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, { 1, 2, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("a\u05D0", Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, { 1, 2, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("a\u05D0", Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(0, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 0 }, { 1, 2, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi("a\u05D0", Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(2, bd.getLength());
assertEquals(2, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(2, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 2 }, { 1, 2, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
/*
* spec reads: public static final int DIRECTION_RIGHT_TO_LEFT Constant
* indicating base direction is right-to-left. according to that, the method
* baseIsLeftToRight() here should return false. however, RI doesn't act so.
*/
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
public void testRIBug_1() {
bd = new Bidi("t", Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
// the base level it the essential cause
assertEquals(1, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(2, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 2 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
// this is essentially the same bug as Bug_1
public void testRIBug_2() {
bd = new Bidi("\u05D0", Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(1, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(1, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {String.class, int.class}
)
})
public void testComplicatedBidi() {
bd = new Bidi("a\u05D0a\"a\u05D0\"\u05D0a",
Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(9, bd.getLength());
assertEquals(2, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1));
assertEquals(2, bd.getLevelAt(2));
assertEquals(2, bd.getLevelAt(3));
assertEquals(2, bd.getLevelAt(4));
assertEquals(1, bd.getLevelAt(5));
assertEquals(1, bd.getLevelAt(6));
assertEquals(1, bd.getLevelAt(7));
assertEquals(2, bd.getLevelAt(8));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(5, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 2 }, { 1, 2, 1 },
{ 2, 5, 2 }, { 5, 8, 1 }, { 8, 9, 2 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {char[].class, int.class, byte[].class, int.class, int.class, int.class}
)
})
public void testComplicatedOverrideBidi() {
bd = new Bidi("a\u05D0a\"a\u05D0\"\u05D0a".toCharArray(), 0,
new byte[] { 0, 0, 0, -3, -3, 2, 2, 0, 3 }, 0, 9,
Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(9, bd.getLength());
assertEquals(2, bd.getLevelAt(0));
assertEquals(1, bd.getLevelAt(1));
assertEquals(2, bd.getLevelAt(2));
assertEquals(3, bd.getLevelAt(3));
assertEquals(3, bd.getLevelAt(4));
assertEquals(3, bd.getLevelAt(5));
assertEquals(2, bd.getLevelAt(6));
assertEquals(1, bd.getLevelAt(7));
assertEquals(4, bd.getLevelAt(8));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(7, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 2 }, { 1, 2, 1 },
{ 2, 3, 2 }, { 3, 6, 3 }, { 6, 7, 2 }, { 7, 8, 1 },
{ 8, 9, 4 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "requiresBidi",
args = {char[].class, int.class, int.class}
)
public void testRequiresBidi() {
try {
Bidi.requiresBidi(null, 0, 0);
fail("should throw NullPointerException");
} catch (NullPointerException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi(null, 0, 1));
fail("should throw NPE");
} catch (NullPointerException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("".toCharArray(), 0, 1));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("aaa".toCharArray(), -1, 1));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("aaa".toCharArray(), 1, -1));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("\u05D0".toCharArray(), 1, -1));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("aaa".toCharArray(), 1, 0));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("aaa".toCharArray(), 7, 7));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("aaa".toCharArray(), 1,
Integer.MAX_VALUE));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
try {
assertFalse(Bidi.requiresBidi("aaa".toCharArray(),
Integer.MAX_VALUE, 1));
fail("should throw IllegalArgumentException");
} catch (IllegalArgumentException e) {
// expected
}
assertFalse(Bidi.requiresBidi("".toCharArray(), 0, 0));
assertFalse(Bidi.requiresBidi("aaa".toCharArray(), 1, 1));
assertFalse(Bidi.requiresBidi("aaa".toCharArray(), 0, 2));
assertFalse(Bidi.requiresBidi("\u05D0".toCharArray(), 1, 1));
assertTrue(Bidi.requiresBidi("\u05D0".toCharArray(), 0, 1));
assertFalse(Bidi.requiresBidi("aa\u05D0a".toCharArray(), 0, 2));
assertTrue(Bidi.requiresBidi("aa\u05D0a".toCharArray(), 1, 3));
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {char[].class, int.class, byte[].class, int.class, int.class, int.class}
)
})
public void testHebrewOverrideEmbeddings() {
bd = new Bidi(new char[] { '\u05D0', '\u05D0', '\u05D0' }, 0,
new byte[] { (byte) -1, (byte) -2, (byte) -3 }, 0, 3,
Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(new char[] { '\u05D0', '\u05D0', '\u05D0' }, 0,
new byte[] { (byte) -1, (byte) -2, (byte) -3 }, 0, 3,
Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(new char[] { '\u05D0', '\u05D0', '\u05D0' }, 0,
new byte[] { (byte) -1, (byte) -2, (byte) -3 }, 0, 3,
Bidi.DIRECTION_LEFT_TO_RIGHT);
assertTrue(bd.baseIsLeftToRight());
assertEquals(0, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(0, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
bd = new Bidi(new char[] { '\u05D0', '\u05D0', '\u05D0' }, 0,
new byte[] { (byte) -1, (byte) -2, (byte) -3 }, 0, 3,
Bidi.DIRECTION_RIGHT_TO_LEFT);
assertFalse(bd.baseIsLeftToRight());
assertEquals(1, bd.getBaseLevel());
assertEquals(3, bd.getLength());
assertEquals(1, bd.getLevelAt(0));
assertEquals(2, bd.getLevelAt(1));
assertEquals(3, bd.getLevelAt(2));
assertEquals(1, bd.getLevelAt(1000));
assertEquals(3, bd.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 1 }, { 1, 2, 2 },
{ 2, 3, 3 }, }, bd);
assertFalse(bd.isLeftToRight());
assertTrue(bd.isMixed());
assertFalse(bd.isRightToLeft());
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "createLineBidi",
args = {int.class, int.class}
)
})
public void testCreateLineBidi() {
bd = new Bidi("a\u05D0a\na\u05D0\"\u05D0a".toCharArray(), 0,
new byte[] { 0, 0, 0, -3, -3, 2, 2, 0, 3 }, 0, 9,
Bidi.DIRECTION_RIGHT_TO_LEFT);
Bidi line = bd.createLineBidi(2, 7);
assertFalse(line.baseIsLeftToRight());
assertEquals(1, line.getBaseLevel());
assertEquals(5, line.getLength());
assertEquals(2, line.getLevelAt(0));
assertEquals(1, line.getLevelAt(1));
assertEquals(3, line.getLevelAt(2));
assertEquals(3, line.getLevelAt(3));
assertEquals(2, line.getLevelAt(4));
assertEquals(1, line.getLevelAt(1000));
assertEquals(4, line.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 1, 2 }, { 1, 2, 1 },
{ 2, 4, 3 }, { 4, 5, 2 }, }, line);
assertFalse(line.isLeftToRight());
assertTrue(line.isMixed());
assertFalse(line.isRightToLeft());
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Verifies IllegalArgumentException.",
method = "createLineBidi",
args = {int.class, int.class}
)
public void testCreateLineBidiInvalid() {
// regression for HARMONY-1050
Bidi bidi = new Bidi("str", Bidi.DIRECTION_RIGHT_TO_LEFT);
try {
bidi.createLineBidi(-1, 1);
fail("Expected IAE");
} catch (IllegalArgumentException e) {
// Expected
}
try {
bidi.createLineBidi(1, -1);
fail("Expected IAE");
} catch (IllegalArgumentException e) {
// Expected
}
try {
bidi.createLineBidi(-1, -1);
fail("Expected IAE");
} catch (IllegalArgumentException e) {
// Expected
}
try {
bidi.createLineBidi(2, 1);
fail("Expected IAE");
} catch (IllegalArgumentException e) {
// Expected
}
// Outsourced to _AndroidFailure:
// bidi.createLineBidi(2, 2);
try {
bidi.createLineBidi(2, 4);
fail("Expected IAE");
} catch (IllegalArgumentException e) {
// Expected
}
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
method = "createLineBidi",
args = {int.class, int.class}
)
@KnownFailure("Is this a failure or just a different behaviour of ICU?")
public void testCreateLineBidi_AndroidFailure() {
Bidi bidi = new Bidi("str", Bidi.DIRECTION_RIGHT_TO_LEFT);
bidi.createLineBidi(2, 2);
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "baseIsLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLevelAt",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getRunCount",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isRightToLeft",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isLeftToRight",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "isMixed",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getBaseLevel",
args = {}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "getLength",
args = {}
)
})
@AndroidOnly("ICU treats new lines different from RI.")
public void testIncompatibleLineAlgorithm() {
// ICU treat a new line as in the same run, however RI does not
bd = new Bidi("aaaaa".toCharArray(), 0,
new byte[] { -2, -1, -3, -3, -2 }, 0, 5,
Bidi.DIRECTION_RIGHT_TO_LEFT);
Bidi line = bd.createLineBidi(1, 4);
assertFalse(line.baseIsLeftToRight());
assertEquals(1, line.getBaseLevel());
assertEquals(3, line.getLength());
assertEquals(1, line.getLevelAt(0));
assertEquals(1, line.getLevelAt(1));
assertEquals(1, line.getLevelAt(2));
assertEquals(1, line.getLevelAt(1000));
assertEquals(1, line.getRunCount());
assertRunArrayEquals(new int[][] { { 0, 3, 1 }, }, line);
assertFalse(line.isLeftToRight());
assertFalse(line.isMixed());
assertTrue(line.isRightToLeft());
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "reorderVisually",
args = {byte[].class, int.class, java.lang.Object[].class, int.class, int.class}
)
public void testReorderVisually() {
String[] init = new String[] { "a", "b", "c", "d" };
String[] s = new String[4];
System.arraycopy(init, 0, s, 0, s.length);
Bidi.reorderVisually(new byte[] { 2, 1, 3, 0 }, 0, s, 0, 4);
assertEquals("[c, b, a, d]", Arrays.asList(s).toString());
System.arraycopy(init, 0, s, 0, s.length);
Bidi.reorderVisually(new byte[] { 1, 3 }, 0, s, 1, 2);
assertEquals("[a, c, b, d]", Arrays.asList(s).toString());
System.arraycopy(init, 0, s, 0, s.length);
Bidi.reorderVisually(new byte[] { 2, 1, 3, 0 }, 1, s, 1, 2);
assertEquals("[a, c, b, d]", Arrays.asList(s).toString());
System.arraycopy(init, 0, s, 0, s.length);
Bidi.reorderVisually(new byte[] { 2, 1, 2, 1 }, 1, s, 0, 3);
assertEquals("[c, b, a, d]", Arrays.asList(s).toString());
System.arraycopy(init, 0, s, 0, s.length);
Bidi.reorderVisually(new byte[] { 2, 1, 0, 1 }, 1, s, 0, 3);
assertEquals("[a, b, c, d]", Arrays.asList(s).toString());
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Verifies exceptions.",
method = "reorderVisually",
args = {byte[].class, int.class, java.lang.Object[].class, int.class, int.class}
)
public void testBadReorderVisually() {
String[] s = new String[] { "a", "b", "c", "d" };
try {
Bidi.reorderVisually(new byte[] { 2, 1, 3, 0 }, 0, s, 0, 5);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
Bidi.reorderVisually(new byte[] { 2, 1, 3, 0 }, 0, s, -1, 1);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
Bidi.reorderVisually(new byte[] { 2, 1, 3, 0 }, -1, s, 0, 1);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
try {
Bidi.reorderVisually(null, 0, s, 0, 1);
fail("should throw NPE");
} catch (NullPointerException e) {
// expected
}
try {
Bidi.reorderVisually(new byte[] { 2, 1, 3, 0 }, 0, null, 0, 1);
fail("should throw NPE");
} catch (NullPointerException e) {
// expected
}
try {
Bidi.reorderVisually(new byte[] { 2, 1, 3, 0 }, 1, s, 0, -1);
fail("should throw IAE");
} catch (IllegalArgumentException e) {
// expected
}
}
@TestTargets({
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Regression test.",
method = "getRunLimit",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Regression test.",
method = "getRunStart",
args = {int.class}
),
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Regression test.",
method = "getRunCount",
args = {}
)
})
public void testGetRuns() {
// Regression test for Harmony-1028
String LTR = "\u0061\u0062";
String RTL = "\u05DC\u05DD";
String newLine = "\n";
String defText = LTR + newLine + RTL + LTR + RTL;
int[][] expectedRuns = { { 0, 3 }, { 3, 5 }, { 5, 7 }, { 7, 9 }, };
Bidi bi = new Bidi(defText, 0);
final int count = bi.getRunCount();
for (int i = 0; i < count; i++) {
assertEquals(expectedRuns[i][0], bi.getRunStart(i));
assertEquals(expectedRuns[i][1], bi.getRunLimit(i));
}
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "Doesn't verify any int value between 0 and getRunCount().",
method = "getRunLimit",
args = {int.class}
)
public void testGetRunLimit() {
bd = new Bidi("text", Bidi.DIRECTION_LEFT_TO_RIGHT);
try {
assertTrue(4 == bd.getRunLimit(-1));
} catch (Exception e) {
fail("Unexpected exception: " + e);
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getRunLevel",
args = {int.class}
)
public void testGetRunLevelLInt() {
bd = new Bidi("text", Bidi.DIRECTION_LEFT_TO_RIGHT);
try {
assertEquals(0, bd.getRunLevel(0));
assertEquals(0, bd.getRunLevel(bd.getRunCount()));
} catch (Exception e) {
fail("Unexpected exception: " + e);
}
bd = new Bidi("text", Bidi.DIRECTION_RIGHT_TO_LEFT);
try {
assertEquals(2, bd.getRunLevel(0));
} catch (Exception e) {
fail("Unexpected exception: " + e);
}
bd = new Bidi("text", Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
try {
assertEquals(0, bd.getRunLevel(0));
} catch (Exception e) {
fail("Unexpected exception: " + e);
}
}
@TestTargetNew(
level = TestLevel.COMPLETE,
notes = "",
method = "getRunStart",
args = {int.class}
)
public void testGetRunStart() {
bd = new Bidi(new char[] { 's', 's', 's' }, 0, new byte[] { (byte) -7,
(byte) -2, (byte) 3 }, 0, 3,
Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
assertEquals(0, bd.getRunStart(0));
assertEquals(1, bd.getRunStart(1));
assertEquals(2, bd.getRunStart(2));
String LTR = "\u0061\u0062";
String RTL = "\u05DC\u05DD";
String newLine = "\n";
String defText = LTR + newLine + RTL + LTR + RTL;
int[][] expectedRuns = { { 0, 3 }, { 3, 5 }, { 5, 7 }, { 7, 9 }, };
Bidi bi = new Bidi(defText, 0);
final int count = bi.getRunCount();
for (int i = 0; i < count; i++) {
assertEquals(expectedRuns[i][0], bi.getRunStart(i));
}
}
@TestTargetNew(
level = TestLevel.PARTIAL_COMPLETE,
notes = "",
method = "Bidi",
args = {java.text.AttributedCharacterIterator.class}
)
public void testBidiConstructor_Iterator() {
AttributedString paragraph = new AttributedString("text");
bd = new Bidi(paragraph.getIterator());
try {
assertTrue(4 == bd.getRunLimit(1));
} catch (Exception e) {
fail("Unexpected exception: " + e);
}
}
}