コード例 #1
0
        public void TestIncrementalProgress(string lang, string text)
        {
            var targets = Transliterator.GetAvailableTargets(lang);

            foreach (string target in targets)
            {
                var variants = Transliterator.GetAvailableVariants(lang, target);
                foreach (var variant in variants)
                {
                    String id = lang + "-" + target + "/" + variant;
                    Logln("id: " + id);

                    Transliterator t = Transliterator.GetInstance(id);
                    CheckIncrementalAux(t, text);

                    String rev = t.Transliterate(text);

                    // Special treatment: This transliterator has no registered inverse, skip for now.
                    if (id.Equals("Devanagari-Arabic/"))
                    {
                        continue;
                    }

                    Transliterator inv = t.GetInverse();
                    CheckIncrementalAux(inv, rev);
                }
            }
        }
コード例 #2
0
        public void TestRoundTrip()
        {
            String[] HANGUL = { "\uAC03\uC2F8",
                                "\uC544\uC5B4" };

            Transliterator latinJamo  = Transliterator.GetInstance("Latin-Jamo");
            Transliterator jamoLatin  = latinJamo.GetInverse();
            Transliterator jamoHangul = Transliterator.GetInstance("NFC");
            Transliterator hangulJamo = Transliterator.GetInstance("NFD");

            StringBuffer buf = new StringBuffer();

            for (int i = 0; i < HANGUL.Length; ++i)
            {
                String hangul  = HANGUL[i];
                String jamo    = hangulJamo.Transliterate(hangul);
                String latin   = jamoLatin.Transliterate(jamo);
                String jamo2   = latinJamo.Transliterate(latin);
                String hangul2 = jamoHangul.Transliterate(jamo2);
                buf.Length = (0);
                buf.Append(hangul + " => " +
                           jamoToName(jamo) + " => " +
                           latin + " => " + jamoToName(jamo2)
                           + " => " + hangul2
                           );
                if (!hangul.Equals(hangul2))
                {
                    Errln("FAIL: " + Utility.Escape(buf.ToString()));
                }
                else
                {
                    Logln(Utility.Escape(buf.ToString()));
                }
            }
        }
コード例 #3
0
        public void TestJamo()
        {
            Transliterator latinJamo = Transliterator.GetInstance("Latin-Jamo");
            Transliterator jamoLatin = latinJamo.GetInverse();

            String[] CASE =
            {
                // Column 1 is the latin text L1 to be fed to Latin-Jamo
                // to yield output J.

                // Column 2 is expected value of J.  J is fed to
                // Jamo-Latin to yield output L2.

                // Column 3 is expected value of L2.  If the expected
                // value of L2 is L1, then L2 is null.

                // add tests for the update to fix problems where it didn't follow the standard
                // see also http://www.unicode.org/cldr/data/charts/transforms/Latin-Hangul.html
                "gach",    "(Gi)(A)(Cf)",                null,
                "geumhui", "(Gi)(EU)(Mf)(Hi)(YI)",       null,
                "choe",    "(Ci)(OE)",                   null,
                "wo",      "(IEUNG)(WEO)",               null,
                "Wonpil",  "(IEUNG)(WEO)(Nf)(Pi)(I)(L)", "wonpil",
                "GIPPEUM", "(Gi)(I)(BB)(EU)(Mf)",        "gippeum",
                "EUTTEUM", "(IEUNG)(EU)(DD)(EU)(Mf)",    "eutteum",
                "KKOTNAE", "(GGi)(O)(Tf)(Ni)(AE)",       "kkotnae",
                "gaga",    "(Gi)(A)(Gi)(A)",             null,
                "gag-a",   "(Gi)(A)(Gf)(IEUNG)(A)",      null,
                "gak-ka",  "(Gi)(A)(Kf)(Ki)(A)",         null,
                "gakka",   "(Gi)(A)(GGi)(A)",            null,
                "gakk-a",  "(Gi)(A)(GGf)(IEUNG)(A)",     null,
                "gakkka",  "(Gi)(A)(GGf)(Ki)(A)",        null,
                "gak-kka", "(Gi)(A)(Kf)(GGi)(A)",        null,

                "bab",     "(Bi)(A)(Bf)",                null,
                "babb",    "(Bi)(A)(Bf)(Bi)(EU)",        "babbeu",
                "babbba",  "(Bi)(A)(Bf)(Bi)(EU)(Bi)(A)", "babbeuba",
                "bagg",    "(Bi)(A)(Gf)(Gi)(EU)",        "baggeu",
                "baggga",  "(Bi)(A)(Gf)(Gi)(EU)(Gi)(A)", "baggeuga",
                //"bag"+SEP+"gga", "(Bi)(A)(Gf)"+SEP+"(Gi)(EU)(Gi)(A)", "bag"+SEP+"geuga",
                "kabsa",   "(Ki)(A)(Bf)(Si)(A)",         null,
                "kabska",  "(Ki)(A)(BS)(Ki)(A)",         null,
                "gabsbka", "(Gi)(A)(BS)(Bi)(EU)(Ki)(A)", "gabsbeuka", // not (Kf)
                "gga",     "(Gi)(EU)(Gi)(A)",            "geuga",
                "bsa",     "(Bi)(EU)(Si)(A)",            "beusa",
                "agg",     "(IEUNG)(A)(Gf)(Gi)(EU)",     "aggeu",
                "agga",    "(IEUNG)(A)(Gf)(Gi)(A)",      null,
                "la",      "(R)(A)",                     null,
                "bs",      "(Bi)(EU)(Sf)",               "beus",
                "kalgga",  "(Ki)(A)(L)(Gi)(EU)(Gi)(A)",  "kalgeuga",

                // 'r' in a final position is treated like 'l'
                "karka",   "(Ki)(A)(L)(Ki)(A)",          "kalka",
            };

            for (int i = 0; i < CASE.Length; i += 3)
            {
                String jamo = nameToJamo(CASE[i + 1]);
                if (CASE[i + 2] == null)
                {
                    TransliteratorTest.Expect(latinJamo, CASE[i], jamo, jamoLatin);
                }
                else
                {
                    // Handle case where round-trip is expected to fail
                    TransliteratorTest.Expect(latinJamo, CASE[i], jamo);
                    TransliteratorTest.Expect(jamoLatin, jamo, CASE[i + 2]);
                }
            }
        }
