2 *******************************************************************************
\r
3 * Copyright (C) 2001-2010, International Business Machines
\r
4 * Corporation and others. All Rights Reserved.
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.shaping;
\r
10 import java.util.MissingResourceException;
\r
12 import com.ibm.icu.dev.test.TestFmwk;
\r
13 import com.ibm.icu.text.ArabicShaping;
\r
14 import com.ibm.icu.text.ArabicShapingException;
\r
17 * Regression test for Arabic shaping.
\r
19 public class ArabicShapingRegTest extends TestFmwk {
\r
21 /* constants copied from ArabicShaping for convenience */
\r
23 public static final int LENGTH_GROW_SHRINK = 0;
\r
24 public static final int LENGTH_FIXED_SPACES_NEAR = 1;
\r
25 public static final int LENGTH_FIXED_SPACES_AT_END = 2;
\r
26 public static final int LENGTH_FIXED_SPACES_AT_BEGINNING = 3;
\r
28 public static final int TEXT_DIRECTION_LOGICAL = 0;
\r
29 public static final int TEXT_DIRECTION_VISUAL_LTR = 4;
\r
31 public static final int LETTERS_NOOP = 0;
\r
32 public static final int LETTERS_SHAPE = 8;
\r
33 public static final int LETTERS_SHAPE_TASHKEEL_ISOLATED = 0x18;
\r
34 public static final int LETTERS_UNSHAPE = 0x10;
\r
36 public static final int DIGITS_NOOP = 0;
\r
37 public static final int DIGITS_EN2AN = 0x20;
\r
38 public static final int DIGITS_AN2EN = 0x40;
\r
39 public static final int DIGITS_EN2AN_INIT_LR = 0x60;
\r
40 public static final int DIGITS_EN2AN_INIT_AL = 0x80;
\r
41 // private static final int DIGITS_RESERVED = 0xa0;
\r
43 public static final int DIGIT_TYPE_AN = 0;
\r
44 public static final int DIGIT_TYPE_AN_EXTENDED = 0x100;
\r
46 public static class TestData {
\r
48 public String source;
\r
50 public String result;
\r
54 public static final int STANDARD = 0;
\r
55 public static final int PREFLIGHT = 1;
\r
56 public static final int ERROR = 2;
\r
58 public static TestData standard(String source, int flags, String result) {
\r
59 return new TestData(STANDARD, source, flags, result, 0, null);
\r
62 public static TestData preflight(String source, int flags, int length) {
\r
63 return new TestData(PREFLIGHT, source, flags, null, length, null);
\r
66 public static TestData error(String source, int flags, Class error) {
\r
67 return new TestData(ERROR, source, flags, null, 0, error);
\r
70 private TestData(int type, String source, int flags, String result, int length, Class error) {
\r
72 this.source = source;
\r
74 this.result = result;
\r
75 this.length = length;
\r
79 private static final String[] typenames = { "standard", "preflight", "error" };
\r
81 public String toString() {
\r
82 StringBuffer buf = new StringBuffer(super.toString());
\r
84 buf.append(typenames[type]);
\r
86 if (source == null) {
\r
90 buf.append(escapedString(source));
\r
94 buf.append(Integer.toHexString(flags));
\r
96 if (result == null) {
\r
100 buf.append(escapedString(result));
\r
104 buf.append(length);
\r
108 return buf.toString();
\r
112 private static final String lamAlefSpecialVLTR =
\r
113 "\u0020\u0646\u0622\u0644\u0627\u0020" +
\r
114 "\u0646\u0623\u064E\u0644\u0627\u0020" +
\r
115 "\u0646\u0627\u0670\u0644\u0627\u0020" +
\r
116 "\u0646\u0622\u0653\u0644\u0627\u0020" +
\r
117 "\u0646\u0625\u0655\u0644\u0627\u0020" +
\r
118 "\u0646\u0622\u0654\u0644\u0627\u0020" +
\r
121 private static final String tashkeelSpecialVLTR =
\r
122 "\u064A\u0628\u0631\u0639\u0020" +
\r
123 "\u064A\u0628\u0651\u0631\u064E\u0639\u0020" +
\r
124 "\u064C\u064A\u0628\u0631\u064F\u0639\u0020" +
\r
125 "\u0628\u0670\u0631\u0670\u0639\u0020" +
\r
126 "\u0628\u0653\u0631\u0653\u0639\u0020" +
\r
127 "\u0628\u0654\u0631\u0654\u0639\u0020" +
\r
128 "\u0628\u0655\u0631\u0655\u0639\u0020";
\r
130 private static final String logicalUnshape =
\r
131 "\u0020\u0020\u0020\uFE8D\uFEF5\u0020\uFEE5\u0020\uFE8D\uFEF7\u0020" +
\r
132 "\uFED7\uFEFC\u0020\uFEE1\u0020\uFE8D\uFEDF\uFECC\uFEAE\uFE91\uFEF4" +
\r
133 "\uFE94\u0020\uFE8D\uFEDF\uFEA4\uFEAE\uFE93\u0020\u0020\u0020\u0020";
\r
135 private static final String numSource =
\r
136 "\u0031" + /* en:1 */
\r
137 "\u0627" + /* arabic:alef */
\r
138 "\u0032" + /* en:2 */
\r
139 "\u06f3" + /* an:3 */
\r
140 "\u0061" + /* latin:a */
\r
141 "\u0034"; /* en:4 */
\r
143 private static final TestData[] standardTests = {
\r
144 /* lam alef special visual ltr */
\r
145 TestData.standard(lamAlefSpecialVLTR,
\r
146 LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
\r
147 "\u0020\ufee5\u0020\ufef5\ufe8d\u0020" +
\r
148 "\ufee5\u0020\ufe76\ufef7\ufe8d\u0020" +
\r
149 "\ufee5\u0020\u0670\ufefb\ufe8d\u0020" +
\r
150 "\ufee5\u0020\u0653\ufef5\ufe8d\u0020" +
\r
151 "\ufee5\u0020\u0655\ufef9\ufe8d\u0020" +
\r
152 "\ufee5\u0020\u0654\ufef5\ufe8d\u0020" +
\r
154 TestData.standard(lamAlefSpecialVLTR,
\r
155 LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_END,
\r
156 "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
\r
157 "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
\r
158 "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
\r
159 "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
\r
160 "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
\r
161 "\ufefc\ufecb\u0020\u0020\u0020\u0020" +
\r
163 TestData.standard(lamAlefSpecialVLTR,
\r
164 LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_BEGINNING,
\r
165 "\u0020\u0020\u0020\u0020\u0020\u0020" +
\r
166 "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
\r
167 "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
\r
168 "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
\r
169 "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
\r
170 "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
\r
172 TestData.standard(lamAlefSpecialVLTR,
\r
173 LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_GROW_SHRINK,
\r
174 "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
\r
175 "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
\r
176 "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
\r
177 "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
\r
178 "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
\r
182 TestData.standard(lamAlefSpecialVLTR,
\r
183 LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
\r
184 "\u0020\ufee5\u0020\ufef5\ufe8d\u0020" +
\r
185 "\ufee5\u0020\ufe76\ufef7\ufe8d\u0020" +
\r
186 "\ufee5\u0020\u0670\ufefb\ufe8d\u0020" +
\r
187 "\ufee5\u0020\u0653\ufef5\ufe8d\u0020" +
\r
188 "\ufee5\u0020\u0655\ufef9\ufe8d\u0020" +
\r
189 "\ufee5\u0020\u0654\ufef5\ufe8d\u0020" +
\r
191 TestData.standard(lamAlefSpecialVLTR,
\r
192 LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_END,
\r
193 "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
\r
194 "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
\r
195 "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
\r
196 "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
\r
197 "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
\r
198 "\ufefc\ufecb\u0020\u0020\u0020\u0020" +
\r
200 TestData.standard(lamAlefSpecialVLTR,
\r
201 LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_BEGINNING,
\r
202 "\u0020\u0020\u0020\u0020\u0020\u0020" +
\r
203 "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
\r
204 "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
\r
205 "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
\r
206 "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
\r
207 "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
\r
209 TestData.standard(lamAlefSpecialVLTR,
\r
210 LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_GROW_SHRINK,
\r
211 "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" +
\r
212 "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" +
\r
213 "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" +
\r
214 "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" +
\r
215 "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" +
\r
218 /* tashkeel special visual ltr */
\r
219 TestData.standard(tashkeelSpecialVLTR,
\r
220 LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
\r
221 "\ufef2\ufe91\ufeae\ufecb\u0020" +
\r
222 "\ufef2\ufe91\ufe7c\ufeae\ufe77\ufecb\u0020" +
\r
223 "\ufe72\ufef2\ufe91\ufeae\ufe79\ufecb\u0020" +
\r
224 "\ufe8f\u0670\ufeae\u0670\ufecb\u0020" +
\r
225 "\ufe8f\u0653\ufeae\u0653\ufecb\u0020" +
\r
226 "\ufe8f\u0654\ufeae\u0654\ufecb\u0020" +
\r
227 "\ufe8f\u0655\ufeae\u0655\ufecb\u0020"),
\r
229 TestData.standard(tashkeelSpecialVLTR,
\r
230 LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR,
\r
231 "\ufef2\ufe91\ufeae\ufecb\u0020" +
\r
232 "\ufef2\ufe91\ufe7c\ufeae\ufe76\ufecb\u0020" +
\r
233 "\ufe72\ufef2\ufe91\ufeae\ufe78\ufecb\u0020" +
\r
234 "\ufe8f\u0670\ufeae\u0670\ufecb\u0020" +
\r
235 "\ufe8f\u0653\ufeae\u0653\ufecb\u0020" +
\r
236 "\ufe8f\u0654\ufeae\u0654\ufecb\u0020" +
\r
237 "\ufe8f\u0655\ufeae\u0655\ufecb\u0020"),
\r
239 /* logical unshape */
\r
240 TestData.standard(logicalUnshape,
\r
241 LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_NEAR,
\r
242 "\u0020\u0020\u0020\u0627\u0644\u0622\u0646\u0020\u0627\u0644\u0623\u0642\u0644\u0627" +
\r
243 "\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627\u0644\u062d\u0631" +
\r
244 "\u0629\u0020\u0020\u0020\u0020"),
\r
245 TestData.standard(logicalUnshape,
\r
246 LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_END,
\r
247 "\u0020\u0020\u0020\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642" +
\r
248 "\u0644\u0627\u0020\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627" +
\r
249 "\u0644\u062d\u0631\u0629\u0020"),
\r
250 TestData.standard(logicalUnshape,
\r
251 LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_BEGINNING,
\r
252 "\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642\u0644\u0627\u0020" +
\r
253 "\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627\u0644\u062d\u0631" +
\r
254 "\u0629\u0020\u0020\u0020\u0020"),
\r
255 TestData.standard(logicalUnshape,
\r
256 LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_GROW_SHRINK,
\r
257 "\u0020\u0020\u0020\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642" +
\r
258 "\u0644\u0627\u0020\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627" +
\r
259 "\u0644\u062d\u0631\u0629\u0020\u0020\u0020\u0020"),
\r
262 TestData.standard(numSource,
\r
263 DIGITS_EN2AN | DIGIT_TYPE_AN,
\r
264 "\u0661\u0627\u0662\u06f3\u0061\u0664"),
\r
265 TestData.standard(numSource,
\r
266 DIGITS_AN2EN | DIGIT_TYPE_AN_EXTENDED,
\r
267 "\u0031\u0627\u0032\u0033\u0061\u0034"),
\r
268 TestData.standard(numSource,
\r
269 DIGITS_EN2AN_INIT_LR | DIGIT_TYPE_AN,
\r
270 "\u0031\u0627\u0662\u06f3\u0061\u0034"),
\r
271 TestData.standard(numSource,
\r
272 DIGITS_EN2AN_INIT_AL | DIGIT_TYPE_AN_EXTENDED,
\r
273 "\u06f1\u0627\u06f2\u06f3\u0061\u0034"),
\r
274 TestData.standard(numSource,
\r
275 DIGITS_EN2AN_INIT_LR | DIGIT_TYPE_AN | TEXT_DIRECTION_VISUAL_LTR,
\r
276 "\u0661\u0627\u0032\u06f3\u0061\u0034"),
\r
277 TestData.standard(numSource,
\r
278 DIGITS_EN2AN_INIT_AL | DIGIT_TYPE_AN_EXTENDED | TEXT_DIRECTION_VISUAL_LTR,
\r
279 "\u06f1\u0627\u0032\u06f3\u0061\u06f4"),
\r
282 TestData.standard(numSource,
\r
287 private static final TestData[] preflightTests = {
\r
289 TestData.preflight("\u0644\u0627",
\r
290 LETTERS_SHAPE | LENGTH_GROW_SHRINK,
\r
293 TestData.preflight("\u0644\u0627\u0031",
\r
294 DIGITS_EN2AN | DIGIT_TYPE_AN_EXTENDED | LENGTH_GROW_SHRINK,
\r
297 TestData.preflight("\u0644\u0644",
\r
298 LETTERS_SHAPE | LENGTH_GROW_SHRINK,
\r
301 TestData.preflight("\ufef7",
\r
302 LETTERS_UNSHAPE | LENGTH_GROW_SHRINK,
\r
306 private static final TestData[] errorTests = {
\r
308 TestData.error("\u0020\ufef7\u0644\u0020",
\r
309 LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_NEAR,
\r
310 ArabicShapingException.class),
\r
312 TestData.error("\u0020\ufef7",
\r
313 LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_END,
\r
314 ArabicShapingException.class),
\r
316 TestData.error("\ufef7\u0020",
\r
317 LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_BEGINNING,
\r
318 ArabicShapingException.class),
\r
321 TestData.error("\ufef7",
\r
323 IllegalArgumentException.class),
\r
325 TestData.error("\ufef7",
\r
326 LETTERS_UNSHAPE | LENGTH_GROW_SHRINK,
\r
327 ArabicShapingException.class),
\r
329 TestData.error(null,
\r
330 LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_END,
\r
331 IllegalArgumentException.class),
\r
334 public void TestStandard() {
\r
335 for (int i = 0; i < standardTests.length; ++i) {
\r
336 TestData test = standardTests[i];
\r
338 Exception ex = null;
\r
339 String result = null;
\r
340 ArabicShaping shaper = null;
\r
343 shaper = new ArabicShaping(test.flags);
\r
344 result = shaper.shape(test.source);
\r
346 catch(MissingResourceException e){
\r
349 catch (IllegalStateException ie){
\r
350 warnln("IllegalStateException: "+ie.toString());
\r
353 catch (Exception e) {
\r
357 if (!test.result.equals(result)) {
\r
358 reportTestFailure(i, test, shaper, result, ex);
\r
363 public void TestPreflight() {
\r
364 for (int i = 0; i < preflightTests.length; ++i) {
\r
365 TestData test = preflightTests[i];
\r
367 Exception ex = null;
\r
370 ArabicShaping shaper = null;
\r
372 if (test.source != null) {
\r
373 src = test.source.toCharArray();
\r
377 shaper = new ArabicShaping(test.flags);
\r
378 len = shaper.shape(src, 0, src.length, null, 0, 0);
\r
380 catch (Exception e) {
\r
384 if (test.length != len) {
\r
385 reportTestFailure(i, test, shaper, test.source, ex);
\r
390 public void TestError() {
\r
391 for (int i = 0; i < errorTests.length; ++i) {
\r
392 TestData test = errorTests[i];
\r
394 Exception ex = null;
\r
397 ArabicShaping shaper = null;
\r
399 if (test.source != null) {
\r
400 src = test.source.toCharArray();
\r
405 shaper = new ArabicShaping(test.flags);
\r
406 shaper.shape(src, 0, len);
\r
408 catch (Exception e) {
\r
412 if (!test.error.isInstance(ex)) {
\r
413 reportTestFailure(i, test, shaper, test.source, ex);
\r
418 public void TestEquals()
\r
420 ArabicShaping as1 = new ArabicShaping(LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR);
\r
421 ArabicShaping as2 = new ArabicShaping(LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR);
\r
422 ArabicShaping as3 = new ArabicShaping(LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_BEGINNING);
\r
424 if (! as1.equals(as1)) {
\r
425 err("as1: " + as1 + " does not equal itself!\n");
\r
428 if (! as1.equals(as2)) {
\r
429 err("as1: " + as1 + ", as2: " + as2 + " are not equal, but should be.\n");
\r
432 if (as1.equals(as3)) {
\r
433 err("as1: " + as1 + ", as3: " + as3 + " are equal but should not be.\n");
\r
437 public void reportTestFailure(int index, TestData test, ArabicShaping shaper, String result, Exception error) {
\r
438 if (noData() && error != null && error instanceof MissingResourceException ) {
\r
439 warnln(error.getMessage());
\r
442 StringBuffer buf = new StringBuffer();
\r
443 buf.append("*** test failure ***\n");
\r
444 buf.append("index: " + index + "\n");
\r
445 buf.append("test: " + test + "\n");
\r
446 buf.append("shaper: " + shaper + "\n");
\r
447 buf.append("result: " + escapedString(result) + "\n");
\r
448 buf.append("error: " + error + "\n");
\r
450 if (result != null && test.result != null && !test.result.equals(result)) {
\r
451 for (int i = 0; i < Math.max(test.result.length(), result.length()); ++i) {
\r
452 String temp = Integer.toString(i);
\r
453 if (temp.length() < 2) {
\r
454 temp = " ".concat(temp);
\r
456 char trg = i < test.result.length() ? test.result.charAt(i) : '\uffff';
\r
457 char res = i < result.length() ? result.charAt(i) : '\uffff';
\r
459 buf.append("[" + temp + "] ");
\r
460 buf.append(escapedString("" + trg) + " ");
\r
461 buf.append(escapedString("" + res) + " ");
\r
468 err(buf.toString());
\r
471 private static String escapedString(String str) {
\r
476 StringBuffer buf = new StringBuffer(str.length() * 6);
\r
477 for (int i = 0; i < str.length(); ++i) {
\r
478 char ch = str.charAt(i);
\r
489 buf.append(Integer.toHexString(ch));
\r
491 return buf.toString();
\r
494 public static void main(String[] args) {
\r
496 new ArabicShapingRegTest().run(args);
\r
498 catch (Exception e) {
\r
499 System.out.println(e);
\r
503 /* Tests the method
\r
504 * public int shape(char[] source, int sourceStart, int sourceLength,
\r
505 * char[] dest, int destStart, int destSize) throws ArabicShapingException)
\r
507 public void TestShape(){
\r
509 // if (sourceStart < 0 || sourceLength < 0 || sourceStart + sourceLength > source.length)
\r
511 ArabicShaping as = new ArabicShaping(0);
\r
512 char[] source = {'d','u','m','m','y'};
\r
513 char[] dest = {'d','u','m','m','y'};
\r
514 int[] negNum = {-1,-2,-5,-10,-100};
\r
517 for(int i=0; i<negNum.length; i++){
\r
519 // Checks when "sourceStart < 0"
\r
520 as.shape(source, negNum[i], 0, dest, 0, 0);
\r
521 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
522 "suppose to return an exception when 'sourceStart < 0'.");
\r
523 } catch(Exception e){}
\r
526 // Checks when "sourceLength < 0"
\r
527 as.shape(source, 0, negNum[i], dest, 0, 0);
\r
528 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
529 "suppose to return an exception when 'sourceLength < 0'.");
\r
530 } catch(Exception e){}
\r
533 // Checks when "sourceStart + sourceLength > source.length"
\r
535 as.shape(source, 3, 3, dest, 0, 0);
\r
536 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
537 "suppose to return an exception when 'sourceStart + sourceLength > source.length'.");
\r
538 } catch(Exception e){}
\r
540 as.shape(source, 2, 4, dest, 0, 0);
\r
541 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
542 "suppose to return an exception when 'sourceStart + sourceLength > source.length'.");
\r
543 } catch(Exception e){}
\r
545 as.shape(source, 1, 5, dest, 0, 0);
\r
546 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
547 "suppose to return an exception when 'sourceStart + sourceLength > source.length'.");
\r
548 } catch(Exception e){}
\r
550 as.shape(source, 0, 6, dest, 0, 0);
\r
551 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
552 "suppose to return an exception when 'sourceStart + sourceLength > source.length'.");
\r
553 } catch(Exception e){}
\r
555 // Checks when "if (dest == null && destSize != 0)" is true
\r
557 as.shape(source, 2, 2, null, 0, 1);
\r
558 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
559 "suppose to return an exception when 'dest == null && destSize != 0'.");
\r
560 } catch(Exception e){}
\r
563 // if ((destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length))
\r
564 for(int i=0; i<negNum.length; i++){
\r
566 as.shape(source, 2, 2, dest, negNum[i], 1);
\r
567 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
568 "suppose to return an exception when " +
\r
569 "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length).");
\r
570 } catch(Exception e){}
\r
573 as.shape(source, 2, 2, dest, 0, negNum[i]);
\r
574 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
575 "suppose to return an exception when " +
\r
576 "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length).");
\r
577 } catch(Exception e){}
\r
580 // Checks when "destStart + destSize > dest.length"
\r
582 as.shape(source, 2, 2, dest, 3, 3);
\r
583 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
584 "suppose to return an exception when " +
\r
585 "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length).");
\r
586 } catch(Exception e){}
\r
588 as.shape(source, 2, 2, dest, 2, 4);
\r
589 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
590 "suppose to return an exception when " +
\r
591 "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length).");
\r
592 } catch(Exception e){}
\r
594 as.shape(source, 2, 2, dest, 1, 5);
\r
595 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
596 "suppose to return an exception when " +
\r
597 "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length).");
\r
598 } catch(Exception e){}
\r
600 as.shape(source, 2, 2, dest, 0, 6);
\r
601 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
602 "suppose to return an exception when " +
\r
603 "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length).");
\r
604 } catch(Exception e){}
\r
606 // Tests when "throw new IllegalArgumentException("Wrong Tashkeel argument")"
\r
607 int[] invalid_Tashkeel = {-1000, -500, -100};
\r
608 for(int i=0; i < invalid_Tashkeel.length; i++){
\r
609 ArabicShaping arabicShape = new ArabicShaping(invalid_Tashkeel[i]);
\r
611 arabicShape.shape(source,0,0,dest,0,1);
\r
612 errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " +
\r
613 "suppose to return an exception for 'Wrong Tashkeel argument' for " +
\r
614 "an option value of " + invalid_Tashkeel[i]);
\r
615 } catch (Exception e) {}
\r