--- old/test/hotspot/jtreg/runtime/exceptionMsgs/ArrayIndexOutOfBoundsException/ArrayIndexOutOfBoundsExceptionTest.java 2018-04-24 15:41:35.654468000 +0200 +++ new/test/hotspot/jtreg/runtime/exceptionMsgs/ArrayIndexOutOfBoundsException/ArrayIndexOutOfBoundsExceptionTest.java 2018-04-24 15:41:35.133425000 +0200 @@ -24,14 +24,12 @@ /** * @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; @@ -49,44 +47,19 @@ 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 names = new ArrayList<>(); ArrayList 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) {} } @@ -94,386 +67,6 @@ /** * */ - @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 { /** @@ -495,76 +88,6 @@ } } - - /** - * - */ - @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 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()); - } - } - /** * */ @@ -775,14 +298,14 @@ "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 { @@ -790,7 +313,7 @@ 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 { @@ -798,7 +321,7 @@ 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 { @@ -806,7 +329,7 @@ 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 { @@ -814,17 +337,17 @@ 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 { @@ -832,7 +355,7 @@ 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 { @@ -840,7 +363,7 @@ 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 { @@ -848,7 +371,7 @@ 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 { @@ -856,17 +379,17 @@ 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 { @@ -874,7 +397,7 @@ 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 { @@ -882,7 +405,7 @@ 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 { @@ -890,7 +413,7 @@ 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 { @@ -898,7 +421,7 @@ 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 { @@ -906,7 +429,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 { @@ -914,7 +437,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]."); } } }