/* ******************************************************************************* * Copyright (C) 2007, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* */ package com.ibm.icu.dev.test.bidi; import com.ibm.icu.text.Bidi; /** * Regression test for Bidi failure recovery * * @author Lina Kemmel, Matitiahu Allouche */ public class TestFailureRecovery extends BidiTest { public void testFailureRecovery() { logln("\nEntering TestFailureRecovery\n"); Bidi bidi = new Bidi(); try { bidi.setPara("abc", (byte)(Bidi.LEVEL_DEFAULT_LTR - 1), null); errln("Bidi.setPara did not fail when passed too big para level"); } catch (IllegalArgumentException e) { logln("OK: Got exception for bidi.setPara(..., Bidi.LEVEL_DEFAULT_LTR - 1, ...)" + " as expected: " + e.getMessage()); } try { bidi.setPara("abc", (byte)(-1), null); errln("Bidi.setPara did not fail when passed negative para level"); } catch (IllegalArgumentException e) { logln("OK: Got exception for bidi.setPara(..., -1, ...)" + " as expected: " + e.getMessage()); } try { Bidi.writeReverse(null, 0); errln("Bidi.writeReverse did not fail when passed a null string"); } catch (IllegalArgumentException e) { logln("OK: Got exception for Bidi.writeReverse(null) as expected: " + e.getMessage()); } bidi = new Bidi(); try { bidi.setLine(0, 1); errln("bidi.setLine did not fail when called before valid setPara()"); } catch (IllegalStateException e) { logln("OK: Got exception for Bidi.setLine(0, 1) as expected: " + e.getMessage()); } try { bidi.getDirection(); errln("bidi.getDirection did not fail when called before valid setPara()"); } catch (IllegalStateException e) { logln("OK: Got exception for Bidi.getDirection() as expected: " + e.getMessage()); } bidi.setPara("abc", Bidi.LTR, null); try { bidi.getLevelAt(3); errln("bidi.getLevelAt did not fail when called with bad argument"); } catch (IllegalArgumentException e) { logln("OK: Got exception for Bidi.getLevelAt(3) as expected: " + e.getMessage()); } try { bidi = new Bidi(-1, 0); errln("Bidi constructor did not fail when called with bad argument"); } catch (IllegalArgumentException e) { logln("OK: Got exception for Bidi(-1,0) as expected: " + e.getMessage()); } bidi = new Bidi(2, 1); try { bidi.setPara("abc", Bidi.LTR, null); errln("setPara did not fail when called with text too long"); } catch (OutOfMemoryError e) { logln("OK: Got exception for setPara(\"abc\") as expected: " + e.getMessage()); } try { bidi.setPara("=2", Bidi.RTL, null); bidi.countRuns(); errln("countRuns did not fail when called for too many runs"); } catch (OutOfMemoryError e) { logln("OK: Got exception for countRuns as expected: " + e.getMessage()); } int rm = bidi.getReorderingMode(); bidi.setReorderingMode(Bidi.REORDER_DEFAULT - 1); if (rm != bidi.getReorderingMode()) { errln("setReorderingMode with bad argument #1 should have no effect"); } bidi.setReorderingMode(9999); if (rm != bidi.getReorderingMode()) { errln("setReorderingMode with bad argument #2 should have no effect"); } /* Try a surrogate char */ bidi = new Bidi(); bidi.setPara("\uD800\uDC00", Bidi.RTL, null); if (bidi.getDirection() != Bidi.MIXED) { errln("getDirection for 1st surrogate char should be MIXED"); } byte[] levels = new byte[] {6,5,4}; try { bidi.setPara("abc", (byte)5, levels); errln("setPara did not fail when called with bad levels"); } catch (IllegalArgumentException e) { logln("OK: Got exception for setPara(..., levels) as expected: " + e.getMessage()); } logln("\nExiting TestFailureRecovery\n"); } public static void main(String[] args) { try { new TestFailureRecovery().run(args); } catch (Exception e) { System.out.println(e); } } }