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