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