blob: ecc1ce27632492db3afd85bc9b9dd537788e5e05 [file] [log] [blame]
/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package dxc.junit.opcodes.anewarray;
import dxc.junit.DxTestCase;
import dxc.junit.DxUtil;
import dxc.junit.opcodes.anewarray.jm.T_anewarray_1;
import dxc.junit.opcodes.anewarray.jm.T_anewarray_6;
import dxc.junit.opcodes.anewarray.jm.T_anewarray_7;
public class Test_anewarray extends DxTestCase {
/**
* @title Test for Object
*/
public void testN1() {
T_anewarray_1 t = new T_anewarray_1();
Object[] arr = t.run(10);
assertNotNull(arr);
assertEquals(10, arr.length);
for (int i = 0; i < 10; i++)
assertNull(arr[i]);
}
/**
* @title Test for String
*/
public void testN2() {
T_anewarray_1 t = new T_anewarray_1();
String[] arr2 = t.run2(5);
assertNotNull(arr2);
assertEquals(5, arr2.length);
for (int i = 0; i < 5; i++)
assertNull(arr2[i]);
}
/**
* @title Test for Integer
*/
public void testN3() {
T_anewarray_1 t = new T_anewarray_1();
Integer[] arr3 = t.run3(15);
assertNotNull(arr3);
assertEquals(15, arr3.length);
for (int i = 0; i < 15; i++)
assertNull(arr3[i]);
}
/**
* @title if count is zero, no subsequent dimensions allocated
*/
public void testE1() {
T_anewarray_1 t = new T_anewarray_1();
Object[] res = t.run(0);
try {
Object s = res[0];
fail("expected ArrayIndexOutOfBoundsException");
} catch (ArrayIndexOutOfBoundsException ae) {
// expected
}
}
/**
* @title expected NegativeArraySizeException
*/
public void testE2() {
T_anewarray_1 t = new T_anewarray_1();
try {
t.run(-2);
fail("expected NegativeArraySizeException");
} catch (NegativeArraySizeException nase) {
// expected
}
}
/**
* @title expected NoClassDefFoundError
*/
public void testE3() {
try {
T_anewarray_6 t = new T_anewarray_6();
t.run();
fail("expected NoClassDefFoundError");
} catch (NoClassDefFoundError e) {
// expected
} catch (VerifyError vfe) {
// ok for dalvikvm; eagerly tries to load the array type
System.out.print("dvmvfe:");
}
}
/**
* @title expected IllegalAccessError
* <pre>
* V(15469) +++ dvmAddClassToHash '[Ldxc/junit/opcodes/anewarray/jm/TestStubs$TestStub;' 0x973d7708 (isnew=1) --> 0x973e1f10 (dalvikvm)
* V(15469) Created array class '[Ldxc/junit/opcodes/anewarray/jm/TestStubs$TestStub;' 0x973d7708 (access=0x6000.0010) (dalvikvm)
* </pre>
* TestStub class is private. no IllegalAccessError is thrown, but VerifyError
*/
public void testE4() {
try {
T_anewarray_7 t = new T_anewarray_7();
t.run();
fail("expected IllegalAccessError");
} catch (IllegalAccessError e) {
// expected
} catch (VerifyError vfe) {
// ok for dalvikvm;
System.out.print("dvmvfe:");
}
}
/**
* @constraint 4.8.1.19
* @title constant pool index
*/
public void testVFE1() {
try {
Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_2");
fail("expected a verification exception");
} catch (Throwable t) {
DxUtil.checkVerifyException(t);
}
}
/**
* @constraint 4.8.2.1
* @title number of arguments
*/
public void testVFE2() {
try {
Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_3");
fail("expected a verification exception");
} catch (Throwable t) {
DxUtil.checkVerifyException(t);
}
}
/**
* @constraint 4.8.2.1
* @title type of argument - float
*/
public void testVFE3() {
try {
Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_4");
fail("expected a verification exception");
} catch (Throwable t) {
DxUtil.checkVerifyException(t);
}
}
/**
* @constraint 4.8.1.17
* @title array of more than 255 dimensions
*/
public void testVFE4() {
try {
Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_5");
fail("expected a verification exception");
} catch (Throwable t) {
DxUtil.checkVerifyException(t);
}
}
/**
* @constraint 4.8.2.1
* @title type of argument - reference
*/
public void testVFE5() {
try {
Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_8");
fail("expected a verification exception");
} catch (Throwable t) {
DxUtil.checkVerifyException(t);
}
}
/**
* @constraint 4.8.1.19
* @title constant pool type
*/
public void testVFE6() {
try {
Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_9");
fail("expected a verification exception");
} catch (Throwable t) {
DxUtil.checkVerifyException(t);
}
}
}