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) 2007-2013, International Business Machines
7aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*   Corporation and others.  All Rights Reserved.
8aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*******************************************************************************
9aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin*/
10aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
11aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinpackage android.icu.dev.test.bidi;
12aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
13f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertimport org.junit.Test;
14f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert
15aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffinimport android.icu.text.Bidi;
16aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
17aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin/**
18aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * Regression test for Bidi failure recovery
19aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin *
20aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin * @author Lina Kemmel, Matitiahu Allouche
21aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin */
22aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
23f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubertpublic class TestFailureRecovery extends BidiFmwk {
24aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
25f86f25d102340da66b9c7cb6b2d5ecdc0de43ecfFredrik Roubert    @Test
26aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    public void testFailureRecovery()
27aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    {
28aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("\nEntering TestFailureRecovery\n");
29aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        Bidi bidi = new Bidi();
30aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // Skip the following test since there are no invalid values
31aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        // between MAX_EXPLICIT_LEVEL+1 and LEVEL_DEFAULT_LTR
32aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //try {
33aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //    bidi.setPara("abc", (byte)(Bidi.LEVEL_DEFAULT_LTR - 1), null);
34aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //    errln("Bidi.setPara did not fail when passed too big para level");
35aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //} catch (IllegalArgumentException e) {
36aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //    logln("OK: Got exception for bidi.setPara(..., Bidi.LEVEL_DEFAULT_LTR - 1, ...)"
37aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //            + " as expected: " + e.getMessage());
38aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        //}
39aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
40aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setPara("abc", (byte)(-1), null);
41aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Bidi.setPara did not fail when passed negative para level");
42aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
43aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for bidi.setPara(..., -1, ...)"
44aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                    + " as expected: " + e.getMessage());
45aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
46aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
47aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            Bidi.writeReverse(null, 0);
48aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Bidi.writeReverse did not fail when passed a null string");
49aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
50aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for Bidi.writeReverse(null) as expected: "
51aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
52aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
53aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi = new Bidi();
54aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
55aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setLine(0, 1);
56aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("bidi.setLine did not fail when called before valid setPara()");
57aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalStateException e) {
58aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for Bidi.setLine(0, 1) as expected: "
59aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
60aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
61aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
62aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.getDirection();
63aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("bidi.getDirection did not fail when called before valid setPara()");
64aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalStateException e) {
65aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for Bidi.getDirection() as expected: "
66aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
67aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
68aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi.setPara("abc", Bidi.LTR, null);
69aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
70aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.getLevelAt(3);
71aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("bidi.getLevelAt did not fail when called with bad argument");
72aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
73aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for Bidi.getLevelAt(3) as expected: "
74aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
75aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
76aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
77aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi = new Bidi(-1, 0);
78aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("Bidi constructor did not fail when called with bad argument");
79aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
80aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for Bidi(-1,0) as expected: "
81aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
82aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
83aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi = new Bidi(2, 1);
84aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
85aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setPara("abc", Bidi.LTR, null);
86aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("setPara did not fail when called with text too long");
87aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (OutOfMemoryError e) {
88aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for setPara(\"abc\") as expected: "
89aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
90aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
91aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
92aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setPara("=2", Bidi.RTL, null);
93aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.countRuns();
94aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("countRuns did not fail when called for too many runs");
95aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (OutOfMemoryError e) {
96aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for countRuns as expected: "
97aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
98aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
99aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        int rm = bidi.getReorderingMode();
100aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi.setReorderingMode(Bidi.REORDER_DEFAULT - 1);
101aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (rm != bidi.getReorderingMode()) {
102aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("setReorderingMode with bad argument #1 should have no effect");
103aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
104aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi.setReorderingMode(9999);
105aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (rm != bidi.getReorderingMode()) {
106aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("setReorderingMode with bad argument #2 should have no effect");
107aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
108aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        /* Try a surrogate char */
109aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi = new Bidi();
110aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        bidi.setPara("\uD800\uDC00", Bidi.RTL, null);
111aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        if (bidi.getDirection() != Bidi.MIXED) {
112aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("getDirection for 1st surrogate char should be MIXED");
113aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
114aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        byte[] levels = new byte[] {6,5,4};
115aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        try {
116aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            bidi.setPara("abc", (byte)5, levels);
117aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            errln("setPara did not fail when called with bad levels");
118aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        } catch (IllegalArgumentException e) {
119aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin            logln("OK: Got exception for setPara(..., levels) as expected: "
120aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin                  + e.getMessage());
121aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        }
122aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin
123aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin        logln("\nExiting TestFailureRecovery\n");
124aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin    }
125aefe4d1f8f1773ead1a52f7a5d2c9e0009353600Paul Duffin}
126