17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/* 27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************* 37935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Copyright (C) 2007-2010, International Business Machines 47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert* Corporation and others. All Rights Reserved. 57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert******************************************************************************* 67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert*/ 77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.bidi; 97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.awt.font.NumericShaper; 117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.awt.font.TextAttribute; 127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.AttributedCharacterIterator; 137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.text.AttributedString; 147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.Bidi; 167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/** 187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Regression test for java.text.Bidi compatibility 197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * 207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author Matitiahu Allouche 217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class TestCompatibility extends BidiTest { 247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert void compareBidi(Bidi bidi, java.text.Bidi jbidi) 267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte paraLevel = bidi.getParaLevel(); 287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.baseIsLeftToRight() != jbidi.baseIsLeftToRight()) { 297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in baseIsLeftToRight for case " + 307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.baseIsLeftToRight() + 337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.baseIsLeftToRight()); 347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.getBaseLevel() != jbidi.getBaseLevel()) { 367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in getBaseLevel for case " + 377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.getBaseLevel() + 407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.getBaseLevel()); 417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.getLength() != jbidi.getLength()) { 437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in getLength for case " + 447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.getLength() + 477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.getLength()); 487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int len = bidi.getLength(); 507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < len; i++) { 517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.getLevelAt(i) != jbidi.getLevelAt(i)) { 527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in getLevelAt for offset " + i + 537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " of case " + 547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.getLevelAt(i) + 577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.getLevelAt(i)); 587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.getRunCount() != jbidi.getRunCount()) { 617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!(len == 0 && jbidi.getRunCount() == 1)) { 627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in getRunCount for case " + 637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.getRunCount() + 667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.getRunCount()); 677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int runCount = bidi.getRunCount(); 707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < runCount; i++) { 717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.getRunLevel(i) != jbidi.getRunLevel(i)) { 727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in getRunLevel for run " + i + 737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " of case " + 747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.getRunLevel(i) + 777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.getRunLevel(i)); 787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.getRunLimit(i) != jbidi.getRunLimit(i)) { 807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in getRunLimit for run " + i + 817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " of case " + 827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.getRunLimit(i) + 857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.getRunLimit(i)); 867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.getRunStart(i) != jbidi.getRunStart(i)) { 887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in getRunStart for run " + i + 897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert " of case " + 907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.getRunStart(i) + 937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.getRunStart(i)); 947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.isLeftToRight() != jbidi.isLeftToRight()) { 977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in isLeftToRight for case " + 987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.isLeftToRight() + 1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.isLeftToRight()); 1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.isMixed() != jbidi.isMixed()) { 1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in isMixed for case " + 1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.isMixed() + 1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.isMixed()); 1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (bidi.isRightToLeft() != jbidi.isRightToLeft()) { 1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in isRightToLeft for case " + 1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.isRightToLeft() + 1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.isRightToLeft()); 1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] text = bidi.getText(); 1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (Bidi.requiresBidi(text, 0, text.length) != 1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert java.text.Bidi.requiresBidi(text, 0, text.length)) { 1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in requiresBidi for case " + 1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString()) + 1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + Bidi.requiresBidi(text, 0, text.length) + 1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + java.text.Bidi.requiresBidi(text, 0, text.length)); 1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* skip the next test, since the toString implementation are 1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * not compatible 1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!bidi.toString().equals(jbidi.toString())) { 1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in toString for case " + 1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "(level=" + paraLevel + "): " + 1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert u16ToPseudo(bidi.getTextAsString() + 1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + bidi.toString() + 1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + jbidi.toString())); 1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public void testCompatibility() 1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert { 1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // This test case does not work well on Java 1.4/1.4.1 environment, 1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // because of insufficient Bidi implementation in these versions. 1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // This test case also does not work will with Java 1.7 environment, 1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert // because the changes to the Java Bidi implementation. 1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String javaVersion = System.getProperty("java.version"); 1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (javaVersion.startsWith("1.4.0") || javaVersion.startsWith("1.4.1") || javaVersion.startsWith("1.7")) { 1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("\nSkipping TestCompatibility. The test case is known to fail on Java " 1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert + javaVersion + "\n"); 1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert return; 1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("\nEntering TestCompatibility\n"); 1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* check constant field values */ 1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int val; 1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert val = Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT; 1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert val = Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT; 1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert val = Bidi.DIRECTION_LEFT_TO_RIGHT; 1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert val = Bidi.DIRECTION_RIGHT_TO_LEFT; 1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("last val = " + val); 1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String[] data = {"", 1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* the following 2 cases are skipped, because 1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * java.text.Bidi has bugs which cause discrepancies 1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "abc", 1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ABC", 1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */ 1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "abc def", 1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ABC DEF", 1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "abc 123 def", 1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "ABC 123 DEF", 1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "abc DEF ghi", 1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "abc DEF 123 xyz", 1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "abc GHIJ 12345 def KLM" 1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert }; 1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert int dataCnt = data.length; 1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Bidi bidi; 1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert java.text.Bidi jbidi; 1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < dataCnt; i++) { 1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String src = pseudoToU16(data[i]); 1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(src, Bidi.DIRECTION_LEFT_TO_RIGHT); 1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(src, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT); 1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(src, Bidi.DIRECTION_RIGHT_TO_LEFT); 1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(src, java.text.Bidi.DIRECTION_RIGHT_TO_LEFT); 1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] chars = src.toCharArray(); 1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(chars, 0, null, 0, chars.length, Bidi.DIRECTION_LEFT_TO_RIGHT); 1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(chars, 0, null, 0, chars.length, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT); 1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* check bogus flags */ 1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi("abc", 999); 1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert assertEquals("\nDirection should be LTR", Bidi.LTR, bidi.getDirection()); 1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* check constructor with overriding embeddings */ 1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(new char[] { 's', 's', 's' }, 0, 1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new byte[] {(byte) -7, (byte) -2, (byte) -3 }, 1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0, 3, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(new char[] { 's', 's', 's' }, 0, 1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new byte[] {(byte) -7, (byte) -2, (byte) -3 }, 1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 0, 3, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert AttributedString as = new AttributedString("HEBREW 123 english MOREHEB"); 2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL); 2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.addAttribute(TextAttribute.NUMERIC_SHAPING, NumericShaper.getShaper(NumericShaper.ARABIC)); 2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(1), 0, 26); 2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(-1), 0, 6); 2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(-1), 19, 26); 2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert AttributedCharacterIterator aci = as.getIterator(); 2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(aci); 2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(aci); 2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String out = bidi.writeReordered(0); 2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Output #1 of Bidi(AttributedCharacterIterator): " + out); 2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as = new AttributedString("HEBREW 123 english MOREHEB"); 2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL); 2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(0), 0, 26); 2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert aci = as.getIterator(); 2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(aci); 2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(aci); 2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out = bidi.writeReordered(0); 2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Output #2 of Bidi(AttributedCharacterIterator): " + out); 2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert as = new AttributedString("HEBREW 123 english MOREHEB"); 2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert aci = as.getIterator(); 2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(aci); 2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(aci); 2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out = bidi.writeReordered(0); 2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Output #3 of Bidi(AttributedCharacterIterator): " + out); 2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert char[] text = "abc==(123)==>def".toCharArray(); 2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(text, 3, null, 0, 10, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(text, 3, null, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT); 2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out = bidi.writeReordered(0); 2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Output of Bidi(abc==(123)==>def,3,null,0,10, DEFAULT_LTR): " + out); 2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(text, 3, null, 0, 10, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT); 2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(text, 3, null, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT); 2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out = bidi.writeReordered(0); 2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Output of Bidi(abc==(123)==>def,3,null,0,10, DEFAULT_RTL): " + out); 2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] levels = new byte[] {0,0,0,-1,-1,-1,0,0,0,0}; 2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(text, 3, levels, 0, 10, Bidi.DIRECTION_LEFT_TO_RIGHT); 2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(text, 3, levels, 0, 10, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT); 2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out = bidi.writeReordered(0); 2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Output of Bidi(abc==(123)==>def,3,levels,0,10, LTR): " + out); 2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert bidi = new Bidi(text, 3, levels, 0, 10, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT); 2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert jbidi = new java.text.Bidi(text, 3, levels, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT); 2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert compareBidi(bidi, jbidi); 2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert out = bidi.writeReordered(0); 2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Output of Bidi(abc==(123)==>def,3,levels,0,10, DEFAULT_RTL): " + out); 2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert /* test reorderVisually */ 2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert byte[] myLevels = new byte[] {1,2,0,1,2,1,2,0,1,2}; 2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Character[] objects = new Character[10]; 2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert levels = new byte[objects.length]; 2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < objects.length; i++) { 2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert objects[i] = new Character((char)('a'+i)); 2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert levels[i] = myLevels[i]; 2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert Bidi.reorderVisually(levels, 3, objects, 3, 7); 2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String strbidi = ""; 2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < objects.length; i++) { 2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strbidi += objects[i].toString(); 2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < objects.length; i++) { 2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert objects[i] = new Character((char)('a'+i)); 2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert levels[i] = myLevels[i]; 2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert java.text.Bidi.reorderVisually(levels, 3, objects, 3, 7); 2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert String strjbidi = ""; 2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert for (int i = 0; i < objects.length; i++) { 2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert strjbidi += objects[i].toString(); 2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert if (!strjbidi.equals(strbidi)) { 2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert errln("Discrepancy in reorderVisually " + 2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + strbidi + 2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + strjbidi); 2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } else { 2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("Correct match in reorderVisually " + 2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n bidi: " + strbidi + 2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert "\n jbidi: " + strjbidi); 2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert logln("\nExiting TestCompatibility\n"); 2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert 2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert public static void main(String[] args) { 2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert try { 2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert new TestCompatibility().run(args); 2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert catch (Exception e) { 2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert System.out.println(e); 2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert } 2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert} 297