2 *******************************************************************************
\r
3 * Copyright (C) 2001-2007, International Business Machines
\r
4 * Corporation and others. All Rights Reserved.
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.bidi;
\r
10 import com.ibm.icu.text.Bidi;
\r
14 * Regression test for the UBA implementation.
\r
16 * ported from C by Lina Kemmel, Matitiahu Allouche
\r
19 public class TestReorder extends BidiTest {
\r
21 private static final String[] logicalOrder = {
\r
22 "del(KC)add(K.C.&)",
\r
23 "del(QDVT) add(BVDL)",
\r
24 "del(PQ)add(R.S.)T)U.&",
\r
25 "del(LV)add(L.V.) L.V.&",
\r
26 "day 0 R DPDHRVR dayabbr",
\r
27 "day 1 H DPHPDHDA dayabbr",
\r
28 "day 2 L DPBLENDA dayabbr",
\r
29 "day 3 J DPJQVM dayabbr",
\r
30 "day 4 I DPIQNF dayabbr",
\r
31 "day 5 M DPMEG dayabbr",
\r
36 private static final String[] visualOrder = {
\r
37 "del(CK)add(&.C.K)",
\r
38 "del(TVDQ) add(LDVB)",
\r
39 "del(QP)add(&.U(T(.S.R",
\r
40 "del(VL)add(&.V.L (.V.L",
\r
41 "day 0 RVRHDPD R dayabbr",
\r
42 "day 1 ADHDPHPD H dayabbr",
\r
43 "day 2 ADNELBPD L dayabbr",
\r
44 "day 3 MVQJPD J dayabbr",
\r
45 "day 4 FNQIPD I dayabbr",
\r
46 "day 5 GEMPD M dayabbr",
\r
51 private static final String[] visualOrder1 = {
\r
52 ")K.C.&(dda)KC(led",
\r
53 ")BVDL(dda )QDVT(led",
\r
54 "R.S.(T(U.&(dda)PQ(led",
\r
55 "L.V.( L.V.&(dda)LV(led",
\r
56 "rbbayad R DPDHRVR 0 yad",
\r
57 "rbbayad H DPHPDHDA 1 yad",
\r
58 "rbbayad L DPBLENDA 2 yad",
\r
59 "rbbayad J DPJQVM 3 yad",
\r
60 "rbbayad I DPIQNF 4 yad",
\r
61 "rbbayad M DPMEG 5 yad",
\r
66 private static final String[] visualOrder2 = {
\r
67 "@)@K.C.&@(dda)@KC@(led",
\r
68 "@)@BVDL@(dda )@QDVT@(led",
\r
69 "R.S.)T)U.&@(dda)@PQ@(led",
\r
70 "L.V.) L.V.&@(dda)@LV@(led",
\r
71 "rbbayad @R DPDHRVR@ 0 yad",
\r
72 "rbbayad @H DPHPDHDA@ 1 yad",
\r
73 "rbbayad @L DPBLENDA@ 2 yad",
\r
74 "rbbayad @J DPJQVM@ 3 yad",
\r
75 "rbbayad @I DPIQNF@ 4 yad",
\r
76 "rbbayad @M DPMEG@ 5 yad",
\r
81 private static final String[] visualOrder3 = {
\r
82 ")K.C.&(KC)dda(led",
\r
83 ")BVDL(ddaQDVT) (led",
\r
84 "R.S.)T)U.&(PQ)dda(led",
\r
85 "L.V.) L.V.&(LV)dda(led",
\r
86 "rbbayad DPDHRVR R 0 yad",
\r
87 "rbbayad DPHPDHDA H 1 yad",
\r
88 "rbbayad DPBLENDA L 2 yad",
\r
89 "rbbayad DPJQVM J 3 yad",
\r
90 "rbbayad DPIQNF I 4 yad",
\r
91 "rbbayad DPMEG M 5 yad",
\r
96 private static final String[] visualOrder4 = {
\r
98 "del( (TVDQadd(LDVB)",
\r
99 "del(add(QP(.U(T(.S.R",
\r
100 "del(add(VL(.V.L (.V.L",
\r
101 "day 0 R RVRHDPD dayabbr",
\r
102 "day 1 H ADHDPHPD dayabbr",
\r
103 "day 2 L ADNELBPD dayabbr",
\r
104 "day 3 J MVQJPD dayabbr",
\r
105 "day 4 I FNQIPD dayabbr",
\r
106 "day 5 M GEMPD dayabbr",
\r
111 public void testReorder() {
\r
112 Bidi bidi = new Bidi();
\r
114 int nTests = logicalOrder.length;
\r
115 String src, srcU16, dest = "";
\r
117 logln("\nEntering TestReorder\n");
\r
119 for (testNumber = 0; testNumber < nTests; testNumber++) {
\r
120 logln("Testing L2V #1 for case " + testNumber);
\r
121 src = logicalOrder[testNumber];
\r
122 srcU16 = pseudoToU16(src);
\r
124 bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, null);
\r
125 } catch (Exception e) {
\r
126 errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
\r
127 Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
130 dest = u16ToPseudo(bidi.writeReordered(Bidi.DO_MIRRORING));
\r
131 } catch (Exception e) {
\r
132 errln("Bidi.writeReordered(tests[" + testNumber + "], paraLevel " +
\r
133 Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
135 if (!visualOrder[testNumber].equals(dest)) {
\r
136 assertEquals("Failure #1 in Bidi.writeReordered(), test number " +
\r
137 testNumber, visualOrder[testNumber], dest, src, null,
\r
138 "Bidi.DO_MIRRORING", "Bidi.LEVEL_DEFAULT_LTR");
\r
140 checkWhatYouCan(bidi, src, dest);
\r
143 for (testNumber = 0; testNumber < nTests; testNumber++) {
\r
144 logln("Testing L2V #2 for case " + testNumber);
\r
145 src = logicalOrder[testNumber];
\r
146 srcU16 = pseudoToU16(src);
\r
148 bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, null);
\r
149 } catch (Exception e) {
\r
150 errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
\r
151 Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
154 dest = u16ToPseudo(bidi.writeReordered(Bidi.DO_MIRRORING +
\r
155 Bidi.OUTPUT_REVERSE));
\r
156 } catch (Exception e) {
\r
157 errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel "
\r
158 + Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
160 assertEquals("Failure #2 in Bidi.writeReordered() at index " +
\r
161 testNumber, visualOrder1[testNumber], dest,
\r
162 logicalOrder[testNumber], null,
\r
163 "DO_MIRRORING + OUTPUT_REVERSE",
\r
164 "Bidi.LEVEL_DEFAULT_LTR");
\r
167 for (testNumber = 0; testNumber < nTests; testNumber++) {
\r
168 logln("Testing V2L #3 for case " + testNumber);
\r
169 src = logicalOrder[testNumber];
\r
170 srcU16 = pseudoToU16(src);
\r
171 bidi.setInverse(true);
\r
173 bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, null);
\r
174 } catch (Exception e) {
\r
175 errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
\r
176 Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
179 dest = u16ToPseudo(bidi.writeReordered(Bidi.OUTPUT_REVERSE |
\r
180 Bidi.INSERT_LRM_FOR_NUMERIC));
\r
181 } catch (Exception e) {
\r
182 errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel " +
\r
183 Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
185 assertEquals("Failure #3 in Bidi.writeReordered(test[" + testNumber +
\r
186 "])", visualOrder2[testNumber], dest,
\r
187 logicalOrder[testNumber], null,
\r
188 "INSERT_LRM_FOR_NUMERIC + OUTPUT_REVERSE",
\r
189 "Bidi.LEVEL_DEFAULT_LTR");
\r
192 /* Max Explicit level */
\r
193 for (testNumber = 0; testNumber < nTests; testNumber++) {
\r
194 logln("Testing V2L #4 for case " + testNumber);
\r
195 src = logicalOrder[testNumber];
\r
196 srcU16 = pseudoToU16(src);
\r
197 byte[] levels = new byte[Bidi.MAX_EXPLICIT_LEVEL];
\r
198 for (int i = 0; i < 10; i++) {
\r
199 levels[i] = (byte)(i + 1);
\r
202 bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, levels);
\r
203 } catch (Exception e) {
\r
204 errln("Bidi.setPara(tests[" + testNumber +
\r
205 "], paraLevel = MAX_EXPLICIT_LEVEL = " +
\r
206 Bidi.MAX_EXPLICIT_LEVEL + " failed.");
\r
209 dest = u16ToPseudo(bidi.writeReordered(Bidi.OUTPUT_REVERSE));
\r
210 } catch (Exception e) {
\r
211 errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel " +
\r
212 Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
214 assertEquals("Failure #4 in Bidi.writeReordered(test[" + testNumber +
\r
215 "])", visualOrder3[testNumber], dest,
\r
216 logicalOrder[testNumber], null,
\r
217 "OUTPUT_REVERSE", "Bidi.LEVEL_DEFAULT_LTR");
\r
220 for (testNumber = 0; testNumber < nTests; testNumber++) {
\r
221 logln("Testing V2L #5 for case " + testNumber);
\r
222 src = logicalOrder[testNumber];
\r
223 srcU16 = pseudoToU16(src);
\r
224 byte[] levels = new byte[Bidi.MAX_EXPLICIT_LEVEL];
\r
225 for (int i = 0; i < 10; i++) {
\r
226 levels[i] = (byte)(i + 1);
\r
229 bidi.setPara(srcU16, Bidi.LEVEL_DEFAULT_LTR, levels);
\r
230 } catch (Exception e) {
\r
231 errln("Bidi.setPara(tests[" + testNumber + "], paraLevel " +
\r
232 Bidi.MAX_EXPLICIT_LEVEL + " failed.");
\r
235 dest = u16ToPseudo(bidi.writeReordered(Bidi.DO_MIRRORING |
\r
236 Bidi.REMOVE_BIDI_CONTROLS));
\r
237 } catch (Exception e) {
\r
238 errln("Bidi.writeReordered(test[" + testNumber + "], paraLevel "
\r
239 + Bidi.LEVEL_DEFAULT_LTR + " failed.");
\r
241 assertEquals("Failure #5 in Bidi.writeReordered(test[" + testNumber +
\r
242 "])", visualOrder4[testNumber], dest,
\r
243 logicalOrder[testNumber], null,
\r
244 "DO_MIRRORING + REMOVE_BIDI_CONTROLS",
\r
245 "Bidi.LEVEL_DEFAULT_LTR");
\r
248 logln("\nExiting TestReorder\n");
\r
252 public static void main(String[] args) {
\r
254 new TestReorder().run(args);
\r
256 catch (Exception e) {
\r
257 System.out.println(e);
\r