Home | History | Annotate | Download | only in invoke_virtual_range
      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 dot.junit.opcodes.invoke_virtual_range;
     18 
     19 import dot.junit.DxTestCase;
     20 import dot.junit.DxUtil;
     21 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_1;
     22 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_10;
     23 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_14;
     24 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_15;
     25 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_17;
     26 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_18;
     27 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_19;
     28 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_2;
     29 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_20;
     30 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_24;
     31 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_4;
     32 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_5;
     33 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_6;
     34 import dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_7;
     35 
     36 public class Test_invoke_virtual_range extends DxTestCase {
     37 
     38     /**
     39      * @title invoke virtual method
     40      */
     41     public void testN1() {
     42         T_invoke_virtual_range_1 t = new T_invoke_virtual_range_1();
     43         int a = 1;
     44         String sa = "a" + a;
     45         String sb = "a1";
     46         assertTrue(t.run(sa, sb));
     47         assertFalse(t.run(t, sa));
     48         assertFalse(t.run(sb, t));
     49     }
     50 
     51     /**
     52      * @title Invoke protected method of superclass
     53      */
     54     public void testN3() {
     55         //@uses dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_7
     56         //@uses dot.junit.opcodes.invoke_virtual_range.d.TSuper
     57         T_invoke_virtual_range_7 t = new T_invoke_virtual_range_7();
     58         assertEquals(5, t.run());
     59     }
     60 
     61     /**
     62      * @title Check that new frame is created by invoke_virtual_range and
     63      * arguments are passed to method
     64      */
     65     public void testN5() {
     66         //@uses dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_14
     67         //@uses dot.junit.opcodes.invoke_virtual_range.d.TSuper
     68         T_invoke_virtual_range_14 t = new T_invoke_virtual_range_14();
     69         assertTrue(t.run());
     70     }
     71 
     72     /**
     73      * @title Recursion of method lookup procedure
     74      */
     75     public void testN6() {
     76         //@uses dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_17
     77         //@uses dot.junit.opcodes.invoke_virtual_range.d.TSuper
     78         T_invoke_virtual_range_17 t = new T_invoke_virtual_range_17();
     79         assertEquals(5, t.run());
     80     }
     81 
     82     /**
     83      * @title Big number of arguments
     84      */
     85     public void testN7() {
     86         T_invoke_virtual_range_2 t = new T_invoke_virtual_range_2();
     87         assertEquals(1, t.run());
     88     }
     89 
     90     /**
     91      * @title invoke default interface method
     92      */
     93     public void testN8() {
     94         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_28", null);
     95     }
     96 
     97     /**
     98      * @title expected NullPointerException
     99      */
    100     public void testE1() {
    101         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_1",
    102                    NullPointerException.class, null, "Test");
    103     }
    104 
    105     /**
    106      * @title Native method can't be linked
    107      */
    108     public void testE2() {
    109         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_4",
    110                    UnsatisfiedLinkError.class);
    111     }
    112 
    113     /**
    114      * @title Attempt to invoke abstract method
    115      */
    116     public void testE4() {
    117         //@uses dot.junit.opcodes.invoke_virtual_range.ATest
    118         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_6",
    119                    AbstractMethodError.class);
    120     }
    121 
    122     /**
    123      * @title Attempt to invoke conflict method
    124      */
    125     public void testE5() {
    126         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_26",
    127                    IncompatibleClassChangeError.class);
    128     }
    129 
    130     /**
    131      * @title Attempt to invoke abstract method
    132      */
    133     public void testE6() {
    134         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_27",
    135                    AbstractMethodError.class);
    136     }
    137 
    138     /**
    139      * @constraint A14
    140      * @title invalid constant pool index
    141      */
    142     public void testVFE1() {
    143         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_8",
    144              VerifyError.class);
    145     }
    146 
    147     /**
    148      * @constraint A15
    149      * @title <clinit> may not be called using invoke-virtual
    150      */
    151     public void testVFE3() {
    152         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_10",
    153              VerifyError.class);
    154     }
    155 
    156     /**
    157      * @constraint B1
    158      * @title number of arguments passed to method
    159      */
    160     public void testVFE4() {
    161         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_11",
    162              VerifyError.class);
    163     }
    164 
    165     /**
    166      * @constraint B9
    167      * @title types of arguments passed to method
    168      */
    169     public void testVFE5() {
    170         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_12",
    171              VerifyError.class);
    172     }
    173 
    174     /**
    175      * @constraint A15
    176      * @title <init> may not be called using invoke_virtual_range
    177      */
    178     public void testVFE6() {
    179         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_16",
    180              VerifyError.class);
    181     }
    182 
    183     /**
    184      * @constraint B10
    185      * @title assignment incompatible references when accessing
    186      *                  protected method
    187      */
    188     public void testVFE8() {
    189         //@uses dot.junit.opcodes.invoke_virtual_range.d.TSuper
    190         //@uses dot.junit.opcodes.invoke_virtual_range.d.TPlain
    191         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_22",
    192              VerifyError.class);
    193     }
    194 
    195     /**
    196      * @constraint B10
    197      * @title assignment incompatible references when accessing
    198      *                  public method
    199      */
    200     public void testVFE9() {
    201         //@uses dot.junit.opcodes.invoke_virtual_range.d.TSuper
    202         //@uses dot.junit.opcodes.invoke_virtual_range.d.TSuper2
    203         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_23",
    204              VerifyError.class);
    205     }
    206 
    207     /**
    208      * @constraint n/a
    209      * @title Attempt to call static method.
    210      */
    211     public void testVFE10() {
    212         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_5",
    213                    IncompatibleClassChangeError.class);
    214     }
    215 
    216 
    217     /**
    218      * @constraint n/a
    219      * @title Attempt to invoke non-existing method.
    220      */
    221     public void testVFE12() {
    222         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_15",
    223                    NoSuchMethodError.class);
    224     }
    225 
    226     /**
    227      * @constraint n/a
    228      * @title Attempt to invoke private method of other class.
    229      */
    230     public void testVFE13() {
    231         //@uses dot.junit.opcodes.invoke_virtual_range.TestStubs
    232         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_18",
    233                    IllegalAccessError.class, new TestStubs());
    234     }
    235 
    236     /**
    237      * @constraint B12
    238      * @title Attempt to invoke protected method of unrelated class.
    239      */
    240     public void testVFE14() {
    241         //@uses dot.junit.opcodes.invoke_virtual_range.TestStubs
    242         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_20",
    243                    IllegalAccessError.class, new TestStubs());
    244     }
    245 
    246     /**
    247      * @constraint n/a
    248      * @title Method has different signature.
    249      */
    250     public void testVFE15() {
    251         //@uses dot.junit.opcodes.invoke_virtual_range.d.TSuper
    252         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_19",
    253                    NoSuchMethodError.class);
    254     }
    255 
    256     /**
    257      * @constraint n/a
    258      * @title invoke-virtual/range shall be used to invoke private methods
    259      */
    260     public void testVFE16() {
    261         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_13",
    262              VerifyError.class);
    263     }
    264 
    265     /**
    266      * @constraint A23
    267      * @title number of registers
    268      */
    269     public void testVFE17() {
    270         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_9",
    271              VerifyError.class);
    272     }
    273 
    274     /**
    275      * @constraint A14
    276      * @title attempt to invoke interface method
    277      */
    278     public void testVFE18() {
    279         loadAndRun("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_24",
    280                    IncompatibleClassChangeError.class);
    281     }
    282 
    283     /**
    284      * @constraint B6
    285      * @title instance methods may only be invoked on already initialized instances.
    286      */
    287     public void testVFE19() {
    288         load("dot.junit.opcodes.invoke_virtual_range.d.T_invoke_virtual_range_25",
    289              VerifyError.class);
    290     }
    291 }
    292