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.lang.UCharacterDirection;
\r
11 import com.ibm.icu.text.Bidi;
\r
15 * Data and helper methods for Bidi regression tests
\r
17 * Ported from C by Lina Kemmel, Matitiahu Allouche
\r
20 public class TestData {
\r
21 protected static final int L = UCharacterDirection.LEFT_TO_RIGHT;
\r
22 protected static final int R = UCharacterDirection.RIGHT_TO_LEFT;
\r
23 protected static final int EN = UCharacterDirection.EUROPEAN_NUMBER;
\r
24 protected static final int ES = UCharacterDirection.EUROPEAN_NUMBER_SEPARATOR;
\r
25 protected static final int ET = UCharacterDirection.EUROPEAN_NUMBER_TERMINATOR;
\r
26 protected static final int AN = UCharacterDirection.ARABIC_NUMBER;
\r
27 protected static final int CS = UCharacterDirection.COMMON_NUMBER_SEPARATOR;
\r
28 protected static final int B = UCharacterDirection.BLOCK_SEPARATOR;
\r
29 protected static final int S = UCharacterDirection.SEGMENT_SEPARATOR;
\r
30 protected static final int WS = UCharacterDirection.WHITE_SPACE_NEUTRAL;
\r
31 protected static final int ON = UCharacterDirection.OTHER_NEUTRAL;
\r
32 protected static final int LRE = UCharacterDirection.LEFT_TO_RIGHT_EMBEDDING;
\r
33 protected static final int LRO = UCharacterDirection.LEFT_TO_RIGHT_OVERRIDE;
\r
34 protected static final int AL = UCharacterDirection.RIGHT_TO_LEFT_ARABIC;
\r
35 protected static final int RLE = UCharacterDirection.RIGHT_TO_LEFT_EMBEDDING;
\r
36 protected static final int RLO = UCharacterDirection.RIGHT_TO_LEFT_OVERRIDE;
\r
37 protected static final int PDF = UCharacterDirection.POP_DIRECTIONAL_FORMAT;
\r
38 protected static final int NSM = UCharacterDirection.DIR_NON_SPACING_MARK;
\r
39 protected static final int BN = UCharacterDirection.BOUNDARY_NEUTRAL;
\r
40 protected static final int DEF = Bidi.CLASS_DEFAULT;
\r
42 protected static final String[] dirPropNames = {
\r
43 "L", "R", "EN", "ES", "ET", "AN", "CS", "B", "S", "WS", "ON",
\r
44 "LRE", "LRO", "AL", "RLE", "RLO", "PDF", "NSM", "BN"
\r
46 protected static final short[][] testDirProps = {
\r
47 { L, L, WS, L, WS, EN, L, B }, // 0
\r
48 { R, AL, WS, R, AL, WS, R }, // 1
\r
49 { L, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L }, // 2
\r
50 { L, AL, AL, AL, L, AL, AL, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L }, // 3
\r
51 { AL, R, AL, WS, EN, CS, WS, EN, CS, EN, WS, R, R, WS, L, L }, // 4
\r
52 { R, EN, NSM, ET }, // 5
\r
53 { RLE, WS, R, R, R, WS, PDF, WS, B }, // 6
\r
54 { LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE,
\r
55 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE,
\r
56 LRE, LRE, LRE, AN, RLO, NSM, LRE, PDF, RLE, ES, EN, ON }, // 7
\r
57 { LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE,
\r
58 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE,
\r
59 LRE, LRE, LRE, LRE, BN, CS, RLO, S, PDF, EN, LRO, AN, ES }, // 8
\r
60 { S, WS, NSM, RLE, WS, L, L, L, WS, LRO, WS, R, R, R, WS, RLO, WS, L, L,
\r
61 L, WS, LRE, WS, R, R, R, WS, PDF, WS, L, L, L, WS, PDF, WS, AL, AL,
\r
62 AL, WS, PDF, WS, L, L, L, WS, PDF, WS, L, L, L, WS, PDF, ON, PDF,
\r
63 BN, BN, ON, PDF }, // 9
\r
64 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS,
\r
65 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN,
\r
66 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L,
\r
67 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 10
\r
68 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS,
\r
69 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN,
\r
70 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L,
\r
71 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 11
\r
72 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS,
\r
73 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN,
\r
74 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L,
\r
75 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 12
\r
76 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS,
\r
77 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN,
\r
78 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L,
\r
79 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 13
\r
80 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS,
\r
81 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN,
\r
82 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L,
\r
83 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 14
\r
84 { ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S,
\r
85 LRE, LRO, B }, // 15
\r
86 { ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S,
\r
87 LRE, LRO, B }, // 16
\r
88 { RLO, RLO, AL, AL, WS, EN, ES, ON, WS, S, S, PDF, LRO, WS, AL, ET, RLE,
\r
90 { R, L, CS, L }, // 18
\r
91 { L, L, L, WS, L, L, L, WS, L, L, L }, // 19
\r
92 { R, R, R, WS, R, R, R, WS, R, R, R }, // 20
\r
97 protected static final byte[][] testLevels = {
\r
98 { 0, 0, 0, 0, 0, 0, 0, 0 }, // 0
\r
99 { 1, 1, 1, 1, 1, 1, 1 }, // 1
\r
100 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 2
\r
101 { 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 3
\r
102 { 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2 }, // 4
\r
103 { 1, 2, 2, 2 }, // 5
\r
104 { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // 6
\r
105 { 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
\r
106 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 61, 61,
\r
107 61, 61, 61, 61, 61, 61 }, // 7
\r
108 { 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60,
\r
109 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 0,
\r
110 0, 62, 62, 62, 62, 60 }, // 8
\r
111 { 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4,
\r
112 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0,
\r
113 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 9
\r
114 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
\r
115 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1,
\r
116 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
\r
118 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
\r
119 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1,
\r
120 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
\r
122 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2,
\r
123 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 3, 4, 4, 3, 2, 4, 4, 3, 3,
\r
124 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4,
\r
126 { 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6,
\r
127 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 6, 6, 5, 5, 6, 6, 5, 5,
\r
128 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6,
\r
130 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
\r
131 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1,
\r
132 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2,
\r
134 { 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 4, 4, 4, 4, 0, 0, 0, 0 }, // 15
\r
135 { 0, 0, 1, 1, 1, 0 }, // 16
\r
138 { 2, 2, 2, 2, 2, 2, 2, 1 }, // 19
\r
139 { 1, 1, 1, 1, 1, 1, 1, 0 }, // 20
\r
144 protected static final int[][] testVisualMaps = {
\r
145 { 0, 1, 2, 3, 4, 5, 6, 7 }, // 0
\r
146 { 6, 5, 4, 3, 2, 1, 0 }, // 1
\r
147 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, // 2
\r
148 { 0, 3, 2, 1, 4, 6, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 }, // 3
\r
149 { 15, 14, 13, 12, 11, 10, 9, 6, 7, 8, 5, 4, 3, 2, 0, 1 }, // 4
\r
150 { 3, 0, 1, 2 }, // 5
\r
151 { 8, 7, 6, 5, 4, 3, 2, 1, 0 }, // 6
\r
152 { 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
\r
153 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 7, 6, 5, 4, 3,
\r
155 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
\r
156 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
\r
158 { 0, 1, 2, 44, 43, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 31, 30, 29, 28, 27,
\r
159 26, 20, 21, 24, 23, 22, 25, 19, 18, 17, 16, 15, 14, 32, 33, 34, 35,
\r
160 36, 37, 38, 39, 40, 41, 42, 3, 45, 46, 47, 48, 49, 50, 51, 52, 53,
\r
161 54, 55, 56, 57 }, // 9
\r
162 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15,
\r
163 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35,
\r
164 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42,
\r
165 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 10
\r
166 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15,
\r
167 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35,
\r
168 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42,
\r
169 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 11
\r
170 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15,
\r
171 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35,
\r
172 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42,
\r
173 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 12
\r
174 { 69, 68, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 55, 54, 53,
\r
175 52, 51, 50, 49, 42, 43, 44, 45, 46, 47, 48, 41, 40, 39, 38, 37, 36,
\r
176 35, 33, 34, 32, 30, 31, 29, 28, 26, 27, 25, 24, 22, 23, 21, 20, 19,
\r
177 18, 17, 16, 15, 7, 8, 9, 10, 11, 12, 13, 14, 6, 1, 2, 3, 4, 5, 0 }, // 13
\r
178 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15,
\r
179 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35,
\r
180 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42,
\r
181 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 14
\r
182 { 0, 1, 15, 14, 13, 12, 11, 10, 4, 3, 2, 5, 6, 7, 8, 9, 16, 17, 18, 19 }, // 15
\r
183 { 0, 1, 4, 3, 2, 5 }, // 16
\r
186 { 1, 2, 3, 4, 5, 6, 7, 0 }, // 19
\r
187 { 6, 5, 4, 3, 2, 1, 0, 7 }, // 20
\r
192 protected static final byte[] testParaLevels = {
\r
193 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR,
\r
194 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR,
\r
195 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR,
\r
196 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_RTL,
\r
197 2, 5, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR,
\r
198 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.RTL, Bidi.LTR, Bidi.RTL,
\r
199 Bidi.LEVEL_DEFAULT_LTR
\r
202 protected static final byte[] testDirections = {
\r
203 Bidi.LTR, Bidi.RTL, Bidi.LTR, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED,
\r
204 Bidi.RTL, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED,
\r
205 Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.RTL,
\r
206 Bidi.LTR, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.LTR
\r
209 protected static final byte[] testResultLevels = new byte[] {
\r
210 Bidi.LTR, Bidi.RTL, Bidi.LTR, Bidi.LTR, Bidi.RTL, Bidi.RTL, Bidi.RTL,
\r
211 Bidi.LTR, Bidi.LTR, Bidi.LTR, Bidi.LTR, Bidi.LTR, 2, 5, Bidi.LTR,
\r
212 Bidi.LTR, Bidi.LTR, Bidi.RTL, 2, Bidi.RTL, Bidi.LTR, Bidi.RTL, Bidi.LTR
\r
215 protected static final byte[] testLineStarts = {
\r
216 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 13,
\r
220 protected static final byte[] testLineLimits = {
\r
221 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, 14,
\r
225 protected short[] dirProps;
\r
226 protected int lineStart;
\r
227 protected int lineLimit;
\r
228 protected byte direction;
\r
229 protected byte paraLevel;
\r
230 protected byte resultLevel;
\r
231 protected byte[] levels;
\r
232 protected int[] visualMap;
\r
234 private TestData(short[] dirProps, int lineStart, int lineLimit,
\r
235 byte direction, byte paraLevel, byte resultLevel, byte[] levels,
\r
237 this.dirProps = dirProps;
\r
238 this.lineStart = lineStart;
\r
239 this.lineLimit = lineLimit;
\r
240 this.direction = direction;
\r
241 this.paraLevel = paraLevel;
\r
242 this.resultLevel = resultLevel;
\r
243 this.levels = levels;
\r
244 this.visualMap = visualMap;
\r
247 protected static TestData getTestData(int testNumber) {
\r
248 return new TestData(testDirProps[testNumber],
\r
249 testLineStarts[testNumber], testLineLimits[testNumber],
\r
250 testDirections[testNumber], testParaLevels[testNumber],
\r
251 testResultLevels[testNumber], testLevels[testNumber],
\r
252 testVisualMaps[testNumber]);
\r
255 protected static int testCount() {
\r
256 return testDirProps.length;
\r