1/* 2******************************************************************************* 3* Copyright (C) 2001-2013, International Business Machines 4* Corporation and others. All Rights Reserved. 5******************************************************************************* 6*/ 7 8package com.ibm.icu.dev.test.bidi; 9 10import com.ibm.icu.lang.UCharacterDirection; 11import com.ibm.icu.text.Bidi; 12 13 14/** 15 * Data and helper methods for Bidi regression tests 16 * 17 * Ported from C by Lina Kemmel, Matitiahu Allouche 18 * 19 */ 20public class TestData { 21 protected static final int L = UCharacterDirection.LEFT_TO_RIGHT; 22 protected static final int R = UCharacterDirection.RIGHT_TO_LEFT; 23 protected static final int EN = UCharacterDirection.EUROPEAN_NUMBER; 24 protected static final int ES = UCharacterDirection.EUROPEAN_NUMBER_SEPARATOR; 25 protected static final int ET = UCharacterDirection.EUROPEAN_NUMBER_TERMINATOR; 26 protected static final int AN = UCharacterDirection.ARABIC_NUMBER; 27 protected static final int CS = UCharacterDirection.COMMON_NUMBER_SEPARATOR; 28 protected static final int B = UCharacterDirection.BLOCK_SEPARATOR; 29 protected static final int S = UCharacterDirection.SEGMENT_SEPARATOR; 30 protected static final int WS = UCharacterDirection.WHITE_SPACE_NEUTRAL; 31 protected static final int ON = UCharacterDirection.OTHER_NEUTRAL; 32 protected static final int LRE = UCharacterDirection.LEFT_TO_RIGHT_EMBEDDING; 33 protected static final int LRO = UCharacterDirection.LEFT_TO_RIGHT_OVERRIDE; 34 protected static final int AL = UCharacterDirection.RIGHT_TO_LEFT_ARABIC; 35 protected static final int RLE = UCharacterDirection.RIGHT_TO_LEFT_EMBEDDING; 36 protected static final int RLO = UCharacterDirection.RIGHT_TO_LEFT_OVERRIDE; 37 protected static final int PDF = UCharacterDirection.POP_DIRECTIONAL_FORMAT; 38 protected static final int NSM = UCharacterDirection.DIR_NON_SPACING_MARK; 39 protected static final int BN = UCharacterDirection.BOUNDARY_NEUTRAL; 40 protected static final int FSI = UCharacterDirection.FIRST_STRONG_ISOLATE; 41 protected static final int LRI = UCharacterDirection.LEFT_TO_RIGHT_ISOLATE; 42 protected static final int RLI = UCharacterDirection.RIGHT_TO_LEFT_ISOLATE; 43 protected static final int PDI = UCharacterDirection.POP_DIRECTIONAL_ISOLATE; 44 protected static final int DEF = Bidi.CLASS_DEFAULT; 45 46 protected static final String[] dirPropNames = { 47 "L", "R", "EN", "ES", "ET", "AN", "CS", "B", "S", "WS", "ON", 48 "LRE", "LRO", "AL", "RLE", "RLO", "PDF", "NSM", "BN", 49 "FSI", "LRI", "RLI", "PDI" /* new in Unicode 6.3/ICU 52 */ 50 }; 51 protected static final short[][] testDirProps = { 52 { L, L, WS, L, WS, EN, L, B }, // 0 53 { R, AL, WS, R, AL, WS, R }, // 1 54 { L, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L }, // 2 55 { L, AL, AL, AL, L, AL, AL, L, WS, EN, CS, WS, EN, CS, EN, WS, L, L }, // 3 56 { AL, R, AL, WS, EN, CS, WS, EN, CS, EN, WS, R, R, WS, L, L }, // 4 57 { R, EN, NSM, ET }, // 5 58 { RLE, WS, R, R, R, WS, PDF, WS, B }, // 6 59 { 60 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */ 61 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */ 62 AN, RLO, NSM, LRE, PDF, RLE, ES, EN, ON /* 9 entries */ 63 }, //7 64 { 65 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */ 66 LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, LRE, /* 15 entries */ 67 LRE, BN, CS, RLO, S, PDF, EN, LRO, AN, ES /* 10 entries */ 68 }, // 8 69 { S, WS, NSM, RLE, WS, L, L, L, WS, LRO, WS, R, R, R, WS, RLO, WS, L, L, 70 L, WS, LRE, WS, R, R, R, WS, PDF, WS, L, L, L, WS, PDF, WS, AL, AL, 71 AL, WS, PDF, WS, L, L, L, WS, PDF, WS, L, L, L, WS, PDF, ON, PDF, 72 BN, BN, ON, PDF }, // 9 73 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS, 74 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN, 75 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, 76 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 10 77 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS, 78 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN, 79 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, 80 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 11 81 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS, 82 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN, 83 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, 84 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 12 85 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS, 86 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN, 87 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, 88 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 13 89 { NSM, WS, L, L, L, L, L, L, L, WS, L, L, L, L, WS, R, R, R, R, R, WS, 90 L, L, L, L, L, L, L, WS, WS, AL, AL, AL, AL, WS, EN, EN, ES, EN, 91 EN, CS, S, EN, EN, CS, WS, EN, EN, WS, AL, AL, AL, AL, AL, B, L, L, 92 L, L, L, L, L, L, WS, AN, AN, CS, AN, AN, WS }, // 14 93 { ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S, 94 LRE, LRO, B }, // 15 95 { ON, L, RLO, CS, R, WS, AN, AN, PDF, LRE, R, L, LRO, WS, BN, ON, S, 96 LRE, LRO, B }, // 16 97 { RLO, RLO, AL, AL, WS, EN, ES, ON, WS, S, S, PDF, LRO, WS, AL, ET, RLE, 98 ON, EN, B }, // 17 99 { R, L, CS, L }, // 18 100 { L, L, L, WS, L, L, L, WS, L, L, L }, // 19 101 { R, R, R, WS, R, R, R, WS, R, R, R }, // 20 102 { L }, // 21 103 null // 22 104 }; 105 106 protected static final byte[][] testLevels = { 107 { 0, 0, 0, 0, 0, 0, 0, 0 }, // 0 108 { 1, 1, 1, 1, 1, 1, 1 }, // 1 109 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 2 110 { 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 3 111 { 1, 1, 1, 1, 2, 1, 1, 2, 2, 2, 1, 1, 1, 1, 2, 2 }, // 4 112 { 1, 2, 2, 2 }, // 5 113 { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, // 6 114 { 115 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, /* 15 entries */ 116 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, /* 15 entries */ 117 126, 125, 125, 125, 125, 125, 125, 125, 125 /* 9 entries */ 118 }, // 7 119 { 120 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, /* 15 entries */ 121 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, 124, /* 15 entries */ 122 124, 124, 124, 64, 64, 124, 124, 126, 126, 124 /* 10 entries */ 123 }, // 8 124 { 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 125 5, 5, 5, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 126 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // 9 127 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 128 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 129 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 130 0 }, // 10 131 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 132 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 133 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 134 0 }, // 11 135 { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 2, 2, 2, 136 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 3, 4, 4, 3, 2, 4, 4, 3, 3, 137 4, 4, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 138 2 }, // 12 139 { 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 140 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 6, 6, 5, 5, 6, 6, 5, 5, 141 6, 6, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6, 142 5 }, // 13 143 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 144 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 1, 0, 2, 2, 1, 1, 145 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 146 0 }, // 14 147 { 0, 0, 1, 1, 1, 1, 1, 1, 3, 3, 3, 2, 4, 4, 4, 4, 0, 0, 0, 0 }, // 15 148 { 0, 0, 1, 1, 1, 0 }, // 16 149 { 1 }, // 17 150 { 2 }, // 18 151 { 2, 2, 2, 2, 2, 2, 2, 1 }, // 19 152 { 1, 1, 1, 1, 1, 1, 1, 0 }, // 20 153 { 2 }, // 21 154 null // 22 155 }; 156 157 protected static final int[][] testVisualMaps = { 158 { 0, 1, 2, 3, 4, 5, 6, 7 }, // 0 159 { 6, 5, 4, 3, 2, 1, 0 }, // 1 160 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }, // 2 161 { 0, 3, 2, 1, 4, 6, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17 }, // 3 162 { 15, 14, 13, 12, 11, 10, 9, 6, 7, 8, 5, 4, 3, 2, 0, 1 }, // 4 163 { 3, 0, 1, 2 }, // 5 164 { 8, 7, 6, 5, 4, 3, 2, 1, 0 }, // 6 165 { 166 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, /* 15 entries */ 167 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, /* 15 entries */ 168 38, 7, 6, 5, 4, 3, 2, 1, 0 /* 9 entries */ 169 }, // 7 170 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 171 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 172 37, 38, 39 }, // 8 173 { 0, 1, 2, 44, 43, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 31, 30, 29, 28, 27, 174 26, 20, 21, 24, 23, 22, 25, 19, 18, 17, 16, 15, 14, 32, 33, 34, 35, 175 36, 37, 38, 39, 40, 41, 42, 3, 45, 46, 47, 48, 49, 50, 51, 52, 53, 176 54, 55, 56, 57 }, // 9 177 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 178 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 179 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 180 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 10 181 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 182 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 183 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 184 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 11 185 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 186 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 187 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 188 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 12 189 { 69, 68, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 55, 54, 53, 190 52, 51, 50, 49, 42, 43, 44, 45, 46, 47, 48, 41, 40, 39, 38, 37, 36, 191 35, 33, 34, 32, 30, 31, 29, 28, 26, 27, 25, 24, 22, 23, 21, 20, 19, 192 18, 17, 16, 15, 7, 8, 9, 10, 11, 12, 13, 14, 6, 1, 2, 3, 4, 5, 0 }, // 13 193 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 19, 18, 17, 16, 15, 194 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 40, 39, 38, 37, 36, 34, 35, 195 33, 31, 32, 30, 41, 52, 53, 51, 50, 48, 49, 47, 46, 45, 44, 43, 42, 196 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69 }, // 14 197 { 0, 1, 15, 14, 13, 12, 11, 10, 4, 3, 2, 5, 6, 7, 8, 9, 16, 17, 18, 19 }, // 15 198 { 0, 1, 4, 3, 2, 5 }, // 16 199 { 0 }, // 17 200 { 0 }, // 18 201 { 1, 2, 3, 4, 5, 6, 7, 0 }, // 19 202 { 6, 5, 4, 3, 2, 1, 0, 7 }, // 20 203 { 0 }, // 21 204 null // 22 205 }; 206 207 protected static final byte[] testParaLevels = { 208 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, 209 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, 210 Bidi.LEVEL_DEFAULT_LTR, 64, 64, 211 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_RTL, 212 2, 5, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, 213 Bidi.LEVEL_DEFAULT_LTR, Bidi.LEVEL_DEFAULT_LTR, Bidi.RTL, Bidi.LTR, Bidi.RTL, 214 Bidi.LEVEL_DEFAULT_LTR 215 }; 216 217 protected static final byte[] testDirections = { 218 Bidi.LTR, Bidi.RTL, Bidi.LTR, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, 219 Bidi.RTL, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, 220 Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.RTL, 221 Bidi.LTR, Bidi.MIXED, Bidi.MIXED, Bidi.MIXED, Bidi.LTR 222 }; 223 224 protected static final byte[] testResultLevels = new byte[] { 225 Bidi.LTR, Bidi.RTL, Bidi.LTR, Bidi.LTR, Bidi.RTL, Bidi.RTL, Bidi.RTL, 226 64, 64 , Bidi.LTR, Bidi.LTR, Bidi.LTR, 2, 5, Bidi.LTR, 227 Bidi.LTR, Bidi.LTR, Bidi.RTL, 2, Bidi.RTL, Bidi.LTR, Bidi.RTL, Bidi.LTR 228 }; 229 230 protected static final byte[] testLineStarts = { 231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 13, 232 2, 0, 0, -1, -1 233 }; 234 235 protected static final byte[] testLineLimits = { 236 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, 14, 237 3, 8, 8, -1, -1 238 }; 239 240 protected short[] dirProps; 241 protected int lineStart; 242 protected int lineLimit; 243 protected byte direction; 244 protected byte paraLevel; 245 protected byte resultLevel; 246 protected byte[] levels; 247 protected int[] visualMap; 248 249 private TestData(short[] dirProps, int lineStart, int lineLimit, 250 byte direction, byte paraLevel, byte resultLevel, byte[] levels, 251 int[] visualMap) { 252 this.dirProps = dirProps; 253 this.lineStart = lineStart; 254 this.lineLimit = lineLimit; 255 this.direction = direction; 256 this.paraLevel = paraLevel; 257 this.resultLevel = resultLevel; 258 this.levels = levels; 259 this.visualMap = visualMap; 260 } 261 262 protected static TestData getTestData(int testNumber) { 263 return new TestData(testDirProps[testNumber], 264 testLineStarts[testNumber], testLineLimits[testNumber], 265 testDirections[testNumber], testParaLevels[testNumber], 266 testResultLevels[testNumber], testLevels[testNumber], 267 testVisualMaps[testNumber]); 268 } 269 270 protected static int testCount() { 271 return testDirProps.length; 272 } 273} 274