コード例 #4
0
        public void TestRealText()
        {
            Transliterator latinJamo  = Transliterator.GetInstance("Latin-Jamo");
            Transliterator jamoLatin  = latinJamo.GetInverse();
            Transliterator jamoHangul = Transliterator.GetInstance("NFC");
            Transliterator hangulJamo = Transliterator.GetInstance("NFD");
            //Transliterator rt = new CompoundTransliterator(new Transliterator[] {
            //    hangulJamo, jamoLatin, latinJamo, jamoHangul });
            Transliterator rt = Transliterator.GetInstance("NFD;Jamo-Latin;Latin-Jamo;NFC");

            int          pos    = 0;
            StringBuffer buf    = new StringBuffer();
            int          total  = 0;
            int          errors = 0;

            while (pos < WHAT_IS_UNICODE.Length)
            {
                int space = WHAT_IS_UNICODE.IndexOf(' ', pos + 1);
                if (space < 0)
                {
                    space = WHAT_IS_UNICODE.Length;
                }
                if (pos < space)
                {
                    ++total;
                    String hangul  = WHAT_IS_UNICODE.Substring(pos, space - pos); // ICU4N: Corrected 2nd parameter
                    String hangulX = rt.Transliterate(hangul);
                    if (!hangul.Equals(hangulX))
                    {
                        ++errors;
                        String jamo    = hangulJamo.Transliterate(hangul);
                        String latin   = jamoLatin.Transliterate(jamo);
                        String jamo2   = latinJamo.Transliterate(latin);
                        String hangul2 = jamoHangul.Transliterate(jamo2);
                        if (hangul.Equals(hangul2))
                        {
                            buf.Length = (0);
                            buf.Append("FAIL (Compound transliterator problem): ");
                            buf.Append(hangul + " => " +
                                       jamoToName(jamo) + " => " +
                                       latin + " => " + jamoToName(jamo2)
                                       + " => " + hangul2 +
                                       "; but " + hangul + " =cpd=> " + jamoToName(hangulX)
                                       );
                            Errln(Utility.Escape(buf.ToString()));
                        }
                        else if (jamo.Equals(jamo2))
                        {
                            buf.Length = (0);
                            buf.Append("FAIL (Jamo<>Hangul problem): ");
                            if (!hangul2.Equals(hangulX))
                            {
                                buf.Append("(Weird: " + hangulX + " != " + hangul2 + ")");
                            }
                            buf.Append(hangul + " => " +
                                       jamoToName(jamo) + " => " +
                                       latin + " => " + jamoToName(jamo2)
                                       + " => " + hangul2
                                       );
                            Errln(Utility.Escape(buf.ToString()));
                        }
                        else
                        {
                            buf.Length = (0);
                            buf.Append("FAIL: ");
                            if (!hangul2.Equals(hangulX))
                            {
                                buf.Append("(Weird: " + hangulX + " != " + hangul2 + ")");
                            }
                            // The Hangul-Jamo conversion is not usually the
                            // bug here, so we hide it from display.
                            // Uncomment lines to see the Hangul.
                            buf.Append(//hangul + " => " +
                                jamoToName(jamo) + " => " +
                                latin + " => " + jamoToName(jamo2)
                                //+ " => " + hangul2
                                );
                            Errln(Utility.Escape(buf.ToString()));
                        }
                    }
                }
                pos = space + 1;
            }
            if (errors != 0)
            {
                Errln("Test word failures: " + errors + " out of " + total);
            }
            else
            {
                Logln("All " + total + " test words passed");
            }
        }
