2 *******************************************************************************
\r
3 * Copyright (C) 2007, International Business Machines
\r
4 * Corporation and others. All Rights Reserved.
\r
5 *******************************************************************************
\r
8 package com.ibm.icu.dev.test.bidi;
\r
10 import com.ibm.icu.text.Bidi;
\r
13 * Regression test for Bidi failure recovery
\r
15 * @author Lina Kemmel, Matitiahu Allouche
\r
18 public class TestFailureRecovery extends BidiTest {
\r
20 public void testFailureRecovery()
\r
22 logln("\nEntering TestFailureRecovery\n");
\r
23 Bidi bidi = new Bidi();
\r
25 bidi.setPara("abc", (byte)(Bidi.LEVEL_DEFAULT_LTR - 1), null);
\r
26 errln("Bidi.setPara did not fail when passed too big para level");
\r
27 } catch (IllegalArgumentException e) {
\r
28 logln("OK: Got exception for bidi.setPara(..., Bidi.LEVEL_DEFAULT_LTR - 1, ...)"
\r
29 + " as expected: " + e.getMessage());
\r
32 bidi.setPara("abc", (byte)(-1), null);
\r
33 errln("Bidi.setPara did not fail when passed negative para level");
\r
34 } catch (IllegalArgumentException e) {
\r
35 logln("OK: Got exception for bidi.setPara(..., -1, ...)"
\r
36 + " as expected: " + e.getMessage());
\r
39 Bidi.writeReverse(null, 0);
\r
40 errln("Bidi.writeReverse did not fail when passed a null string");
\r
41 } catch (IllegalArgumentException e) {
\r
42 logln("OK: Got exception for Bidi.writeReverse(null) as expected: "
\r
48 errln("bidi.setLine did not fail when called before valid setPara()");
\r
49 } catch (IllegalStateException e) {
\r
50 logln("OK: Got exception for Bidi.setLine(0, 1) as expected: "
\r
54 bidi.getDirection();
\r
55 errln("bidi.getDirection did not fail when called before valid setPara()");
\r
56 } catch (IllegalStateException e) {
\r
57 logln("OK: Got exception for Bidi.getDirection() as expected: "
\r
60 bidi.setPara("abc", Bidi.LTR, null);
\r
63 errln("bidi.getLevelAt did not fail when called with bad argument");
\r
64 } catch (IllegalArgumentException e) {
\r
65 logln("OK: Got exception for Bidi.getLevelAt(3) as expected: "
\r
69 bidi = new Bidi(-1, 0);
\r
70 errln("Bidi constructor did not fail when called with bad argument");
\r
71 } catch (IllegalArgumentException e) {
\r
72 logln("OK: Got exception for Bidi(-1,0) as expected: "
\r
75 bidi = new Bidi(2, 1);
\r
77 bidi.setPara("abc", Bidi.LTR, null);
\r
78 errln("setPara did not fail when called with text too long");
\r
79 } catch (OutOfMemoryError e) {
\r
80 logln("OK: Got exception for setPara(\"abc\") as expected: "
\r
84 bidi.setPara("=2", Bidi.RTL, null);
\r
86 errln("countRuns did not fail when called for too many runs");
\r
87 } catch (OutOfMemoryError e) {
\r
88 logln("OK: Got exception for countRuns as expected: "
\r
91 int rm = bidi.getReorderingMode();
\r
92 bidi.setReorderingMode(Bidi.REORDER_DEFAULT - 1);
\r
93 if (rm != bidi.getReorderingMode()) {
\r
94 errln("setReorderingMode with bad argument #1 should have no effect");
\r
96 bidi.setReorderingMode(9999);
\r
97 if (rm != bidi.getReorderingMode()) {
\r
98 errln("setReorderingMode with bad argument #2 should have no effect");
\r
100 /* Try a surrogate char */
\r
102 bidi.setPara("\uD800\uDC00", Bidi.RTL, null);
\r
103 if (bidi.getDirection() != Bidi.MIXED) {
\r
104 errln("getDirection for 1st surrogate char should be MIXED");
\r
106 byte[] levels = new byte[] {6,5,4};
\r
108 bidi.setPara("abc", (byte)5, levels);
\r
109 errln("setPara did not fail when called with bad levels");
\r
110 } catch (IllegalArgumentException e) {
\r
111 logln("OK: Got exception for setPara(..., levels) as expected: "
\r
115 logln("\nExiting TestFailureRecovery\n");
\r
119 public static void main(String[] args) {
\r
121 new TestFailureRecovery().run(args);
\r
123 catch (Exception e) {
\r
124 System.out.println(e);
\r