1aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/* GENERATED SOURCE. DO NOT MODIFY. */
2f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// © 2016 and later: Unicode, Inc. and others.
3f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert// License & terms of use: http://www.unicode.org/copyright.html#License
4aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
5aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
6aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Copyright (C) 2001-2010, International Business Machines Corporation and    *
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * others. All Rights Reserved.                                                *
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *******************************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.translit;
11f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
12f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
13aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.dev.test.TestFmwk;
14aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.ReplaceableString;
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.Transliterator;
16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.UnicodeSet;
17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * @test
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * @summary Error condition test of Transliterator
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpublic class ErrorTest extends TestFmwk {
23aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
24f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
25aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestTransliteratorErrors() {
26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String trans = "Latin-Greek";
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String bogusID = "LATINGREEK-GREEKLATIN";
28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String newID = "Bogus-Latin";
29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String newIDRules = "zzz > Z; f <> ph";
30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String bogusRules = "a } [b-g m-p ";
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        ReplaceableString testString =
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            new ReplaceableString("A quick fox jumped over the lazy dog.");
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String insertString = "cats and dogs";
34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int stoppedAt = 0, len;
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Transliterator.Position pos = new Transliterator.Position();
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Transliterator t =
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            Transliterator.getInstance(trans, Transliterator.FORWARD);
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (t == null) {
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: construction of Latin-Greek");
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return;
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        len = testString.length();
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        stoppedAt = t.transliterate(testString, 0, 100);
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (stoppedAt != -1) {
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Out of bounds check failed (1).");
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (testString.length() != len) {
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            testString =
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                new ReplaceableString("A quick fox jumped over the lazy dog.");
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Transliterate fails and the target string was modified.");
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        stoppedAt = t.transliterate(testString, 100, testString.length() - 1);
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (stoppedAt != -1) {
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Out of bounds check failed (2).");
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } else if (testString.length() != len) {
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            testString =
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                new ReplaceableString("A quick fox jumped over the lazy dog.");
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Transliterate fails and the target string was modified.");
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.start = 100;
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.limit = testString.length();
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            t.transliterate(testString, pos);
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Start offset is out of bounds, error not reported.");
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("Start offset is out of bounds and detected.");
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.limit = 100;
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.start = 0;
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            t.transliterate(testString, pos);
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Limit offset is out of bounds, error not reported.\n");
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("Start offset is out of bounds and detected.");
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        len = pos.contextLimit = testString.length();
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.contextStart = 0;
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.limit = len - 1;
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.start = 5;
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            t.transliterate(testString, pos, insertString);
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (len == pos.limit) {
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                errln("FAIL: Test insertion with string: the transliteration position limit didn't change as expected.");
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Insertion test with string failed for some reason.");
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.contextStart = 0;
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.contextLimit = testString.length();
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.limit = testString.length() - 1;
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.start = 5;
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            t.transliterate(testString, pos, 0x0061);
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (len == pos.limit) {
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                errln("FAIL: Test insertion with character: the transliteration position limit didn't change as expected.");
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Insertion test with UTF-16 code point failed for some reason.");
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        len = pos.limit = testString.length();
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.contextStart = 0;
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.contextLimit = testString.length() - 1;
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        pos.start = 5;
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            t.transliterate(testString, pos, insertString);
107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Out of bounds check failed (3).");
108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (testString.length() != len) {
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                errln("FAIL: The input string was modified though the offsets were out of bounds.");
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("Insertion test with out of bounds indexes.");
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Transliterator t1 = null;
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            t1 = Transliterator.getInstance(bogusID, Transliterator.FORWARD);
117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (t1 != null) {
118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                errln("FAIL: construction of bogus ID \"LATINGREEK-GREEKLATIN\"");
119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //try { // unneeded - Exception cannot be thrown
124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Transliterator t2 =
125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            Transliterator.createFromRules(
126aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                newID,
127aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                newIDRules,
128aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                Transliterator.FORWARD);
129aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
130aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            Transliterator t3 = t2.getInverse();
131aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: The newID transliterator was not registered so createInverse should fail.");
132aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (t3 != null) {
133aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                errln("FAIL: The newID transliterator was not registered so createInverse should fail.");
134aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
135aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (Exception e) {
136aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
137aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //} catch (Exception e) { }
138aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
139aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            Transliterator t4 =
140aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                Transliterator.createFromRules(
141aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    newID,
142aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    bogusRules,
143aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    Transliterator.FORWARD);
144aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            if (t4 != null) {
145aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                errln("FAIL: The rules is malformed but error was not reported.");
146aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
147aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (Exception e) {
148aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
149aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
150aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
151f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
152aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestUnicodeSetErrors() {
153aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String badPattern = "[[:L:]-[0x0300-0x0400]";
154aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        UnicodeSet set = new UnicodeSet();
155aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //String result;
156aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
157aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (!set.isEmpty()) {
158aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: The default ctor of UnicodeSet created a non-empty object.");
159aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
160aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
161aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            set.applyPattern(badPattern);
162aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Applied a bad pattern to the UnicodeSet object okay.");
163aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
164aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("Test applying with the bad pattern.");
165aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
166aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
167aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            new UnicodeSet(badPattern);
168aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Created a UnicodeSet based on bad patterns.");
169aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
170aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("Test constructing with the bad pattern.");
171aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
172aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
173aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
174aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//    public void TestUniToHexErrors() {
175aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        Transliterator t = null;
176aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        try {
177aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            t = new UnicodeToHexTransliterator("", true, null);
178aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            if (t != null) {
179aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//                errln("FAIL: Created a UnicodeToHexTransliterator with an empty pattern.");
180aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            }
181aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        } catch (IllegalArgumentException e) {
182aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        }
183aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        try {
184aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            t = new UnicodeToHexTransliterator("\\x", true, null);
185aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            if (t != null) {
186aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//                errln("FAIL: Created a UnicodeToHexTransliterator with a bad pattern.");
187aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            }
188aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        } catch (IllegalArgumentException e) {
189aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        }
190aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        t = new UnicodeToHexTransliterator();
191aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        try {
192aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            ((UnicodeToHexTransliterator) t).applyPattern("\\x");
193aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            errln("FAIL: UnicodeToHexTransliterator::applyPattern succeeded with a bad pattern.");
194aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        } catch (Exception e) {
195aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        }
196aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//    }
197aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
198f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
199aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void TestRBTErrors() {
200aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
201aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String rules = "ab>y";
202aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String id = "MyRandom-YReverse";
203aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        String goodPattern = "[[:L:]&[\\u0000-\\uFFFF]]"; /* all BMP letters */
204aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        UnicodeSet set = null;
205aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
206aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            set = new UnicodeSet(goodPattern);
207aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            try {
208aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                Transliterator t =
209aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    Transliterator.createFromRules(id, rules, Transliterator.REVERSE);
210aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                t.setFilter(set);
211aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                Transliterator.registerClass(id, t.getClass(), null);
212aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                Transliterator.unregister(id);
213aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                try {
214aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    Transliterator.getInstance(id, Transliterator.REVERSE);
215aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    errln("FAIL: construction of unregistered ID should have failed.");
216aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                } catch (IllegalArgumentException e) {
217aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                }
218aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            } catch (IllegalArgumentException e) {
219aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                errln("FAIL: Was not able to create a good RBT to test registration.");
220aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            }
221aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
222aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("FAIL: Was not able to create a good UnicodeSet based on valid patterns.");
223aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            return;
224aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
225aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
226aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
227aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//    public void TestHexToUniErrors() {
228aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        Transliterator t = null;
229aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        //try { // unneeded - exception cannot be thrown
230aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        t = new HexToUnicodeTransliterator("", null);
231aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        //} catch (Exception e) {
232aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        //    errln("FAIL: Could not create a HexToUnicodeTransliterator with an empty pattern.");
233aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        //}
234aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        try {
235aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            t = new HexToUnicodeTransliterator("\\x", null);
236aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            errln("FAIL: Created a HexToUnicodeTransliterator with a bad pattern.");
237aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        } catch (IllegalArgumentException e) {
238aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        }
239aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//
240aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        t = new HexToUnicodeTransliterator();
241aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        try {
242aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            ((HexToUnicodeTransliterator) t).applyPattern("\\x");
243aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//            errln("FAIL: HexToUnicodeTransliterator::applyPattern succeeded with a bad pattern.");
244aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        } catch (IllegalArgumentException e) {
245aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//        }
246aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin//    }
247aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
248