Home | History | Annotate | Download | only in anewarray
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package dxc.junit.opcodes.anewarray;
     18 
     19 import dxc.junit.DxTestCase;
     20 import dxc.junit.DxUtil;
     21 import dxc.junit.opcodes.anewarray.jm.T_anewarray_1;
     22 import dxc.junit.opcodes.anewarray.jm.T_anewarray_6;
     23 import dxc.junit.opcodes.anewarray.jm.T_anewarray_7;
     24 
     25 public class Test_anewarray extends DxTestCase {
     26 
     27     /**
     28      * @title Test for Object
     29      */
     30     public void testN1() {
     31         T_anewarray_1 t = new T_anewarray_1();
     32 
     33         Object[] arr = t.run(10);
     34         assertNotNull(arr);
     35         assertEquals(10, arr.length);
     36         for (int i = 0; i < 10; i++)
     37             assertNull(arr[i]);
     38     }
     39 
     40     /**
     41      * @title Test for String
     42      */
     43     public void testN2() {
     44         T_anewarray_1 t = new T_anewarray_1();
     45 
     46         String[] arr2 = t.run2(5);
     47         assertNotNull(arr2);
     48         assertEquals(5, arr2.length);
     49         for (int i = 0; i < 5; i++)
     50             assertNull(arr2[i]);
     51     }
     52 
     53     /**
     54      * @title Test for Integer
     55      */
     56     public void testN3() {
     57         T_anewarray_1 t = new T_anewarray_1();
     58 
     59         Integer[] arr3 = t.run3(15);
     60         assertNotNull(arr3);
     61         assertEquals(15, arr3.length);
     62         for (int i = 0; i < 15; i++)
     63             assertNull(arr3[i]);
     64     }
     65 
     66     /**
     67      * @title if count is zero, no subsequent dimensions allocated
     68      */
     69     public void testE1() {
     70         T_anewarray_1 t = new T_anewarray_1();
     71         Object[] res = t.run(0);
     72         try {
     73             Object s = res[0];
     74             fail("expected ArrayIndexOutOfBoundsException");
     75         } catch (ArrayIndexOutOfBoundsException ae) {
     76             // expected
     77         }
     78     }
     79 
     80     /**
     81      * @title expected NegativeArraySizeException
     82      */
     83     public void testE2() {
     84         T_anewarray_1 t = new T_anewarray_1();
     85         try {
     86             t.run(-2);
     87             fail("expected NegativeArraySizeException");
     88         } catch (NegativeArraySizeException nase) {
     89             // expected
     90         }
     91     }
     92 
     93     /**
     94      * @title expected NoClassDefFoundError
     95      */
     96     public void testE3() {
     97         try {
     98             T_anewarray_6 t = new T_anewarray_6();
     99             t.run();
    100             fail("expected NoClassDefFoundError");
    101         } catch (NoClassDefFoundError e) {
    102             // expected
    103         } catch (VerifyError vfe) {
    104             // ok for dalvikvm; eagerly tries to load the array type
    105             System.out.print("dvmvfe:");
    106         }
    107     }
    108 
    109     /**
    110      * @title expected IllegalAccessError
    111      * <pre>
    112      * V(15469) +++ dvmAddClassToHash '[Ldxc/junit/opcodes/anewarray/jm/TestStubs$TestStub;' 0x973d7708 (isnew=1) --> 0x973e1f10  (dalvikvm)
    113      * V(15469) Created array class '[Ldxc/junit/opcodes/anewarray/jm/TestStubs$TestStub;' 0x973d7708 (access=0x6000.0010)  (dalvikvm)
    114      * </pre>
    115      * TestStub class is private. no IllegalAccessError is thrown, but VerifyError
    116      */
    117     public void testE4() {
    118         try {
    119             T_anewarray_7 t = new T_anewarray_7();
    120             t.run();
    121             fail("expected IllegalAccessError");
    122         } catch (IllegalAccessError e) {
    123             // expected
    124         } catch (VerifyError vfe) {
    125             // ok for dalvikvm;
    126             System.out.print("dvmvfe:");
    127         }
    128     }
    129 
    130     /**
    131      * @constraint 4.8.1.19
    132      * @title constant pool index
    133      */
    134     public void testVFE1() {
    135         try {
    136             Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_2");
    137             fail("expected a verification exception");
    138         } catch (Throwable t) {
    139             DxUtil.checkVerifyException(t);
    140         }
    141     }
    142 
    143     /**
    144      * @constraint 4.8.2.1
    145      * @title number of arguments
    146      */
    147     public void testVFE2() {
    148         try {
    149             Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_3");
    150             fail("expected a verification exception");
    151         } catch (Throwable t) {
    152             DxUtil.checkVerifyException(t);
    153         }
    154     }
    155 
    156     /**
    157      * @constraint 4.8.2.1
    158      * @title type of argument - float
    159      */
    160     public void testVFE3() {
    161         try {
    162             Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_4");
    163             fail("expected a verification exception");
    164         } catch (Throwable t) {
    165             DxUtil.checkVerifyException(t);
    166         }
    167     }
    168 
    169     /**
    170      * @constraint 4.8.1.17
    171      * @title array of more than 255 dimensions
    172      */
    173     public void testVFE4() {
    174         try {
    175             Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_5");
    176             fail("expected a verification exception");
    177         } catch (Throwable t) {
    178             DxUtil.checkVerifyException(t);
    179         }
    180     }
    181 
    182     /**
    183      * @constraint 4.8.2.1
    184      * @title type of argument - reference
    185      */
    186     public void testVFE5() {
    187         try {
    188             Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_8");
    189             fail("expected a verification exception");
    190         } catch (Throwable t) {
    191             DxUtil.checkVerifyException(t);
    192         }
    193     }
    194 
    195     /**
    196      * @constraint 4.8.1.19
    197      * @title constant pool type
    198      */
    199     public void testVFE6() {
    200         try {
    201             Class.forName("dxc.junit.opcodes.anewarray.jm.T_anewarray_9");
    202             fail("expected a verification exception");
    203         } catch (Throwable t) {
    204             DxUtil.checkVerifyException(t);
    205         }
    206     }
    207 
    208 }
    209