コード例 #5
0
ファイル: ErrorTest.cs プロジェクト: SilentCC/ICU4N
        public void TestTransliteratorErrors()
        {
            String            trans      = "Latin-Greek";
            String            bogusID    = "LATINGREEK-GREEKLATIN";
            String            newID      = "Bogus-Latin";
            String            newIDRules = "zzz > Z; f <> ph";
            String            bogusRules = "a } [b-g m-p ";
            ReplaceableString testString =
                new ReplaceableString("A quick fox jumped over the lazy dog.");
            String insertString = "cats and dogs";
            int    stoppedAt = 0, len;

            Transliterator.Position pos = new Transliterator.Position();

            Transliterator t =
                Transliterator.GetInstance(trans, Transliterator.FORWARD);

            if (t == null)
            {
                Errln("FAIL: construction of Latin-Greek");
                return;
            }
            len       = testString.Length;
            stoppedAt = t.Transliterate(testString, 0, 100);
            if (stoppedAt != -1)
            {
                Errln("FAIL: Out of bounds check failed (1).");
            }
            else if (testString.Length != len)
            {
                testString =
                    new ReplaceableString("A quick fox jumped over the lazy dog.");
                Errln("FAIL: Transliterate fails and the target string was modified.");
            }
            stoppedAt = t.Transliterate(testString, 100, testString.Length - 1);
            if (stoppedAt != -1)
            {
                Errln("FAIL: Out of bounds check failed (2).");
            }
            else if (testString.Length != len)
            {
                testString =
                    new ReplaceableString("A quick fox jumped over the lazy dog.");
                Errln("FAIL: Transliterate fails and the target string was modified.");
            }
            pos.Start = 100;
            pos.Limit = testString.Length;
            try
            {
                t.Transliterate(testString, pos);
                Errln("FAIL: Start offset is out of bounds, error not reported.");
            }
            catch (ArgumentException e)
            {
                Logln("Start offset is out of bounds and detected.");
            }
            pos.Limit = 100;
            pos.Start = 0;

            try
            {
                t.Transliterate(testString, pos);
                Errln("FAIL: Limit offset is out of bounds, error not reported.\n");
            }
            catch (ArgumentException e)
            {
                Logln("Start offset is out of bounds and detected.");
            }
            len = pos.ContextLimit = testString.Length;
            pos.ContextStart = 0;
            pos.Limit        = len - 1;
            pos.Start        = 5;
            try
            {
                t.Transliterate(testString, pos, insertString);
                if (len == pos.Limit)
                {
                    Errln("FAIL: Test insertion with string: the transliteration position limit didn't change as expected.");
                }
            }
            catch (ArgumentException e)
            {
                Errln("Insertion test with string failed for some reason.");
            }
            pos.ContextStart = 0;
            pos.ContextLimit = testString.Length;
            pos.Limit        = testString.Length - 1;
            pos.Start        = 5;
            try
            {
                t.Transliterate(testString, pos, 0x0061);
                if (len == pos.Limit)
                {
                    Errln("FAIL: Test insertion with character: the transliteration position limit didn't change as expected.");
                }
            }
            catch (ArgumentException e)
            {
                Errln("FAIL: Insertion test with UTF-16 code point failed for some reason.");
            }
            len = pos.Limit = testString.Length;
            pos.ContextStart = 0;
            pos.ContextLimit = testString.Length - 1;
            pos.Start        = 5;
            try
            {
                t.Transliterate(testString, pos, insertString);
                Errln("FAIL: Out of bounds check failed (3).");
                if (testString.Length != len)
                {
                    Errln("FAIL: The input string was modified though the offsets were out of bounds.");
                }
            }
            catch (ArgumentException e)
            {
                Logln("Insertion test with out of bounds indexes.");
            }
            Transliterator t1 = null;

            try
            {
                t1 = Transliterator.GetInstance(bogusID, Transliterator.FORWARD);
                if (t1 != null)
                {
                    Errln("FAIL: construction of bogus ID \"LATINGREEK-GREEKLATIN\"");
                }
            }
            catch (ArgumentException e)
            {
            }

            //try { // unneeded - Exception cannot be thrown
            Transliterator t2 =
                Transliterator.CreateFromRules(
                    newID,
                    newIDRules,
                    Transliterator.FORWARD);

            try
            {
                Transliterator t3 = t2.GetInverse();
                Errln("FAIL: The newID transliterator was not registered so createInverse should fail.");
                if (t3 != null)
                {
                    Errln("FAIL: The newID transliterator was not registered so createInverse should fail.");
                }
            }
            catch (Exception e)
            {
            }
            //} catch (Exception e) { }
            try
            {
                Transliterator t4 =
                    Transliterator.CreateFromRules(
                        newID,
                        bogusRules,
                        Transliterator.FORWARD);
                if (t4 != null)
                {
                    Errln("FAIL: The rules is malformed but error was not reported.");
                }
            }
            catch (Exception e)
            {
            }
        }