< prev index next >

test/hotspot/jtreg/runtime/exceptionMsgs/ArrayIndexOutOfBoundsException/ArrayIndexOutOfBoundsExceptionTest.java

Print this page

        

*** 22,39 **** * 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. * @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; --- 22,37 ---- * questions. */ /** * @test ! * @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 */ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream;
*** 47,481 **** 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. */ 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 --- 45,74 ---- import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; import static org.testng.Assert.fail; /** ! * 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]; ArrayList<String> names = new ArrayList<>(); ArrayList<String> curr; public static void main(String[] args) { ArrayIndexOutOfBoundsExceptionTest t = new ArrayIndexOutOfBoundsExceptionTest(); try { t.testAIOOBMessages(); } catch (Exception e) {} } /** * */ public static class ArrayGenerator { /** * @param dummy1 * @return Object Array
*** 493,572 **** 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() { --- 86,95 ----
*** 773,920 **** } 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() 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"); } 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"); } 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"); } 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"); } 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"); } ! // 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"); } 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"); } 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"); } 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"); } 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"); } ! // 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"); } 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"); } 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"); } 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"); } 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"); } 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"); } 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"); } } } --- 296,443 ---- } 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(). try { System.arraycopy(oa1, -17, oa2, 0, 5); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertEquals(e.getMessage(), ! "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(), ! "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(), ! "arraycopy length -19 is negative."); } try { System.arraycopy(oa1, 8, oa2, 0, 5); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertEquals(e.getMessage(), ! "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(), ! "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(). try { System.arraycopy(da2, -17, da3, 0, 5); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertEquals(e.getMessage(), ! "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(), ! "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(), ! "arraycopy length -19 is negative."); } try { System.arraycopy(da2, 8, da3, 0, 5); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertEquals(e.getMessage(), ! "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(), ! "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(). try { System.arraycopy(za2, -17, za3, 0, 5); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertEquals(e.getMessage(), ! "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(), ! "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(), ! "arraycopy length -19 is negative."); } try { System.arraycopy(ca2, 8, ca3, 0, 5); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertEquals(e.getMessage(), ! "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(), ! "arraycopy length -19 is negative."); } try { System.arraycopy(la2, 1, la3, 0, 7); fail(); } catch (ArrayIndexOutOfBoundsException e) { assertEquals(e.getMessage(), ! "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(), ! "arraycopy: last destination index 7 out of bounds for float[5]."); } } }
< prev index next >