< prev index next >
test/hotspot/jtreg/runtime/exceptionMsgs/ArrayIndexOutOfBoundsException/ArrayIndexOutOfBoundsExceptionTest.java
Print this page
@@ -22,18 +22,16 @@
* questions.
*/
/**
* @test
- * @summary Test extended ArrayIndexOutOfBoundsException message for
- * class files generated without debug information. The message lists
- * information about the array and the indexes involved.
+ * @summary Test extended ArrayIndexOutOfBoundsException message. The
+ * message lists information about the array and the indexes involved.
* @compile ArrayIndexOutOfBoundsExceptionTest.java
* @run testng ArrayIndexOutOfBoundsExceptionTest
* @run testng/othervm -Xcomp -XX:-TieredCompilation ArrayIndexOutOfBoundsExceptionTest
* @run testng/othervm -Xcomp -XX:TieredStopAtLevel=1 ArrayIndexOutOfBoundsExceptionTest
- * @author Ann-Kathrin Wasle
*/
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
@@ -47,435 +45,30 @@
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import static org.testng.Assert.fail;
/**
- * Tests the detailed messages for the ArrayIndexOutOfBoundsException.
+ * Tests the detailed messages of the ArrayIndexOutOfBoundsException.
*/
public class ArrayIndexOutOfBoundsExceptionTest {
// Some fields used in the test.
static int[] staticArray = new int[0];
static long[][] staticLongArray = new long[0][0];
- DoubleArrayGen dag;
ArrayList<String> names = new ArrayList<>();
ArrayList<String> curr;
public static void main(String[] args) {
ArrayIndexOutOfBoundsExceptionTest t = new ArrayIndexOutOfBoundsExceptionTest();
try {
- t.testCreationViaNew();
- t.testCreationViaReflection();
- t.testCreationViaSerialization();
- t.testLoadedFromLocalVariable1();
- t.testLoadedFromLocalVariable2();
- t.testLoadedFromLocalVariable3();
- t.testLoadedFromLocalVariable4();
- t.testLoadedFromLocalVariable5();
- t.testLoadedFromLocalVariable6();
- t.testLoadedFromLocalVariable7();
- t.testLoadedFromLocalVariable8();
- t.testLoadedFromLocalVariable9();
- t.testLoadedFromLocalVariable10();
- t.testLoadedFromLocalVariable11();
- t.testLoadedFromMethod1();
- t.testLoadedFromMethod2();
- t.testLoadedFromMethod3();
- t.testLoadedFromMethod4();
- t.testLoadedFromStaticField1();
- t.testLoadedFromStaticField2();
- t.testLoadedFromStaticField3();
- t.testLoadedFromStaticField4();
- t.testWorkWithCompiler();
- t.testMissingLocalVariableTable();
t.testAIOOBMessages();
} catch (Exception e) {}
}
/**
*
*/
- @Test
- public void testCreationViaNew() {
- assertNull(new ArrayIndexOutOfBoundsException().getMessage());
- }
-
- /**
- * @throws Exception
- */
- @Test
- public void testCreationViaReflection() throws Exception {
- Exception ex = ArrayIndexOutOfBoundsException.class.newInstance();
- assertNull(ex.getMessage());
- }
-
- /**
- * @throws Exception
- */
- @Test
- public void testCreationViaSerialization() throws Exception {
- Object o = new ArrayIndexOutOfBoundsException();
- ByteArrayOutputStream bos = new ByteArrayOutputStream();
- ObjectOutputStream oos = new ObjectOutputStream(bos);
- oos.writeObject(o);
- ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
- ObjectInputStream ois = new ObjectInputStream(bis);
- Exception ex = (Exception) ois.readObject();
- assertNull(ex.getMessage());
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable1() {
- Object[] a = new Object[5];
-
- try {
- a[10].hashCode();
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable2() {
- Object[] a = new Object[7];
-
- try {
- a[-7] = null;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable3() {
- byte[] a = new byte[0];
-
- try {
- assertTrue(a[99] == 5);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable4() {
- char[] a = new char[0];
-
- try {
- a[0] = 0;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable5() {
- double[] a = new double[0];
-
- try {
- assertTrue(a[0] == 0);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable6() {
- float[] a = new float[0];
-
- try {
- a[0] = 0;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable7() {
- int[] a = new int[0];
-
- try {
- assertTrue(a[0] == 0);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable8() {
- long[] a = new long[0];
-
- try {
- a[0] = 0;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable9() {
- short[] a = new short[5];
-
- try {
- assertTrue(a[10] == 0);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable10() {
- int[][][] a = new int[1][0][0];
-
- try {
- assertTrue(a[0][1][2] == 0);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromLocalVariable11() {
- int[][][] a = new int[1][0][0];
-
- try {
- a[0][1][2] = 0;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromMethod1() {
-
- try {
- assertTrue((ArrayGenerator.arrayReturner(false))[0] == null);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromMethod2() {
- try {
- assertTrue(
- ((new ArrayGenerator().returnMyArray(1, 1, (short) 1)))[0] == null);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromMethod3() {
- try {
- assertTrue((returnArray(null, null, 1f))[0] == null);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromMethod4() {
- ImplTestLoadedFromMethod4(new DoubleArrayGenImpl());
- }
-
- /**
- * @param gen
- */
- public void ImplTestLoadedFromMethod4(DoubleArrayGen gen) {
- try {
- (gen.getArray())[0] = 1.0;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromStaticField1() {
- try {
- assertTrue(staticArray[0] == 1);
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromStaticField2() {
- try {
- staticArray[0] = 2;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromStaticField3() {
- try {
- assertTrue(staticLongArray[0][0] == 1L);
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testLoadedFromStaticField4() {
- try {
- staticLongArray[0][0] = 2L;
- fail();
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- /**
- *
- */
- @Test
- public void testWorkWithCompiler() {
- int[] a = {0, 1, 2};
- int i1 = 2;
- int i2 = 3;
-
- for (int i = 0; i < 10000000; i++) { // One 0 less is enough for d64.
- testImplWorkWithCompiler(a, i1);
- }
- testImplWorkWithCompiler(a, i2);
- }
-
- /**
- * @param a
- * @param i
- */
- public void testImplWorkWithCompiler(int[] a, int i) {
- try {
- assertTrue(a[i] == 2);
- } catch (ArrayIndexOutOfBoundsException e) {
- e.printStackTrace();
- assertNotNull(e.getMessage());
- }
- }
-
- private Object[] returnArray(String[][] dummy1, int[][][] dummy2, float dummy3) {
- return new Object[0];
- }
-
- /**
- *
- */
- public static interface DoubleArrayGen {
- /**
- * @return double Array
- */
- public double[] getArray();
- }
-
- /**
- *
- */
- public static class DoubleArrayGenImpl implements DoubleArrayGen {
- @Override
- public double[] getArray() {
- return new double[0];
- }
- }
-
- /**
- *
- */
public static class ArrayGenerator {
/**
* @param dummy1
* @return Object Array
@@ -493,80 +86,10 @@
public Object[] returnMyArray(double dummy1, long dummy2, short dummy3) {
return new Object[0];
}
}
-
- /**
- *
- */
- @Test
- public void testMissingLocalVariableTable() {
- doTestMissingLocalVariableTable(names);
-
- System.out.println("Names");
-
- for (int i = 0; i < names.size(); ++i) {
- System.out.println(names.get(i));
- }
-
- String[] expectedNames = new String[] {
- "Index 0 out-of-bounds for length 0.",
- "Index -1 out-of-bounds for length 10.",
- "Index 1 out-of-bounds for length 0.",
- "Index 7 out-of-bounds for length 5."
- };
-
- assertEquals(expectedNames.length, names.size());
-
- for (int i = 0; i < expectedNames.length; ++i) {
- assertEquals(names.get(i), expectedNames[i]);
- }
- }
-
- private void doTestMissingLocalVariableTable(ArrayList<String> names) {
- curr = names;
- doTestMissingLocalVariableTable1();
- doTestMissingLocalVariableTable2(new Object[10], new boolean[0], new double[5][1]);
- }
-
- private void doTestMissingLocalVariableTable1() {
- try {
- staticArray[0] = 0;
- fail();
- }
- catch (ArrayIndexOutOfBoundsException e) {
- curr.add(e.getMessage());
- }
- }
-
- private void doTestMissingLocalVariableTable2(Object[] o1, boolean z1[], double[][] dd1) {
- try {
- o1[-1].hashCode();
- fail();
- }
- catch (ArrayIndexOutOfBoundsException e) {
- curr.add(e.getMessage());
- }
-
- try {
- z1[1] = true;
- fail();
- }
- catch (ArrayIndexOutOfBoundsException e) {
- curr.add(e.getMessage());
- }
-
- try {
- assertTrue(dd1[7][1] == 0);
- fail();
- }
- catch (ArrayIndexOutOfBoundsException e) {
- curr.add(e.getMessage());
- }
- }
-
/**
*
*/
@Test
public void testAIOOBMessages() {
@@ -773,148 +296,148 @@
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
"Index 0 out-of-bounds for length 0.");
}
- // Test all five possible messages of arraycopy exceptions thrown in ObjArrayKlass::copy_array()
+ // Test all five possible messages of arraycopy exceptions thrown in ObjArrayKlass::copy_array().
try {
System.arraycopy(oa1, -17, oa2, 0, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy from index -17 of an object array with length 10");
+ "arraycopy source index -17 out of bounds for object array[10].");
}
try {
System.arraycopy(oa1, 2, oa2, -18, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy to index -18 of an object array with length 5");
+ "arraycopy destination index -18 out of bounds for object array[5].");
}
try {
System.arraycopy(oa1, 2, oa2, 0, -19);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy a negative range -19 from an object array with length 10 to an object array with length 5");
+ "arraycopy length -19 is negative.");
}
try {
System.arraycopy(oa1, 8, oa2, 0, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy from index 13 of an object array with length 10");
+ "arraycopy: last source index 13 out of bounds for object array[10].");
}
try {
System.arraycopy(oa1, 1, oa2, 0, 7);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy to index 7 of an object array with length 5");
+ "arraycopy: last destination index 7 out of bounds for object array[5].");
}
- // Test all five possible messages of arraycopy exceptions thrown in TypeArrayKlass::copy_array()
+ // Test all five possible messages of arraycopy exceptions thrown in TypeArrayKlass::copy_array().
try {
System.arraycopy(da2, -17, da3, 0, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy from index -17 of a double array with length 10");
+ "arraycopy source index -17 out of bounds for double[10].");
}
try {
System.arraycopy(da2, 2, da3, -18, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy to index -18 of a double array with length 5");
+ "arraycopy destination index -18 out of bounds for double[5].");
}
try {
System.arraycopy(da2, 2, da3, 0, -19);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy a negative range -19 from a double array with length 10 to a double array with length 5");
+ "arraycopy length -19 is negative.");
}
try {
System.arraycopy(da2, 8, da3, 0, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy from index 13 of a double array with length 10");
+ "arraycopy: last source index 13 out of bounds for double[10].");
}
try {
System.arraycopy(da2, 1, da3, 0, 7);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy to index 7 of a double array with length 5");
+ "arraycopy: last destination index 7 out of bounds for double[5].");
}
- // Test all possible basic types in the messages of arraycopy exceptions thrown in TypeArrayKlass::copy_array()
+ // Test all possible basic types in the messages of arraycopy exceptions thrown in TypeArrayKlass::copy_array().
try {
System.arraycopy(za2, -17, za3, 0, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy from index -17 of a boolean array with length 10");
+ "arraycopy source index -17 out of bounds for boolean[10].");
}
try {
System.arraycopy(ba2, 2, ba3, -18, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy to index -18 of a byte array with length 5");
+ "arraycopy destination index -18 out of bounds for byte[5].");
}
try {
System.arraycopy(sa2, 2, sa3, 0, -19);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy a negative range -19 from a short array with length 10 to a short array with length 5");
+ "arraycopy length -19 is negative.");
}
try {
System.arraycopy(ca2, 8, ca3, 0, 5);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy from index 13 of a char array with length 10");
+ "arraycopy: last source index 13 out of bounds for char[10].");
}
try {
System.arraycopy(ia2, 2, ia3, 0, -19);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy a negative range -19 from a int array with length 10 to a int array with length 5");
+ "arraycopy length -19 is negative.");
}
try {
System.arraycopy(la2, 1, la3, 0, 7);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy to index 7 of a long array with length 5");
+ "arraycopy: last destination index 7 out of bounds for long[5].");
}
try {
System.arraycopy(fa2, 1, fa3, 0, 7);
fail();
} catch (ArrayIndexOutOfBoundsException e) {
assertEquals(e.getMessage(),
- "while trying to copy to index 7 of a float array with length 5");
+ "arraycopy: last destination index 7 out of bounds for float[5].");
}
}
}
< prev index next >