]> gitweb.fperrin.net Git - Dictionary.git/blobdiff - jars/icu4j-4_2_1-src/src/com/ibm/icu/dev/test/bidi/TestCompatibility.java
go
[Dictionary.git] / jars / icu4j-4_2_1-src / src / com / ibm / icu / dev / test / bidi / TestCompatibility.java
old mode 100755 (executable)
new mode 100644 (file)
index 259bd3d..539895d
-//##header\r
-//#if defined(FOUNDATION10) || defined(J2SE13)\r
-//#else\r
-/*\r
-*******************************************************************************\r
-*   Copyright (C) 2007-2009, International Business Machines\r
-*   Corporation and others.  All Rights Reserved.\r
-*******************************************************************************\r
-*/\r
-\r
-package com.ibm.icu.dev.test.bidi;\r
-\r
-import com.ibm.icu.text.Bidi;\r
-import java.text.AttributedString;\r
-import java.awt.font.TextAttribute;\r
-import java.text.AttributedCharacterIterator;\r
-import java.awt.font.NumericShaper;\r
-\r
-/**\r
- * Regression test for java.text.Bidi compatibility\r
- *\r
- * @author Matitiahu Allouche\r
- */\r
-\r
-public class TestCompatibility extends BidiTest {\r
-\r
-    void compareBidi(Bidi bidi, java.text.Bidi jbidi)\r
-    {\r
-        byte paraLevel = bidi.getParaLevel();\r
-        if (bidi.baseIsLeftToRight() != jbidi.baseIsLeftToRight()) {\r
-            errln("Discrepancy in baseIsLeftToRight for case " +\r
-                  "(level=" + paraLevel + "): " +\r
-                  u16ToPseudo(bidi.getTextAsString()) +\r
-                  "\n    bidi: " + bidi.baseIsLeftToRight() +\r
-                  "\n   jbidi: " + jbidi.baseIsLeftToRight());\r
-        }\r
-        if (bidi.getBaseLevel() != jbidi.getBaseLevel()) {\r
-            errln("Discrepancy in getBaseLevel for case " +\r
-                  "(level=" + paraLevel + "): " +\r
-                  u16ToPseudo(bidi.getTextAsString()) +\r
-                  "\n    bidi: " + bidi.getBaseLevel() +\r
-                  "\n   jbidi: " + jbidi.getBaseLevel());\r
-        }\r
-        if (bidi.getLength() != jbidi.getLength()) {\r
-            errln("Discrepancy in getLength for case " +\r
-                  "(level=" + paraLevel + "): " +\r
-                  u16ToPseudo(bidi.getTextAsString()) +\r
-                  "\n    bidi: " + bidi.getLength() +\r
-                  "\n   jbidi: " + jbidi.getLength());\r
-        }\r
-        int len = bidi.getLength();\r
-        for (int i = 0; i < len; i++) {\r
-            if (bidi.getLevelAt(i) != jbidi.getLevelAt(i)) {\r
-                errln("Discrepancy in getLevelAt for offset " + i +\r
-                      " of case " +\r
-                      "(level=" + paraLevel + "): " +\r
-                      u16ToPseudo(bidi.getTextAsString()) +\r
-                      "\n    bidi: " + bidi.getLevelAt(i) +\r
-                      "\n   jbidi: " + jbidi.getLevelAt(i));\r
-            }\r
-        }\r
-        if (bidi.getRunCount() != jbidi.getRunCount()) {\r
-            if (!(len == 0 && jbidi.getRunCount() == 1)) {\r
-                errln("Discrepancy in getRunCount for case " +\r
-                      "(level=" + paraLevel + "): " +\r
-                      u16ToPseudo(bidi.getTextAsString()) +\r
-                      "\n    bidi: " + bidi.getRunCount() +\r
-                      "\n   jbidi: " + jbidi.getRunCount());\r
-            }\r
-        }\r
-        int runCount = bidi.getRunCount();\r
-        for (int i = 0; i < runCount; i++) {\r
-            if (bidi.getRunLevel(i) != jbidi.getRunLevel(i)) {\r
-                errln("Discrepancy in getRunLevel for run " + i +\r
-                      " of case " +\r
-                      "(level=" + paraLevel + "): " +\r
-                      u16ToPseudo(bidi.getTextAsString()) +\r
-                      "\n    bidi: " + bidi.getRunLevel(i) +\r
-                      "\n   jbidi: " + jbidi.getRunLevel(i));\r
-            }\r
-            if (bidi.getRunLimit(i) != jbidi.getRunLimit(i)) {\r
-                errln("Discrepancy in getRunLimit for run " + i +\r
-                      " of case " +\r
-                      "(level=" + paraLevel + "): " +\r
-                      u16ToPseudo(bidi.getTextAsString()) +\r
-                      "\n    bidi: " + bidi.getRunLimit(i) +\r
-                      "\n   jbidi: " + jbidi.getRunLimit(i));\r
-            }\r
-            if (bidi.getRunStart(i) != jbidi.getRunStart(i)) {\r
-                errln("Discrepancy in getRunStart for run " + i +\r
-                      " of case " +\r
-                      "(level=" + paraLevel + "): " +\r
-                      u16ToPseudo(bidi.getTextAsString()) +\r
-                      "\n    bidi: " + bidi.getRunStart(i) +\r
-                      "\n   jbidi: " + jbidi.getRunStart(i));\r
-            }\r
-        }\r
-        if (bidi.isLeftToRight() != jbidi.isLeftToRight()) {\r
-            errln("Discrepancy in isLeftToRight for case " +\r
-                  "(level=" + paraLevel + "): " +\r
-                  u16ToPseudo(bidi.getTextAsString()) +\r
-                  "\n    bidi: " + bidi.isLeftToRight() +\r
-                  "\n   jbidi: " + jbidi.isLeftToRight());\r
-        }\r
-        if (bidi.isMixed() != jbidi.isMixed()) {\r
-            errln("Discrepancy in isMixed for case " +\r
-                  "(level=" + paraLevel + "): " +\r
-                  u16ToPseudo(bidi.getTextAsString()) +\r
-                  "\n    bidi: " + bidi.isMixed() +\r
-                  "\n   jbidi: " + jbidi.isMixed());\r
-        }\r
-        if (bidi.isRightToLeft() != jbidi.isRightToLeft()) {\r
-            errln("Discrepancy in isRightToLeft for case " +\r
-                  "(level=" + paraLevel + "): " +\r
-                  u16ToPseudo(bidi.getTextAsString()) +\r
-                  "\n    bidi: " + bidi.isRightToLeft() +\r
-                  "\n   jbidi: " + jbidi.isRightToLeft());\r
-        }\r
-        char[] text = bidi.getText();\r
-        if (Bidi.requiresBidi(text, 0, text.length) !=\r
-            java.text.Bidi.requiresBidi(text, 0, text.length)) {\r
-            errln("Discrepancy in requiresBidi for case " +\r
-                  u16ToPseudo(bidi.getTextAsString()) +\r
-                  "\n    bidi: " + Bidi.requiresBidi(text, 0, text.length) +\r
-                  "\n   jbidi: " + java.text.Bidi.requiresBidi(text, 0, text.length));\r
-        }\r
-        /* skip the next test, since the toString implementation are\r
-         * not compatible\r
-        if (!bidi.toString().equals(jbidi.toString())) {\r
-            errln("Discrepancy in toString for case " +\r
-                  "(level=" + paraLevel + "): " +\r
-                  u16ToPseudo(bidi.getTextAsString() +\r
-                  "\n    bidi: " + bidi.toString() +\r
-                  "\n   jbidi: " + jbidi.toString()));\r
-        }\r
-         */\r
-    }\r
-\r
-    public void testCompatibility()\r
-    {\r
-        // This test case does not work well on Java 1.4/1.4.1 environment,\r
-        // because of insufficient Bidi implementation in these versions.\r
-        String javaVersion = System.getProperty("java.version");\r
-        if (javaVersion.startsWith("1.4.0") || javaVersion.startsWith("1.4.1")) {\r
-            logln("\nSkipping TestCompatibility.  The test case is known to fail on Java "\r
-                    + javaVersion + "\n");\r
-            return;\r
-        }\r
-        logln("\nEntering TestCompatibility\n");\r
-        /* check constant field values */\r
-        int val;\r
-        val = Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT;\r
-        val = Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT;\r
-        val = Bidi.DIRECTION_LEFT_TO_RIGHT;\r
-        val = Bidi.DIRECTION_RIGHT_TO_LEFT;\r
-        logln("last val = " + val);\r
-\r
-        String[] data = {"",\r
-                         /* the following 2 cases are skipped, because\r
-                          * java.text.Bidi has bugs which cause discrepancies\r
-                         "abc",\r
-                         "ABC",\r
-                          */\r
-                         "abc def",\r
-                         "ABC DEF",\r
-                         "abc 123 def",\r
-                         "ABC 123 DEF",\r
-                         "abc DEF ghi",\r
-                         "abc DEF 123 xyz",\r
-                         "abc GHIJ 12345 def KLM"\r
-                        };\r
-        int dataCnt = data.length;\r
-        Bidi bidi;\r
-        java.text.Bidi jbidi;\r
-        for (int i = 0; i < dataCnt; i++) {\r
-            String src = pseudoToU16(data[i]);\r
-            bidi = new Bidi(src, Bidi.DIRECTION_LEFT_TO_RIGHT);\r
-            jbidi = new java.text.Bidi(src, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT);\r
-            compareBidi(bidi, jbidi);\r
-            bidi = new Bidi(src, Bidi.DIRECTION_RIGHT_TO_LEFT);\r
-            jbidi = new java.text.Bidi(src, java.text.Bidi.DIRECTION_RIGHT_TO_LEFT);\r
-            compareBidi(bidi, jbidi);\r
-            char[] chars = src.toCharArray();\r
-            bidi = new Bidi(chars, 0, null, 0, chars.length, Bidi.DIRECTION_LEFT_TO_RIGHT);\r
-            jbidi = new java.text.Bidi(chars, 0, null, 0, chars.length, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT);\r
-            compareBidi(bidi, jbidi);\r
-        }\r
-        /* check bogus flags */\r
-        bidi = new Bidi("abc", 999);\r
-        assertEquals("\nDirection should be LTR", Bidi.LTR, bidi.getDirection());\r
-        /* check constructor with overriding embeddings */\r
-        bidi = new Bidi(new char[] { 's', 's', 's' }, 0,\r
-                        new byte[] {(byte) -7, (byte) -2, (byte) -3 },\r
-                        0, 3, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);\r
-        jbidi = new java.text.Bidi(new char[] { 's', 's', 's' }, 0,\r
-                        new byte[] {(byte) -7, (byte) -2, (byte) -3 },\r
-                        0, 3, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);\r
-\r
-        AttributedString as = new AttributedString("HEBREW 123 english MOREHEB");\r
-        as.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL);\r
-        as.addAttribute(TextAttribute.NUMERIC_SHAPING, NumericShaper.getShaper(NumericShaper.ARABIC));\r
-        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(1), 0, 26);\r
-        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(-1), 0, 6);\r
-        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(-1), 19, 26);\r
-        AttributedCharacterIterator aci = as.getIterator();\r
-        bidi = new Bidi(aci);\r
-        jbidi = new java.text.Bidi(aci);\r
-        compareBidi(bidi, jbidi);\r
-        String out = bidi.writeReordered(0);\r
-        logln("Output #1 of Bidi(AttributedCharacterIterator): " + out);\r
-\r
-        as = new AttributedString("HEBREW 123 english MOREHEB");\r
-        as.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL);\r
-        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(0), 0, 26);\r
-        aci = as.getIterator();\r
-        bidi = new Bidi(aci);\r
-        jbidi = new java.text.Bidi(aci);\r
-        compareBidi(bidi, jbidi);\r
-        out = bidi.writeReordered(0);\r
-        logln("Output #2 of Bidi(AttributedCharacterIterator): " + out);\r
-\r
-        as = new AttributedString("HEBREW 123 english MOREHEB");\r
-        aci = as.getIterator();\r
-        bidi = new Bidi(aci);\r
-        jbidi = new java.text.Bidi(aci);\r
-        compareBidi(bidi, jbidi);\r
-        out = bidi.writeReordered(0);\r
-        logln("Output #3 of Bidi(AttributedCharacterIterator): " + out);\r
-\r
-        char[] text = "abc==(123)==>def".toCharArray();\r
-        bidi = new Bidi(text, 3, null, 0, 10, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);\r
-        jbidi = new java.text.Bidi(text, 3, null, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);\r
-        compareBidi(bidi, jbidi);\r
-        out = bidi.writeReordered(0);\r
-        logln("Output of Bidi(abc==(123)==>def,3,null,0,10, DEFAULT_LTR): " + out);\r
-        bidi = new Bidi(text, 3, null, 0, 10, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);\r
-        jbidi = new java.text.Bidi(text, 3, null, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);\r
-        compareBidi(bidi, jbidi);\r
-        out = bidi.writeReordered(0);\r
-        logln("Output of Bidi(abc==(123)==>def,3,null,0,10, DEFAULT_RTL): " + out);\r
-        byte[] levels = new byte[] {0,0,0,-1,-1,-1,0,0,0,0};\r
-        bidi = new Bidi(text, 3, levels, 0, 10, Bidi.DIRECTION_LEFT_TO_RIGHT);\r
-        jbidi = new java.text.Bidi(text, 3, levels, 0, 10, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT);\r
-        compareBidi(bidi, jbidi);\r
-        out = bidi.writeReordered(0);\r
-        logln("Output of Bidi(abc==(123)==>def,3,levels,0,10, LTR): " + out);\r
-        bidi = new Bidi(text, 3, levels, 0, 10, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);\r
-        jbidi = new java.text.Bidi(text, 3, levels, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);\r
-        compareBidi(bidi, jbidi);\r
-        out = bidi.writeReordered(0);\r
-        logln("Output of Bidi(abc==(123)==>def,3,levels,0,10, DEFAULT_RTL): " + out);\r
-\r
-        /* test reorderVisually */\r
-        byte[] myLevels = new byte[] {1,2,0,1,2,1,2,0,1,2};\r
-        Character[] objects = new Character[10];\r
-        levels = new byte[objects.length];\r
-        for (int i = 0; i < objects.length; i++) {\r
-            objects[i] = new Character((char)('a'+i));\r
-            levels[i] = myLevels[i];\r
-        }\r
-        Bidi.reorderVisually(levels, 3, objects, 3, 7);\r
-        String strbidi = "";\r
-        for (int i = 0; i < objects.length; i++) {\r
-            strbidi += objects[i].toString();\r
-        }\r
-        for (int i = 0; i < objects.length; i++) {\r
-            objects[i] = new Character((char)('a'+i));\r
-            levels[i] = myLevels[i];\r
-        }\r
-        java.text.Bidi.reorderVisually(levels, 3, objects, 3, 7);\r
-        String strjbidi = "";\r
-        for (int i = 0; i < objects.length; i++) {\r
-            strjbidi += objects[i].toString();\r
-        }\r
-        if (!strjbidi.equals(strbidi)) {\r
-            errln("Discrepancy in reorderVisually " +\r
-                  "\n      bidi: " + strbidi +\r
-                  "\n     jbidi: " + strjbidi);\r
-        } else {\r
-            logln("Correct match in reorderVisually " +\r
-                  "\n      bidi: " + strbidi +\r
-                  "\n     jbidi: " + strjbidi);\r
-        }\r
-\r
-        logln("\nExiting TestCompatibility\n");\r
-    }\r
-\r
-    public static void main(String[] args) {\r
-        try {\r
-            new TestCompatibility().run(args);\r
-        }\r
-        catch (Exception e) {\r
-            System.out.println(e);\r
-        }\r
-    }\r
-}\r
-//#endif\r
+//##header J2SE15
+//#if defined(FOUNDATION10) || defined(J2SE13)
+//#else
+/*
+*******************************************************************************
+*   Copyright (C) 2007-2009, International Business Machines
+*   Corporation and others.  All Rights Reserved.
+*******************************************************************************
+*/
+
+package com.ibm.icu.dev.test.bidi;
+
+import com.ibm.icu.text.Bidi;
+import java.text.AttributedString;
+import java.awt.font.TextAttribute;
+import java.text.AttributedCharacterIterator;
+import java.awt.font.NumericShaper;
+
+/**
+ * Regression test for java.text.Bidi compatibility
+ *
+ * @author Matitiahu Allouche
+ */
+
+public class TestCompatibility extends BidiTest {
+
+    void compareBidi(Bidi bidi, java.text.Bidi jbidi)
+    {
+        byte paraLevel = bidi.getParaLevel();
+        if (bidi.baseIsLeftToRight() != jbidi.baseIsLeftToRight()) {
+            errln("Discrepancy in baseIsLeftToRight for case " +
+                  "(level=" + paraLevel + "): " +
+                  u16ToPseudo(bidi.getTextAsString()) +
+                  "\n    bidi: " + bidi.baseIsLeftToRight() +
+                  "\n   jbidi: " + jbidi.baseIsLeftToRight());
+        }
+        if (bidi.getBaseLevel() != jbidi.getBaseLevel()) {
+            errln("Discrepancy in getBaseLevel for case " +
+                  "(level=" + paraLevel + "): " +
+                  u16ToPseudo(bidi.getTextAsString()) +
+                  "\n    bidi: " + bidi.getBaseLevel() +
+                  "\n   jbidi: " + jbidi.getBaseLevel());
+        }
+        if (bidi.getLength() != jbidi.getLength()) {
+            errln("Discrepancy in getLength for case " +
+                  "(level=" + paraLevel + "): " +
+                  u16ToPseudo(bidi.getTextAsString()) +
+                  "\n    bidi: " + bidi.getLength() +
+                  "\n   jbidi: " + jbidi.getLength());
+        }
+        int len = bidi.getLength();
+        for (int i = 0; i < len; i++) {
+            if (bidi.getLevelAt(i) != jbidi.getLevelAt(i)) {
+                errln("Discrepancy in getLevelAt for offset " + i +
+                      " of case " +
+                      "(level=" + paraLevel + "): " +
+                      u16ToPseudo(bidi.getTextAsString()) +
+                      "\n    bidi: " + bidi.getLevelAt(i) +
+                      "\n   jbidi: " + jbidi.getLevelAt(i));
+            }
+        }
+        if (bidi.getRunCount() != jbidi.getRunCount()) {
+            if (!(len == 0 && jbidi.getRunCount() == 1)) {
+                errln("Discrepancy in getRunCount for case " +
+                      "(level=" + paraLevel + "): " +
+                      u16ToPseudo(bidi.getTextAsString()) +
+                      "\n    bidi: " + bidi.getRunCount() +
+                      "\n   jbidi: " + jbidi.getRunCount());
+            }
+        }
+        int runCount = bidi.getRunCount();
+        for (int i = 0; i < runCount; i++) {
+            if (bidi.getRunLevel(i) != jbidi.getRunLevel(i)) {
+                errln("Discrepancy in getRunLevel for run " + i +
+                      " of case " +
+                      "(level=" + paraLevel + "): " +
+                      u16ToPseudo(bidi.getTextAsString()) +
+                      "\n    bidi: " + bidi.getRunLevel(i) +
+                      "\n   jbidi: " + jbidi.getRunLevel(i));
+            }
+            if (bidi.getRunLimit(i) != jbidi.getRunLimit(i)) {
+                errln("Discrepancy in getRunLimit for run " + i +
+                      " of case " +
+                      "(level=" + paraLevel + "): " +
+                      u16ToPseudo(bidi.getTextAsString()) +
+                      "\n    bidi: " + bidi.getRunLimit(i) +
+                      "\n   jbidi: " + jbidi.getRunLimit(i));
+            }
+            if (bidi.getRunStart(i) != jbidi.getRunStart(i)) {
+                errln("Discrepancy in getRunStart for run " + i +
+                      " of case " +
+                      "(level=" + paraLevel + "): " +
+                      u16ToPseudo(bidi.getTextAsString()) +
+                      "\n    bidi: " + bidi.getRunStart(i) +
+                      "\n   jbidi: " + jbidi.getRunStart(i));
+            }
+        }
+        if (bidi.isLeftToRight() != jbidi.isLeftToRight()) {
+            errln("Discrepancy in isLeftToRight for case " +
+                  "(level=" + paraLevel + "): " +
+                  u16ToPseudo(bidi.getTextAsString()) +
+                  "\n    bidi: " + bidi.isLeftToRight() +
+                  "\n   jbidi: " + jbidi.isLeftToRight());
+        }
+        if (bidi.isMixed() != jbidi.isMixed()) {
+            errln("Discrepancy in isMixed for case " +
+                  "(level=" + paraLevel + "): " +
+                  u16ToPseudo(bidi.getTextAsString()) +
+                  "\n    bidi: " + bidi.isMixed() +
+                  "\n   jbidi: " + jbidi.isMixed());
+        }
+        if (bidi.isRightToLeft() != jbidi.isRightToLeft()) {
+            errln("Discrepancy in isRightToLeft for case " +
+                  "(level=" + paraLevel + "): " +
+                  u16ToPseudo(bidi.getTextAsString()) +
+                  "\n    bidi: " + bidi.isRightToLeft() +
+                  "\n   jbidi: " + jbidi.isRightToLeft());
+        }
+        char[] text = bidi.getText();
+        if (Bidi.requiresBidi(text, 0, text.length) !=
+            java.text.Bidi.requiresBidi(text, 0, text.length)) {
+            errln("Discrepancy in requiresBidi for case " +
+                  u16ToPseudo(bidi.getTextAsString()) +
+                  "\n    bidi: " + Bidi.requiresBidi(text, 0, text.length) +
+                  "\n   jbidi: " + java.text.Bidi.requiresBidi(text, 0, text.length));
+        }
+        /* skip the next test, since the toString implementation are
+         * not compatible
+        if (!bidi.toString().equals(jbidi.toString())) {
+            errln("Discrepancy in toString for case " +
+                  "(level=" + paraLevel + "): " +
+                  u16ToPseudo(bidi.getTextAsString() +
+                  "\n    bidi: " + bidi.toString() +
+                  "\n   jbidi: " + jbidi.toString()));
+        }
+         */
+    }
+
+    public void testCompatibility()
+    {
+        // This test case does not work well on Java 1.4/1.4.1 environment,
+        // because of insufficient Bidi implementation in these versions.
+        String javaVersion = System.getProperty("java.version");
+        if (javaVersion.startsWith("1.4.0") || javaVersion.startsWith("1.4.1")) {
+            logln("\nSkipping TestCompatibility.  The test case is known to fail on Java "
+                    + javaVersion + "\n");
+            return;
+        }
+        logln("\nEntering TestCompatibility\n");
+        /* check constant field values */
+        int val;
+        val = Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT;
+        val = Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT;
+        val = Bidi.DIRECTION_LEFT_TO_RIGHT;
+        val = Bidi.DIRECTION_RIGHT_TO_LEFT;
+        logln("last val = " + val);
+
+        String[] data = {"",
+                         /* the following 2 cases are skipped, because
+                          * java.text.Bidi has bugs which cause discrepancies
+                         "abc",
+                         "ABC",
+                          */
+                         "abc def",
+                         "ABC DEF",
+                         "abc 123 def",
+                         "ABC 123 DEF",
+                         "abc DEF ghi",
+                         "abc DEF 123 xyz",
+                         "abc GHIJ 12345 def KLM"
+                        };
+        int dataCnt = data.length;
+        Bidi bidi;
+        java.text.Bidi jbidi;
+        for (int i = 0; i < dataCnt; i++) {
+            String src = pseudoToU16(data[i]);
+            bidi = new Bidi(src, Bidi.DIRECTION_LEFT_TO_RIGHT);
+            jbidi = new java.text.Bidi(src, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT);
+            compareBidi(bidi, jbidi);
+            bidi = new Bidi(src, Bidi.DIRECTION_RIGHT_TO_LEFT);
+            jbidi = new java.text.Bidi(src, java.text.Bidi.DIRECTION_RIGHT_TO_LEFT);
+            compareBidi(bidi, jbidi);
+            char[] chars = src.toCharArray();
+            bidi = new Bidi(chars, 0, null, 0, chars.length, Bidi.DIRECTION_LEFT_TO_RIGHT);
+            jbidi = new java.text.Bidi(chars, 0, null, 0, chars.length, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT);
+            compareBidi(bidi, jbidi);
+        }
+        /* check bogus flags */
+        bidi = new Bidi("abc", 999);
+        assertEquals("\nDirection should be LTR", Bidi.LTR, bidi.getDirection());
+        /* check constructor with overriding embeddings */
+        bidi = new Bidi(new char[] { 's', 's', 's' }, 0,
+                        new byte[] {(byte) -7, (byte) -2, (byte) -3 },
+                        0, 3, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
+        jbidi = new java.text.Bidi(new char[] { 's', 's', 's' }, 0,
+                        new byte[] {(byte) -7, (byte) -2, (byte) -3 },
+                        0, 3, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
+
+        AttributedString as = new AttributedString("HEBREW 123 english MOREHEB");
+        as.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL);
+        as.addAttribute(TextAttribute.NUMERIC_SHAPING, NumericShaper.getShaper(NumericShaper.ARABIC));
+        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(1), 0, 26);
+        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(-1), 0, 6);
+        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(-1), 19, 26);
+        AttributedCharacterIterator aci = as.getIterator();
+        bidi = new Bidi(aci);
+        jbidi = new java.text.Bidi(aci);
+        compareBidi(bidi, jbidi);
+        String out = bidi.writeReordered(0);
+        logln("Output #1 of Bidi(AttributedCharacterIterator): " + out);
+
+        as = new AttributedString("HEBREW 123 english MOREHEB");
+        as.addAttribute(TextAttribute.RUN_DIRECTION, TextAttribute.RUN_DIRECTION_RTL);
+        as.addAttribute(TextAttribute.BIDI_EMBEDDING, new Integer(0), 0, 26);
+        aci = as.getIterator();
+        bidi = new Bidi(aci);
+        jbidi = new java.text.Bidi(aci);
+        compareBidi(bidi, jbidi);
+        out = bidi.writeReordered(0);
+        logln("Output #2 of Bidi(AttributedCharacterIterator): " + out);
+
+        as = new AttributedString("HEBREW 123 english MOREHEB");
+        aci = as.getIterator();
+        bidi = new Bidi(aci);
+        jbidi = new java.text.Bidi(aci);
+        compareBidi(bidi, jbidi);
+        out = bidi.writeReordered(0);
+        logln("Output #3 of Bidi(AttributedCharacterIterator): " + out);
+
+        char[] text = "abc==(123)==>def".toCharArray();
+        bidi = new Bidi(text, 3, null, 0, 10, Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
+        jbidi = new java.text.Bidi(text, 3, null, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_LEFT_TO_RIGHT);
+        compareBidi(bidi, jbidi);
+        out = bidi.writeReordered(0);
+        logln("Output of Bidi(abc==(123)==>def,3,null,0,10, DEFAULT_LTR): " + out);
+        bidi = new Bidi(text, 3, null, 0, 10, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
+        jbidi = new java.text.Bidi(text, 3, null, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
+        compareBidi(bidi, jbidi);
+        out = bidi.writeReordered(0);
+        logln("Output of Bidi(abc==(123)==>def,3,null,0,10, DEFAULT_RTL): " + out);
+        byte[] levels = new byte[] {0,0,0,-1,-1,-1,0,0,0,0};
+        bidi = new Bidi(text, 3, levels, 0, 10, Bidi.DIRECTION_LEFT_TO_RIGHT);
+        jbidi = new java.text.Bidi(text, 3, levels, 0, 10, java.text.Bidi.DIRECTION_LEFT_TO_RIGHT);
+        compareBidi(bidi, jbidi);
+        out = bidi.writeReordered(0);
+        logln("Output of Bidi(abc==(123)==>def,3,levels,0,10, LTR): " + out);
+        bidi = new Bidi(text, 3, levels, 0, 10, Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
+        jbidi = new java.text.Bidi(text, 3, levels, 0, 10, java.text.Bidi.DIRECTION_DEFAULT_RIGHT_TO_LEFT);
+        compareBidi(bidi, jbidi);
+        out = bidi.writeReordered(0);
+        logln("Output of Bidi(abc==(123)==>def,3,levels,0,10, DEFAULT_RTL): " + out);
+
+        /* test reorderVisually */
+        byte[] myLevels = new byte[] {1,2,0,1,2,1,2,0,1,2};
+        Character[] objects = new Character[10];
+        levels = new byte[objects.length];
+        for (int i = 0; i < objects.length; i++) {
+            objects[i] = new Character((char)('a'+i));
+            levels[i] = myLevels[i];
+        }
+        Bidi.reorderVisually(levels, 3, objects, 3, 7);
+        String strbidi = "";
+        for (int i = 0; i < objects.length; i++) {
+            strbidi += objects[i].toString();
+        }
+        for (int i = 0; i < objects.length; i++) {
+            objects[i] = new Character((char)('a'+i));
+            levels[i] = myLevels[i];
+        }
+        java.text.Bidi.reorderVisually(levels, 3, objects, 3, 7);
+        String strjbidi = "";
+        for (int i = 0; i < objects.length; i++) {
+            strjbidi += objects[i].toString();
+        }
+        if (!strjbidi.equals(strbidi)) {
+            errln("Discrepancy in reorderVisually " +
+                  "\n      bidi: " + strbidi +
+                  "\n     jbidi: " + strjbidi);
+        } else {
+            logln("Correct match in reorderVisually " +
+                  "\n      bidi: " + strbidi +
+                  "\n     jbidi: " + strjbidi);
+        }
+
+        logln("\nExiting TestCompatibility\n");
+    }
+
+    public static void main(String[] args) {
+        try {
+            new TestCompatibility().run(args);
+        }
+        catch (Exception e) {
+            System.out.println(e);
+        }
+    }
+}
+//#endif