blob: e5157ee8d4039fade3b23096705f4d95ef968067 [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2007-2013, 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();
// Skip the following test since there are no invalid values
// between MAX_EXPLICIT_LEVEL+1 and LEVEL_DEFAULT_LTR
//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);
}
}
}