blob: a9436e2f6a1e4d1db78b3b34d44e6209086238b2 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2001-2007, International Business Machines
* Corporation and others. All Rights Reserved.
*******************************************************************************
*/
package com.ibm.icu.dev.test.bidi;
import com.ibm.icu.text.Bidi;
/**
* Regression test for the UBA implementation.
*
* ported from C by Lina Kemmel, Matitiahu Allouche
*/
public class TestReorder extends BidiTest {
private static final String[] logicalOrder = {
"del(KC)add(K.C.&)",
"del(QDVT) add(BVDL)",
"del(PQ)add(R.S.)T)U.&",
"del(LV)add(L.V.) L.V.&",
"day 0 R DPDHRVR dayabbr",
"day 1 H DPHPDHDA dayabbr",
"day 2 L DPBLENDA dayabbr",
"day 3 J DPJQVM dayabbr",
"day 4 I DPIQNF dayabbr",
"day 5 M DPMEG dayabbr",
"helloDPMEG",
"hello WXYZ"
};
private static final String[] visualOrder = {
"del(CK)add(&.C.K)",
"del(TVDQ) add(LDVB)",
"del(QP)add(&.U(T(.S.R",
"del(VL)add(&.V.L (.V.L",
"day 0 RVRHDPD R dayabbr",
"day 1 ADHDPHPD H dayabbr",
"day 2 ADNELBPD L dayabbr",
"day 3 MVQJPD J dayabbr",
"day 4 FNQIPD I dayabbr",
"day 5 GEMPD M dayabbr",
"helloGEMPD",
"hello ZYXW"
};
private static final String[] visualOrder1 = {
")K.C.&(dda)KC(led",
")BVDL(dda )QDVT(led",
"R.S.(T(U.&(dda)PQ(led",
"L.V.( L.V.&(dda)LV(led",
"rbbayad R DPDHRVR 0 yad",
"rbbayad H DPHPDHDA 1 yad",
"rbbayad L DPBLENDA 2 yad",
"rbbayad J DPJQVM 3 yad",
"rbbayad I DPIQNF 4 yad",
"rbbayad M DPMEG 5 yad",
"DPMEGolleh",
"WXYZ olleh"
};
private static final String[] visualOrder2 = {
"@)@K.C.&@(dda)@KC@(led",
"@)@BVDL@(dda )@QDVT@(led",
"R.S.)T)U.&@(dda)@PQ@(led",
"L.V.) L.V.&@(dda)@LV@(led",
"rbbayad @R DPDHRVR@ 0 yad",
"rbbayad @H DPHPDHDA@ 1 yad",
"rbbayad @L DPBLENDA@ 2 yad",
"rbbayad @J DPJQVM@ 3 yad",
"rbbayad @I DPIQNF@ 4 yad",
"rbbayad @M DPMEG@ 5 yad",
"DPMEGolleh",
"WXYZ@ olleh"
};
private static final String[] visualOrder3 = {
")K.C.&(KC)dda(led",
")BVDL(ddaQDVT) (led",
"R.S.)T)U.&(PQ)dda(led",
"L.V.) L.V.&(LV)dda(led",
"rbbayad DPDHRVR R 0 yad",
"rbbayad DPHPDHDA H 1 yad",
"rbbayad DPBLENDA L 2 yad",
"rbbayad DPJQVM J 3 yad",
"rbbayad DPIQNF I 4 yad",
"rbbayad DPMEG M 5 yad",
"DPMEGolleh",
"WXYZ olleh"
};
private static final String[] visualOrder4 = {
"del(add(CK(.C.K)",
"del( (TVDQadd(LDVB)",
"del(add(QP(.U(T(.S.R",
"del(add(VL(.V.L (.V.L",
"day 0 R RVRHDPD dayabbr",
"day 1 H ADHDPHPD dayabbr",
"day 2 L ADNELBPD dayabbr",
"day 3 J MVQJPD dayabbr",
"day 4 I FNQIPD dayabbr",
"day 5 M GEMPD dayabbr",
"helloGEMPD",
"hello ZYXW"
};
public void testReorder() {
Bidi bidi = new Bidi();
int testNumber;
int nTests = logicalOrder.length;
String src, srcU16, dest = "";
logln("\nEntering TestReorder\n");
for (testNumber = 0; testNumber < nTests; testNumber++) {
logln("Testing L2V #1 for case " + testNumber);
src = logicalOrder[testNumber];
srcU16 = pseudoToU16(src);
try {
bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, null);
} catch (Exception e) {
errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
try {
dest = u16ToPseudo(bidi.writeReordered(Bidi.DO_MIRRORING));
} catch (Exception e) {
errln("Bidi.writeReordered(tests[" + testNumber + "], paraLevel " +
Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
if (!visualOrder[testNumber].equals(dest)) {
assertEquals("Failure #1 in Bidi.writeReordered(), test number " +
testNumber, visualOrder[testNumber], dest, src, null,
"Bidi.DO_MIRRORING", "Bidi.LEVEL_DEFAULT_LTR");
}
checkWhatYouCan(bidi, src, dest);
}
for (testNumber = 0; testNumber < nTests; testNumber++) {
logln("Testing L2V #2 for case " + testNumber);
src = logicalOrder[testNumber];
srcU16 = pseudoToU16(src);
try {
bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, null);
} catch (Exception e) {
errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
try {
dest = u16ToPseudo(bidi.writeReordered(Bidi.DO_MIRRORING +
Bidi.OUTPUT_REVERSE));
} catch (Exception e) {
errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel "
+ Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
assertEquals("Failure #2 in Bidi.writeReordered() at index " +
testNumber, visualOrder1[testNumber], dest,
logicalOrder[testNumber], null,
"DO_MIRRORING + OUTPUT_REVERSE",
"Bidi.LEVEL_DEFAULT_LTR");
}
for (testNumber = 0; testNumber < nTests; testNumber++) {
logln("Testing V2L #3 for case " + testNumber);
src = logicalOrder[testNumber];
srcU16 = pseudoToU16(src);
bidi.setInverse(true);
try {
bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, null);
} catch (Exception e) {
errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
try {
dest = u16ToPseudo(bidi.writeReordered(Bidi.OUTPUT_REVERSE |
Bidi.INSERT_LRM_FOR_NUMERIC));
} catch (Exception e) {
errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel " +
Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
assertEquals("Failure #3 in Bidi.writeReordered(test[" + testNumber +
"])", visualOrder2[testNumber], dest,
logicalOrder[testNumber], null,
"INSERT_LRM_FOR_NUMERIC + OUTPUT_REVERSE",
"Bidi.LEVEL_DEFAULT_LTR");
}
/* Max Explicit level */
for (testNumber = 0; testNumber < nTests; testNumber++) {
logln("Testing V2L #4 for case " + testNumber);
src = logicalOrder[testNumber];
srcU16 = pseudoToU16(src);
byte[] levels = new byte[Bidi.MAX_EXPLICIT_LEVEL];
for (int i = 0; i < 10; i++) {
levels[i] = (byte)(i + 1);
}
try {
bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, levels);
} catch (Exception e) {
errln("Bidi.setPara(tests[" + testNumber +
"], paraLevel = MAX_EXPLICIT_LEVEL = " +
Bidi.MAX_EXPLICIT_LEVEL + " failed.");
}
try {
dest = u16ToPseudo(bidi.writeReordered(Bidi.OUTPUT_REVERSE));
} catch (Exception e) {
errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel " +
Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
assertEquals("Failure #4 in Bidi.writeReordered(test[" + testNumber +
"])", visualOrder3[testNumber], dest,
logicalOrder[testNumber], null,
"OUTPUT_REVERSE", "Bidi.LEVEL_DEFAULT_LTR");
}
for (testNumber = 0; testNumber < nTests; testNumber++) {
logln("Testing V2L #5 for case " + testNumber);
src = logicalOrder[testNumber];
srcU16 = pseudoToU16(src);
byte[] levels = new byte[Bidi.MAX_EXPLICIT_LEVEL];
for (int i = 0; i < 10; i++) {
levels[i] = (byte)(i + 1);
}
try {
bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, levels);
} catch (Exception e) {
errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
Bidi.MAX_EXPLICIT_LEVEL + " failed.");
}
try {
dest = u16ToPseudo(bidi.writeReordered(Bidi.DO_MIRRORING |
Bidi.REMOVE_BIDI_CONTROLS));
} catch (Exception e) {
errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel "
+ Bidi.LEVEL_DEFAULT_LTR + " failed.");
}
assertEquals("Failure #5 in Bidi.writeReordered(test[" + testNumber +
"])", visualOrder4[testNumber], dest,
logicalOrder[testNumber], null,
"DO_MIRRORING + REMOVE_BIDI_CONTROLS",
"Bidi.LEVEL_DEFAULT_LTR");
}
logln("\nExiting TestReorder\n");
}
public static void main(String[] args) {
try {
new TestReorder().run(args);
}
catch (Exception e) {
System.out.println(e);
}
}
}