12d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// © 2016 and later: Unicode, Inc. and others. 22d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************* 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (C) 2001-2012, International Business Machines 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Corporation and others. All Rights Reserved. 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************* 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/ 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.shaping; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 122d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport java.lang.reflect.Method; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.MissingResourceException; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 152d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport org.junit.Test; 162d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk; 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.ArabicShaping; 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.ArabicShapingException; 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Regression test for Arabic shaping. 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class ArabicShapingRegTest extends TestFmwk { 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* constants copied from ArabicShaping for convenience */ 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LENGTH_GROW_SHRINK = 0; 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LENGTH_FIXED_SPACES_NEAR = 1; 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LENGTH_FIXED_SPACES_AT_END = 2; 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LENGTH_FIXED_SPACES_AT_BEGINNING = 3; 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int TEXT_DIRECTION_LOGICAL = 0; 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int TEXT_DIRECTION_VISUAL_LTR = 4; 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LETTERS_NOOP = 0; 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LETTERS_SHAPE = 8; 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LETTERS_SHAPE_TASHKEEL_ISOLATED = 0x18; 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int LETTERS_UNSHAPE = 0x10; 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int DIGITS_NOOP = 0; 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int DIGITS_EN2AN = 0x20; 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int DIGITS_AN2EN = 0x40; 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int DIGITS_EN2AN_INIT_LR = 0x60; 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int DIGITS_EN2AN_INIT_AL = 0x80; 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// private static final int DIGITS_RESERVED = 0xa0; 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int DIGIT_TYPE_AN = 0; 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int DIGIT_TYPE_AN_EXTENDED = 0x100; 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static class TestData { 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int type; 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String source; 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int flags; 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String result; 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public int length; 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public Class error; 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int STANDARD = 0; 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int PREFLIGHT = 1; 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static final int ERROR = 2; 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static TestData standard(String source, int flags, String result) { 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return new TestData(STANDARD, source, flags, result, 0, null); 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static TestData preflight(String source, int flags, int length) { 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return new TestData(PREFLIGHT, source, flags, null, length, null); 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static TestData error(String source, int flags, Class error) { 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return new TestData(ERROR, source, flags, null, 0, error); 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private TestData(int type, String source, int flags, String result, int length, Class error) { 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.type = type; 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.source = source; 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.flags = flags; 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.result = result; 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.length = length; 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert this.error = error; 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String[] typenames = { "standard", "preflight", "error" }; 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public String toString() { 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer buf = new StringBuffer(super.toString()); 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("[\n"); 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(typenames[type]); 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(",\n"); 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (source == null) { 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("null"); 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append('"'); 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(escapedString(source)); 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append('"'); 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(",\n"); 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(Integer.toHexString(flags)); 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(",\n"); 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result == null) { 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("null"); 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append('"'); 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(escapedString(result)); 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append('"'); 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(",\n"); 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(length); 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(",\n"); 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(error); 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(']'); 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return buf.toString(); 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String lamAlefSpecialVLTR = 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0646\u0622\u0644\u0627\u0020" + 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0646\u0623\u064E\u0644\u0627\u0020" + 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0646\u0627\u0670\u0644\u0627\u0020" + 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0646\u0622\u0653\u0644\u0627\u0020" + 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0646\u0625\u0655\u0644\u0627\u0020" + 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0646\u0622\u0654\u0644\u0627\u0020" + 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uFEFC\u0639"; 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String tashkeelSpecialVLTR = 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u064A\u0628\u0631\u0639\u0020" + 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u064A\u0628\u0651\u0631\u064E\u0639\u0020" + 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u064C\u064A\u0628\u0631\u064F\u0639\u0020" + 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0628\u0670\u0631\u0670\u0639\u0020" + 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0628\u0653\u0631\u0653\u0639\u0020" + 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0628\u0654\u0631\u0654\u0639\u0020" + 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0628\u0655\u0631\u0655\u0639\u0020"; 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String tashkeelShaddaRTL= 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0634\u0651\u0645\u0652\u0633"; 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String tashkeelShaddaLTR= 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0633\u0652\u0645\u0651\u0634"; 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String ArMathSym = 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE00\uD83B\uDE01\uD83B\uDE02\uD83B\uDE03\u0020" + 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE24\uD83B\uDE05\uD83B\uDE06\u0020" + 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE07\uD83B\uDE08\uD83B\uDE09\u0020" + 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE0A\uD83B\uDE0B\uD83B\uDE0C\uD83B\uDE0D\u0020" + 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE0E\uD83B\uDE0F\uD83B\uDE10\uD83B\uDE11\u0020" + 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE12\uD83B\uDE13\uD83B\uDE14\uD83B\uDE15\u0020" + 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE16\uD83B\uDE17\uD83B\uDE18\u0020" + 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE19\uD83B\uDE1A\uD83B\uDE1B"; 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String ArMathSymLooped = 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE80\uD83B\uDE81\uD83B\uDE82\uD83B\uDE83\u0020" + 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE84\uD83B\uDE85\uD83B\uDE86\u0020" + 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE87\uD83B\uDE88\uD83B\uDE89\u0020" + 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE8B\uD83B\uDE8C\uD83B\uDE8D\u0020" + 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE8E\uD83B\uDE8F\uD83B\uDE90\uD83B\uDE91\u0020" + 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE92\uD83B\uDE93\uD83B\uDE94\uD83B\uDE95\u0020" + 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE96\uD83B\uDE97\uD83B\uDE98\u0020" + 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE99\uD83B\uDE9A\uD83B\uDE9B"; 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String ArMathSymDoubleStruck = 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEA1\uD83B\uDEA2\uD83B\uDEA3\u0020" + 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEA5\uD83B\uDEA6\u0020" + 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEA7\uD83B\uDEA8\uD83B\uDEA9\u0020" + 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEAB\uD83B\uDEAC\uD83B\uDEAD\u0020" + 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEAE\uD83B\uDEAF\uD83B\uDEB0\uD83B\uDEB1\u0020" + 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEB2\uD83B\uDEB3\uD83B\uDEB4\uD83B\uDEB5\u0020" + 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEB6\uD83B\uDEB7\uD83B\uDEB8\u0020" + 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEB9\uD83B\uDEBA\uD83B\uDEBB"; 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String ArMathSymInitial = 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE21\uD83B\uDE22\u0020" + 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE27\uD83B\uDE29\u0020" + 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE2A\uD83B\uDE2B\uD83B\uDE2C\uD83B\uDE2D\u0020" + 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE2E\uD83B\uDE2F\uD83B\uDE30\uD83B\uDE31\u0020" + 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE32\uD83B\uDE34\uD83B\uDE35\u0020" + 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE36\uD83B\uDE37\u0020" + 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE39\uD83B\uDE3B"; 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String ArMathSymTailed = 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE42\uD83B\uDE47\uD83B\uDE49\uD83B\uDE4B\u0020" + 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE4D\uD83B\uDE4E\uD83B\uDE4F\u0020" + 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE51\uD83B\uDE52\uD83B\uDE54\uD83B\uDE57\u0020" + 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE59\uD83B\uDE5B\uD83B\uDE5D\uD83B\uDE5F"; 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String ArMathSymStretched = 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE21\u0633\uD83B\uDE62\u0647"; 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String logicalUnshape = 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020\u0020\uFE8D\uFEF5\u0020\uFEE5\u0020\uFE8D\uFEF7\u0020" + 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uFED7\uFEFC\u0020\uFEE1\u0020\uFE8D\uFEDF\uFECC\uFEAE\uFE91\uFEF4" + 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uFE94\u0020\uFE8D\uFEDF\uFEA4\uFEAE\uFE93\u0020\u0020\u0020\u0020"; 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final String numSource = 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0031" + /* en:1 */ 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0627" + /* arabic:alef */ 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0032" + /* en:2 */ 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u06f3" + /* an:3 */ 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0061" + /* latin:a */ 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0034"; /* en:4 */ 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final TestData[] standardTests = { 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* lam alef special visual ltr */ 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR, 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0020\ufef5\ufe8d\u0020" + 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\ufe76\ufef7\ufe8d\u0020" + 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0670\ufefb\ufe8d\u0020" + 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0653\ufef5\ufe8d\u0020" + 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0655\ufef9\ufe8d\u0020" + 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0654\ufef5\ufe8d\u0020" + 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb"), 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_END, 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" + 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" + 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" + 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" + 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" + 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb\u0020\u0020\u0020\u0020" + 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020"), 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_BEGINNING, 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020\u0020\u0020\u0020\u0020" + 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" + 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" + 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" + 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" + 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" + 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb"), 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_GROW_SHRINK, 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" + 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" + 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" + 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" + 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" + 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb"), 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* TASHKEEL */ 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR, 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0020\ufef5\ufe8d\u0020" + 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\ufe76\ufef7\ufe8d\u0020" + 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0670\ufefb\ufe8d\u0020" + 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0653\ufef5\ufe8d\u0020" + 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0655\ufef9\ufe8d\u0020" + 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufee5\u0020\u0654\ufef5\ufe8d\u0020" + 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb"), 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_END, 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" + 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" + 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" + 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" + 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" + 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb\u0020\u0020\u0020\u0020" + 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020"), 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_AT_BEGINNING, 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020\u0020\u0020\u0020\u0020" + 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" + 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" + 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" + 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" + 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" + 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb"), 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(lamAlefSpecialVLTR, 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_GROW_SHRINK, 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\ufef5\ufe8d\u0020\ufee5" + 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe76\ufef7\ufe8d\u0020\ufee5\u0670" + 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefb\ufe8d\u0020\ufee5\u0653\ufef5" + 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8d\u0020\ufee5\u0655\ufef9\ufe8d" + 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\ufee5\u0654\ufef5\ufe8d\u0020" + 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufefc\ufecb"), 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* tashkeel special visual ltr */ 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(tashkeelSpecialVLTR, 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR, 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufef2\ufe91\ufeae\ufecb\u0020" + 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufef2\ufe91\ufe7c\ufeae\ufe77\ufecb\u0020" + 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe72\ufef2\ufe91\ufeae\ufe79\ufecb\u0020" + 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0670\ufeae\u0670\ufecb\u0020" + 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0653\ufeae\u0653\ufecb\u0020" + 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0654\ufeae\u0654\ufecb\u0020" + 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0655\ufeae\u0655\ufecb\u0020"), 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(tashkeelSpecialVLTR, 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE_TASHKEEL_ISOLATED | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR, 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufef2\ufe91\ufeae\ufecb\u0020" + 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufef2\ufe91\ufe7c\ufeae\ufe76\ufecb\u0020" + 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe72\ufef2\ufe91\ufeae\ufe78\ufecb\u0020" + 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0670\ufeae\u0670\ufecb\u0020" + 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0653\ufeae\u0653\ufecb\u0020" + 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0654\ufeae\u0654\ufecb\u0020" + 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\ufe8f\u0655\ufeae\u0655\ufecb\u0020"), 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(tashkeelShaddaRTL, 2982d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_BEGIN |ArabicShaping.TEXT_DIRECTION_VISUAL_RTL , 2992d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\u0020\ufeb7\ufe7d\ufee4\ufeb2"), 3002d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestData.standard(tashkeelShaddaRTL, 3012d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_END|ArabicShaping.TEXT_DIRECTION_VISUAL_RTL , 3022d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\ufeb7\ufe7d\ufee4\ufeb2\u0020"), 3032d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestData.standard(tashkeelShaddaRTL, 3042d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_RESIZE|ArabicShaping.TEXT_DIRECTION_VISUAL_RTL , 3052d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\ufeb7\ufe7d\ufee4\ufeb2"), 3062d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestData.standard(tashkeelShaddaRTL, 3072d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_REPLACE_BY_TATWEEL|ArabicShaping.TEXT_DIRECTION_VISUAL_RTL , 3082d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\ufeb7\ufe7d\ufee4\u0640\ufeb2"), 3092d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 3102d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestData.standard(tashkeelShaddaLTR, 3112d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_BEGIN |ArabicShaping.TEXT_DIRECTION_VISUAL_LTR , 3122d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\u0020\ufeb2\ufee4\ufe7d\ufeb7"), 3132d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestData.standard(tashkeelShaddaLTR, 3142d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_END |ArabicShaping.TEXT_DIRECTION_VISUAL_LTR , 3152d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\ufeb2\ufee4\ufe7d\ufeb7\u0020"), 3162d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestData.standard(tashkeelShaddaLTR, 3172d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_RESIZE |ArabicShaping.TEXT_DIRECTION_VISUAL_LTR , 3182d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\ufeb2\ufee4\ufe7d\ufeb7"), 3192d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert TestData.standard(tashkeelShaddaLTR, 3202d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_REPLACE_BY_TATWEEL |ArabicShaping.TEXT_DIRECTION_VISUAL_LTR , 3212d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "\ufeb2\u0640\ufee4\ufe7d\ufeb7"), 3227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(ArMathSym, 3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_BEGIN |ArabicShaping.TEXT_DIRECTION_VISUAL_RTL , 3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE00\uD83B\uDE01\uD83B\uDE02\uD83B\uDE03\u0020" + 3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE24\uD83B\uDE05\uD83B\uDE06\u0020" + 3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE07\uD83B\uDE08\uD83B\uDE09\u0020" + 3287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE0A\uD83B\uDE0B\uD83B\uDE0C\uD83B\uDE0D\u0020" + 3297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE0E\uD83B\uDE0F\uD83B\uDE10\uD83B\uDE11\u0020" + 3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE12\uD83B\uDE13\uD83B\uDE14\uD83B\uDE15\u0020" + 3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE16\uD83B\uDE17\uD83B\uDE18\u0020" + 3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE19\uD83B\uDE1A\uD83B\uDE1B"), 3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(ArMathSymLooped, 3347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_END|ArabicShaping.TEXT_DIRECTION_VISUAL_RTL , 3357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE80\uD83B\uDE81\uD83B\uDE82\uD83B\uDE83\u0020" + 3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE84\uD83B\uDE85\uD83B\uDE86\u0020" + 3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE87\uD83B\uDE88\uD83B\uDE89\u0020" + 3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE8B\uD83B\uDE8C\uD83B\uDE8D\u0020" + 3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE8E\uD83B\uDE8F\uD83B\uDE90\uD83B\uDE91\u0020" + 3407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE92\uD83B\uDE93\uD83B\uDE94\uD83B\uDE95\u0020" + 3417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE96\uD83B\uDE97\uD83B\uDE98\u0020" + 3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE99\uD83B\uDE9A\uD83B\uDE9B"), 3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(ArMathSymDoubleStruck, 3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_RESIZE|ArabicShaping.TEXT_DIRECTION_VISUAL_RTL , 3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEA1\uD83B\uDEA2\uD83B\uDEA3\u0020" + 3467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEA5\uD83B\uDEA6\u0020" + 3477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEA7\uD83B\uDEA8\uD83B\uDEA9\u0020" + 3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEAB\uD83B\uDEAC\uD83B\uDEAD\u0020" + 3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEAE\uD83B\uDEAF\uD83B\uDEB0\uD83B\uDEB1\u0020" + 3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEB2\uD83B\uDEB3\uD83B\uDEB4\uD83B\uDEB5\u0020" + 3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEB6\uD83B\uDEB7\uD83B\uDEB8\u0020" + 3527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDEB9\uD83B\uDEBA\uD83B\uDEBB"), 3537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(ArMathSymInitial, 3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_BEGIN |ArabicShaping.TEXT_DIRECTION_VISUAL_LTR , 3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE21\uD83B\uDE22\u0020" + 3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE27\uD83B\uDE29\u0020" + 3587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE2A\uD83B\uDE2B\uD83B\uDE2C\uD83B\uDE2D\u0020" + 3597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE2E\uD83B\uDE2F\uD83B\uDE30\uD83B\uDE31\u0020" + 3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE32\uD83B\uDE34\uD83B\uDE35\u0020" + 3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE36\uD83B\uDE37\u0020" + 3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE39\uD83B\uDE3B"), 3637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(ArMathSymTailed, 3647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_END |ArabicShaping.TEXT_DIRECTION_VISUAL_LTR , 3657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE42\uD83B\uDE47\uD83B\uDE49\uD83B\uDE4B\u0020" + 3667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE4D\uD83B\uDE4E\uD83B\uDE4F\u0020" + 3677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE51\uD83B\uDE52\uD83B\uDE54\uD83B\uDE57\u0020" + 3687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE59\uD83B\uDE5B\uD83B\uDE5D\uD83B\uDE5F"), 3697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(ArMathSymStretched, 3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping.LETTERS_SHAPE|ArabicShaping.TASHKEEL_RESIZE |ArabicShaping.TEXT_DIRECTION_VISUAL_LTR , 3717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\uD83B\uDE21\uFEB1\uD83B\uDE62\uFEE9"), 3727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* logical unshape */ 3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(logicalUnshape, 3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_NEAR, 3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020\u0020\u0627\u0644\u0622\u0646\u0020\u0627\u0644\u0623\u0642\u0644\u0627" + 3777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627\u0644\u062d\u0631" + 3787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0629\u0020\u0020\u0020\u0020"), 3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(logicalUnshape, 3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_END, 3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020\u0020\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642" + 3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0644\u0627\u0020\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627" + 3837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0644\u062d\u0631\u0629\u0020"), 3847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(logicalUnshape, 3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_BEGINNING, 3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642\u0644\u0627\u0020" + 3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627\u0644\u062d\u0631" + 3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0629\u0020\u0020\u0020\u0020"), 3897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(logicalUnshape, 3907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_GROW_SHRINK, 3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0020\u0020\u0020\u0627\u0644\u0622\u0020\u0646\u0020\u0627\u0644\u0623\u0020\u0642" + 3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0644\u0627\u0020\u0645\u0020\u0627\u0644\u0639\u0631\u0628\u064a\u0629\u0020\u0627" + 3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0644\u062d\u0631\u0629\u0020\u0020\u0020\u0020"), 3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* numbers */ 3967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(numSource, 3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DIGITS_EN2AN | DIGIT_TYPE_AN, 3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0661\u0627\u0662\u06f3\u0061\u0664"), 3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(numSource, 4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DIGITS_AN2EN | DIGIT_TYPE_AN_EXTENDED, 4017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0031\u0627\u0032\u0033\u0061\u0034"), 4027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(numSource, 4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DIGITS_EN2AN_INIT_LR | DIGIT_TYPE_AN, 4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0031\u0627\u0662\u06f3\u0061\u0034"), 4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(numSource, 4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DIGITS_EN2AN_INIT_AL | DIGIT_TYPE_AN_EXTENDED, 4077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u06f1\u0627\u06f2\u06f3\u0061\u0034"), 4087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(numSource, 4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DIGITS_EN2AN_INIT_LR | DIGIT_TYPE_AN | TEXT_DIRECTION_VISUAL_LTR, 4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u0661\u0627\u0032\u06f3\u0061\u0034"), 4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(numSource, 4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DIGITS_EN2AN_INIT_AL | DIGIT_TYPE_AN_EXTENDED | TEXT_DIRECTION_VISUAL_LTR, 4137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\u06f1\u0627\u0032\u06f3\u0061\u06f4"), 4147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* no-op */ 4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.standard(numSource, 4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0, 4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert numSource), 4197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final TestData[] preflightTests = { 4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* preflight */ 4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.preflight("\u0644\u0627", 4247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE | LENGTH_GROW_SHRINK, 4257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1), 4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.preflight("\u0644\u0627\u0031", 4287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert DIGITS_EN2AN | DIGIT_TYPE_AN_EXTENDED | LENGTH_GROW_SHRINK, 4297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 3), 4307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.preflight("\u0644\u0644", 4327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_SHAPE | LENGTH_GROW_SHRINK, 4337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2), 4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.preflight("\ufef7", 4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | LENGTH_GROW_SHRINK, 4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2), 4387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static final TestData[] errorTests = { 4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* bad data */ 4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.error("\u0020\ufef7\u0644\u0020", 4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_NEAR, 4447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShapingException.class), 4457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.error("\u0020\ufef7", 4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_END, 4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShapingException.class), 4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.error("\ufef7\u0020", 4517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_BEGINNING, 4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShapingException.class), 4537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* bad options */ 4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.error("\ufef7", 4567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0xffffffff, 4577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert IllegalArgumentException.class), 4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.error("\ufef7", 4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | LENGTH_GROW_SHRINK, 4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShapingException.class), 4627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData.error(null, 4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert LETTERS_UNSHAPE | LENGTH_FIXED_SPACES_AT_END, 4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert IllegalArgumentException.class), 4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4682d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 4697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestStandard() { 4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < standardTests.length; ++i) { 4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData test = standardTests[i]; 4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Exception ex = null; 4747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String result = null; 4757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping shaper = null; 4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert shaper = new ArabicShaping(test.flags); 4797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert result = shaper.shape(test.source); 4807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch(MissingResourceException e){ 4827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert throw e; 4837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (IllegalStateException ie){ 4857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert warnln("IllegalStateException: "+ie.toString()); 4867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 4877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 4897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ex = e; 4907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!test.result.equals(result)) { 4937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert reportTestFailure(i, test, shaper, result, ex); 4947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 4977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 4982d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 4997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestPreflight() { 5007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < preflightTests.length; ++i) { 5017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData test = preflightTests[i]; 5027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Exception ex = null; 5047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char src[] = null; 5057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int len = 0; 5067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping shaper = null; 5077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (test.source != null) { 5097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert src = test.source.toCharArray(); 5107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 5137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert shaper = new ArabicShaping(test.flags); 5147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert len = shaper.shape(src, 0, src.length, null, 0, 0); 5157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 5177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ex = e; 5187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (test.length != len) { 5217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert reportTestFailure(i, test, shaper, test.source, ex); 5227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5262d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 5277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestError() { 5287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < errorTests.length; ++i) { 5297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert TestData test = errorTests[i]; 5307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Exception ex = null; 5327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char src[] = null; 5337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int len = 0; 5347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping shaper = null; 5357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (test.source != null) { 5377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert src = test.source.toCharArray(); 5387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert len = src.length; 5397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 5427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert shaper = new ArabicShaping(test.flags); 5437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert shaper.shape(src, 0, len); 5447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 5467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ex = e; 5477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!test.error.isInstance(ex)) { 5507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert reportTestFailure(i, test, shaper, test.source, ex); 5517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5552d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 5567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestEquals() 5577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 5587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping as1 = new ArabicShaping(LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR); 5597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping as2 = new ArabicShaping(LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR); 5607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping as3 = new ArabicShaping(LETTERS_UNSHAPE | TEXT_DIRECTION_LOGICAL | LENGTH_FIXED_SPACES_AT_BEGINNING); 5617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (! as1.equals(as1)) { 5637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert err("as1: " + as1 + " does not equal itself!\n"); 5647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (! as1.equals(as2)) { 5677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert err("as1: " + as1 + ", as2: " + as2 + " are not equal, but should be.\n"); 5687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (as1.equals(as3)) { 5717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert err("as1: " + as1 + ", as3: " + as3 + " are equal but should not be.\n"); 5727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5752d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // TODO(junit): remove this and convert callers to parameterized tests 5762d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert private void reportTestFailure(int index, TestData test, ArabicShaping shaper, String result, Exception error) { 5772d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert if (error != null && error instanceof MissingResourceException ) { 5787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert warnln(error.getMessage()); 5797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer buf = new StringBuffer(); 5827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("*** test failure ***\n"); 5837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("index: " + index + "\n"); 5847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("test: " + test + "\n"); 5857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("shaper: " + shaper + "\n"); 5867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("result: " + escapedString(result) + "\n"); 5877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("error: " + error + "\n"); 5887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (result != null && test.result != null && !test.result.equals(result)) { 5907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < Math.max(test.result.length(), result.length()); ++i) { 5917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String temp = Integer.toString(i); 5927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (temp.length() < 2) { 5937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert temp = " ".concat(temp); 5947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 5957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char trg = i < test.result.length() ? test.result.charAt(i) : '\uffff'; 5967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char res = i < result.length() ? result.charAt(i) : '\uffff'; 5977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 5987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("[" + temp + "] "); 5997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(escapedString("" + trg) + " "); 6007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(escapedString("" + res) + " "); 6017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (trg != res) { 6027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("***"); 6037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("\n"); 6057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert err(buf.toString()); 6087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert private static String escapedString(String str) { 6117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (str == null) { 6127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return null; 6137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert StringBuffer buf = new StringBuffer(str.length() * 6); 6167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < str.length(); ++i) { 6177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char ch = str.charAt(i); 6187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append("\\u"); 6197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ch < 0x1000) { 6207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append('0'); 6217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ch < 0x0100) { 6237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append('0'); 6247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (ch < 0x0010) { 6267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append('0'); 6277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert buf.append(Integer.toHexString(ch)); 6297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return buf.toString(); 6317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* Tests the method 6347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * public int shape(char[] source, int sourceStart, int sourceLength, 6357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * char[] dest, int destStart, int destSize) throws ArabicShapingException) 6367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 6372d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 6387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void TestShape(){ 6397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests when 6407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // if (sourceStart < 0 || sourceLength < 0 || sourceStart + sourceLength > source.length) 6417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Is true 6427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping as = new ArabicShaping(0); 6437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] source = {'d','u','m','m','y'}; 6447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] dest = {'d','u','m','m','y'}; 6457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] negNum = {-1,-2,-5,-10,-100}; 6467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<negNum.length; i++){ 6497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Checks when "sourceStart < 0" 6517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, negNum[i], 0, dest, 0, 0); 6527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when 'sourceStart < 0'."); 6547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 6557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Checks when "sourceLength < 0" 6587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 0, negNum[i], dest, 0, 0); 6597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when 'sourceLength < 0'."); 6617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 6627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 6637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Checks when "sourceStart + sourceLength > source.length" 6657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 3, 3, dest, 0, 0); 6677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when 'sourceStart + sourceLength > source.length'."); 6697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 6707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 4, dest, 0, 0); 6727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when 'sourceStart + sourceLength > source.length'."); 6747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 6757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 1, 5, dest, 0, 0); 6777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when 'sourceStart + sourceLength > source.length'."); 6797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 6807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 0, 6, dest, 0, 0); 6827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when 'sourceStart + sourceLength > source.length'."); 6847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 6857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Checks when "if (dest == null && destSize != 0)" is true 6877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 2, null, 0, 1); 6897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when 'dest == null && destSize != 0'."); 6917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 6927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 6937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Checks when 6947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // if ((destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)) 6957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i<negNum.length; i++){ 6967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 6977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 2, dest, negNum[i], 1); 6987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 6997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when " + 7007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)."); 7017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 7027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 7047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 2, dest, 0, negNum[i]); 7057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 7067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when " + 7077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)."); 7087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 7097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Checks when "destStart + destSize > dest.length" 7127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 7137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 2, dest, 3, 3); 7147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 7157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when " + 7167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)."); 7177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 7187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 7197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 2, dest, 2, 4); 7207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 7217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when " + 7227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)."); 7237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 7247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 7257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 2, dest, 1, 5); 7267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 7277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when " + 7287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)."); 7297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 7307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try{ 7317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.shape(source, 2, 2, dest, 0, 6); 7327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 7337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception when " + 7347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(destSize != 0) && (destStart < 0 || destSize < 0 || destStart + destSize > dest.length)."); 7357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch(Exception e){} 7367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 7377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // Tests when "throw new IllegalArgumentException("Wrong Tashkeel argument")" 7387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int[] invalid_Tashkeel = {-1000, -500, -100}; 7397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for(int i=0; i < invalid_Tashkeel.length; i++){ 7407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert ArabicShaping arabicShape = new ArabicShaping(invalid_Tashkeel[i]); 7417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 7427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert arabicShape.shape(source,0,0,dest,0,1); 7437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("ArabicShaping.shape(char[],int,int,char[],int,int) was " + 7447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "suppose to return an exception for 'Wrong Tashkeel argument' for " + 7457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "an option value of " + invalid_Tashkeel[i]); 7467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } catch (Exception e) {} 7477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 7492d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 7512d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void TestCoverage() { 7522d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert ArabicShaping shp = new ArabicShaping(LETTERS_SHAPE | TEXT_DIRECTION_VISUAL_LTR | LENGTH_FIXED_SPACES_NEAR); 7532d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7542d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // Test ArabicShaping#toString(); 7552d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("ArabicShaping#toString() failed.", 7562d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert shp.toString(), 7572d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert "com.ibm.icu.text.ArabicShaping@d[LamAlef spaces at near, visual, shape letters," + 7582d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert " no digit shaping, standard Arabic-Indic digits]"); 7592d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7602d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // Test ArabicShaping#hashCode() 7612d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertEquals("ArabicShaping#hashCode() failed.", shp.hashCode(), 13); 7622d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 7632d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7642d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert private boolean getStaticCharacterHelperFunctionValue(String methodName, char testValue) throws Exception { 7652d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert Method m = ArabicShaping.class.getDeclaredMethod(methodName, Character.TYPE); 7662d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert m.setAccessible(true); 7672d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert Object returnValue = m.invoke(null, testValue); 7682d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7692d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert if (Integer.class.isInstance(returnValue)) { 7702d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert return (Integer)returnValue == 1; 7712d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 7722d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert return (Boolean)returnValue; 7732d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 7742d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7752d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert @Test 7762d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert public void TestHelperFunctions() throws Exception { 7772d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // Test private static helper functions that are used internally: 7782d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7792d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // ArabicShaping.isSeenTailFamilyChar(char) 7802d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertTrue("ArabicShaping.isSeenTailFamilyChar(char) failed.", 7812d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert getStaticCharacterHelperFunctionValue("isSeenTailFamilyChar", (char)0xfeb1)); 7822d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7832d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // ArabicShaping.isAlefMaksouraChar(char) 7842d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertTrue("ArabicShaping.isAlefMaksouraChar(char) failed.", 7852d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert getStaticCharacterHelperFunctionValue("isAlefMaksouraChar", (char)0xfeef)); 7862d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7872d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // ArabicShaping.isTailChar(char) 7882d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertTrue("ArabicShaping.isTailChar(char) failed.", 7892d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert getStaticCharacterHelperFunctionValue("isTailChar", (char)0x200B)); 7902d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7912d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert // ArabicShaping.isYehHamzaChar(char) 7922d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert assertTrue("ArabicShaping.isYehHamzaChar(char) failed.", 7932d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert getStaticCharacterHelperFunctionValue("isYehHamzaChar", (char)0xfe89)); 7942d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert 7952d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert } 7967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 7977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 798