| /** |
| ******************************************************************************* |
| * Copyright (C) 2001-2002, International Business Machines Corporation and * |
| * others. All Rights Reserved. * |
| ******************************************************************************* |
| * |
| * $Source: /xsrl/Nsvn/icu/icu4j/src/com/ibm/icu/dev/test/translit/ErrorTest.java,v $ |
| * $Date: 2002/08/13 22:07:58 $ |
| * $Revision: 1.5 $ |
| * |
| ******************************************************************************* |
| */ |
| package com.ibm.icu.dev.test.translit; |
| import com.ibm.icu.dev.test.*; |
| import com.ibm.icu.lang.*; |
| import com.ibm.icu.text.*; |
| import com.ibm.icu.impl.Utility; |
| import java.io.*; |
| import java.text.ParseException; |
| |
| /** |
| * @test |
| * @summary Error condition test of Transliterator |
| */ |
| public class ErrorTest extends TestFmwk { |
| |
| public static void main(String[] args) throws Exception { |
| new ErrorTest().run(args); |
| } |
| |
| 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(IllegalArgumentException 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(IllegalArgumentException 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 (IllegalArgumentException 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 (IllegalArgumentException 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 (IllegalArgumentException 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 (IllegalArgumentException e) { } |
| |
| //try { // unneeded - Exception cannot be thrown |
| Transliterator t2 = new RuleBasedTransliterator(newID, newIDRules); |
| try { |
| Transliterator t3 = t2.getInverse(); |
| 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) { } |
| } |
| |
| public void TestUnicodeSetErrors() { |
| String badPattern="[[:L:]-[0x0300-0x0400]"; |
| UnicodeSet set = new UnicodeSet(); |
| String result; |
| |
| if (!set.isEmpty()) { |
| errln("FAIL: The default ctor of UnicodeSet created a non-empty object."); |
| } |
| try { |
| set.applyPattern(badPattern); |
| errln("FAIL: Applied a bad pattern to the UnicodeSet object okay."); |
| } catch (IllegalArgumentException e) { |
| logln("Test applying with the bad pattern."); |
| } |
| try { |
| UnicodeSet set1 = new UnicodeSet(badPattern); |
| errln("FAIL: Created a UnicodeSet based on bad patterns."); |
| } catch (IllegalArgumentException e) { |
| logln("Test constructing with the bad pattern."); |
| } |
| } |
| |
| public void TestUniToHexErrors() { |
| Transliterator t = null; |
| try { |
| t = new UnicodeToHexTransliterator("", true, null); |
| if (t != null) { |
| errln("FAIL: Created a UnicodeToHexTransliterator with an empty pattern."); |
| } |
| } catch (IllegalArgumentException e) { } |
| try { |
| t = new UnicodeToHexTransliterator("\\x", true, null); |
| if (t != null) { |
| errln("FAIL: Created a UnicodeToHexTransliterator with a bad pattern."); |
| } |
| } catch (IllegalArgumentException e) { } |
| t = new UnicodeToHexTransliterator(); |
| try { |
| ((UnicodeToHexTransliterator)t).applyPattern("\\x"); |
| errln("FAIL: UnicodeToHexTransliterator::applyPattern succeeded with a bad pattern."); |
| } catch (Exception e) { } |
| } |
| |
| public void TestRBTErrors() { |
| |
| String rules="ab>y"; |
| String id="MyRandom-YReverse"; |
| String goodPattern="[[:L:]&[\\u0000-\\uFFFF]]"; /* all BMP letters */ |
| UnicodeSet set = null; |
| try { |
| set = new UnicodeSet(goodPattern); |
| try { |
| RuleBasedTransliterator t = new RuleBasedTransliterator(id, rules, Transliterator.REVERSE, set); |
| Transliterator.registerClass(id, t.getClass(), null); |
| Transliterator.unregister(id); |
| try { |
| Transliterator t1= Transliterator.getInstance(id, Transliterator.REVERSE); |
| errln("FAIL: construction of unregistered ID should have failed."); |
| } catch (IllegalArgumentException e) { } |
| } catch (IllegalArgumentException e) { |
| errln("FAIL: Was not able to create a good RBT to test registration."); |
| } |
| } catch (IllegalArgumentException e) { |
| errln("FAIL: Was not able to create a good UnicodeSet based on valid patterns."); |
| return; |
| } |
| } |
| |
| public void TestHexToUniErrors() { |
| Transliterator t = null; |
| //try { // unneeded - exception cannot be thrown |
| t = new HexToUnicodeTransliterator("", null); |
| //} catch (Exception e) { |
| // errln("FAIL: Could not create a HexToUnicodeTransliterator with an empty pattern."); |
| //} |
| try { |
| t = new HexToUnicodeTransliterator("\\x", null); |
| errln("FAIL: Created a HexToUnicodeTransliterator with a bad pattern."); |
| } catch (IllegalArgumentException e) { } |
| |
| t = new HexToUnicodeTransliterator(); |
| try { |
| ((HexToUnicodeTransliterator)t).applyPattern("\\x"); |
| errln("FAIL: HexToUnicodeTransliterator::applyPattern succeeded with a bad pattern."); |
| } catch (IllegalArgumentException e) { } |
| } |
| } |
| |
| |