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-2010, International Business Machines Corporation and    *
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * others. All Rights Reserved.                                                *
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.dev.test.translit;
102d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubertimport org.junit.Test;
112d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.dev.test.TestFmwk;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.ReplaceableString;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.Transliterator;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSet;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @test
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @summary Error condition test of Transliterator
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class ErrorTest extends TestFmwk {
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
232d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    @Test
247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestTransliteratorErrors() {
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String trans = "Latin-Greek";
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String bogusID = "LATINGREEK-GREEKLATIN";
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String newID = "Bogus-Latin";
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String newIDRules = "zzz > Z; f <> ph";
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String bogusRules = "a } [b-g m-p ";
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ReplaceableString testString =
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new ReplaceableString("A quick fox jumped over the lazy dog.");
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String insertString = "cats and dogs";
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        int stoppedAt = 0, len;
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Transliterator.Position pos = new Transliterator.Position();
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Transliterator t =
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Transliterator.getInstance(trans, Transliterator.FORWARD);
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (t == null) {
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: construction of Latin-Greek");
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return;
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        len = testString.length();
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        stoppedAt = t.transliterate(testString, 0, 100);
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (stoppedAt != -1) {
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Out of bounds check failed (1).");
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (testString.length() != len) {
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            testString =
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new ReplaceableString("A quick fox jumped over the lazy dog.");
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Transliterate fails and the target string was modified.");
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        stoppedAt = t.transliterate(testString, 100, testString.length() - 1);
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (stoppedAt != -1) {
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Out of bounds check failed (2).");
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if (testString.length() != len) {
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            testString =
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                new ReplaceableString("A quick fox jumped over the lazy dog.");
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Transliterate fails and the target string was modified.");
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.start = 100;
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.limit = testString.length();
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            t.transliterate(testString, pos);
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Start offset is out of bounds, error not reported.");
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("Start offset is out of bounds and detected.");
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.limit = 100;
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.start = 0;
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            t.transliterate(testString, pos);
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Limit offset is out of bounds, error not reported.\n");
737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("Start offset is out of bounds and detected.");
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        len = pos.contextLimit = testString.length();
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.contextStart = 0;
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.limit = len - 1;
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.start = 5;
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            t.transliterate(testString, pos, insertString);
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (len == pos.limit) {
837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: Test insertion with string: the transliteration position limit didn't change as expected.");
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("Insertion test with string failed for some reason.");
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.contextStart = 0;
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.contextLimit = testString.length();
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.limit = testString.length() - 1;
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.start = 5;
927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            t.transliterate(testString, pos, 0x0061);
947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (len == pos.limit) {
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: Test insertion with character: the transliteration position limit didn't change as expected.");
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Insertion test with UTF-16 code point failed for some reason.");
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        len = pos.limit = testString.length();
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.contextStart = 0;
1027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.contextLimit = testString.length() - 1;
1037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        pos.start = 5;
1047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            t.transliterate(testString, pos, insertString);
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Out of bounds check failed (3).");
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (testString.length() != len) {
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: The input string was modified though the offsets were out of bounds.");
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("Insertion test with out of bounds indexes.");
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Transliterator t1 = null;
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            t1 = Transliterator.getInstance(bogusID, Transliterator.FORWARD);
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (t1 != null) {
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: construction of bogus ID \"LATINGREEK-GREEKLATIN\"");
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
1207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //try { // unneeded - Exception cannot be thrown
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Transliterator t2 =
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Transliterator.createFromRules(
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                newID,
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                newIDRules,
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Transliterator.FORWARD);
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Transliterator t3 = t2.getInverse();
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: The newID transliterator was not registered so createInverse should fail.");
1317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (t3 != null) {
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: The newID transliterator was not registered so createInverse should fail.");
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (Exception e) {
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //} catch (Exception e) { }
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            Transliterator t4 =
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Transliterator.createFromRules(
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    newID,
1417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    bogusRules,
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    Transliterator.FORWARD);
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (t4 != null) {
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: The rules is malformed but error was not reported.");
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (Exception e) {
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1502d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    @Test
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestUnicodeSetErrors() {
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String badPattern = "[[:L:]-[0x0300-0x0400]";
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        UnicodeSet set = new UnicodeSet();
1547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        //String result;
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!set.isEmpty()) {
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: The default ctor of UnicodeSet created a non-empty object.");
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            set.applyPattern(badPattern);
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Applied a bad pattern to the UnicodeSet object okay.");
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("Test applying with the bad pattern.");
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            new UnicodeSet(badPattern);
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Created a UnicodeSet based on bad patterns.");
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            logln("Test constructing with the bad pattern.");
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    public void TestUniToHexErrors() {
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        Transliterator t = null;
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        try {
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            t = new UnicodeToHexTransliterator("", true, null);
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            if (t != null) {
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//                errln("FAIL: Created a UnicodeToHexTransliterator with an empty pattern.");
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            }
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        } catch (IllegalArgumentException e) {
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        }
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        try {
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            t = new UnicodeToHexTransliterator("\\x", true, null);
1847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            if (t != null) {
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//                errln("FAIL: Created a UnicodeToHexTransliterator with a bad pattern.");
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            }
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        } catch (IllegalArgumentException e) {
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        }
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        t = new UnicodeToHexTransliterator();
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        try {
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            ((UnicodeToHexTransliterator) t).applyPattern("\\x");
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            errln("FAIL: UnicodeToHexTransliterator::applyPattern succeeded with a bad pattern.");
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        } catch (Exception e) {
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        }
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    }
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1972d2bb24f747c65578da13d5b13b82f0669690461Fredrik Roubert    @Test
1987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public void TestRBTErrors() {
1997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String rules = "ab>y";
2017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String id = "MyRandom-YReverse";
2027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        String goodPattern = "[[:L:]&[\\u0000-\\uFFFF]]"; /* all BMP letters */
2037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        UnicodeSet set = null;
2047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
2057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            set = new UnicodeSet(goodPattern);
2067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            try {
2077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Transliterator t =
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    Transliterator.createFromRules(id, rules, Transliterator.REVERSE);
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                t.setFilter(set);
2107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Transliterator.registerClass(id, t.getClass(), null);
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                Transliterator.unregister(id);
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                try {
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    Transliterator.getInstance(id, Transliterator.REVERSE);
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    errln("FAIL: construction of unregistered ID should have failed.");
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                } catch (IllegalArgumentException e) {
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } catch (IllegalArgumentException e) {
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                errln("FAIL: Was not able to create a good RBT to test registration.");
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (IllegalArgumentException e) {
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            errln("FAIL: Was not able to create a good UnicodeSet based on valid patterns.");
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return;
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    public void TestHexToUniErrors() {
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        Transliterator t = null;
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        //try { // unneeded - exception cannot be thrown
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        t = new HexToUnicodeTransliterator("", null);
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        //} catch (Exception e) {
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        //    errln("FAIL: Could not create a HexToUnicodeTransliterator with an empty pattern.");
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        //}
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        try {
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            t = new HexToUnicodeTransliterator("\\x", null);
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            errln("FAIL: Created a HexToUnicodeTransliterator with a bad pattern.");
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        } catch (IllegalArgumentException e) {
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        }
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        t = new HexToUnicodeTransliterator();
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        try {
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            ((HexToUnicodeTransliterator) t).applyPattern("\\x");
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//            errln("FAIL: HexToUnicodeTransliterator::applyPattern succeeded with a bad pattern.");
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        } catch (IllegalArgumentException e) {
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//        }
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//    }
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
247