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_interface_range; 18 19 import dot.junit.DxTestCase; 20 import dot.junit.DxUtil; 21 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_1; 22 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_11; 23 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_12; 24 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_13; 25 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_14; 26 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_16; 27 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_18; 28 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_20; 29 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_21; 30 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_23; 31 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_24; 32 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_25; 33 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_3; 34 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_4; 35 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_5; 36 import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_7; 37 38 public class Test_invoke_interface_range extends DxTestCase { 39 40 /** 41 * @title invoke interface method 42 */ testN1()43 public void testN1() { 44 T_invoke_interface_range_1 t = new T_invoke_interface_range_1(); 45 assertEquals(0, t.run("aa", "aa")); 46 assertEquals(-1, t.run("aa", "bb")); 47 assertEquals(1, t.run("bb", "aa")); 48 } 49 50 /** 51 * @title Check that new frame is created by invoke_interface_range and 52 * arguments are passed to method 53 */ testN2()54 public void testN2() { 55 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_14 56 //@uses dot.junit.opcodes.invoke_interface_range.ITest 57 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 58 T_invoke_interface_range_14 t = new T_invoke_interface_range_14(); 59 ITestImpl impl = new ITestImpl(); 60 assertEquals(1, t.run(impl)); 61 } 62 63 /** 64 * @title invoke default interface method 65 */ testN3()66 public void testN3() { 67 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_25", null); 68 } 69 70 /** 71 * @title objref is null 72 */ testE3()73 public void testE3() { 74 //@uses dot.junit.opcodes.invoke_interface_range.ITest 75 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_3", 76 NullPointerException.class); 77 } 78 79 /** 80 * @title object doesn't implement interface 81 */ testE4()82 public void testE4() { 83 //@uses dot.junit.opcodes.invoke_interface_range.ITest 84 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 85 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_11", 86 IncompatibleClassChangeError.class); 87 } 88 89 /** 90 * @title Native method can't be linked 91 */ testE5()92 public void testE5() { 93 //@uses dot.junit.opcodes.invoke_interface_range.ITest 94 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 95 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_12", 96 UnsatisfiedLinkError.class, new ITestImpl()); 97 } 98 99 /** 100 * @title Attempt to invoke abstract method 101 */ testE6()102 public void testE6() { 103 //@uses dot.junit.opcodes.invoke_interface_range.ITest 104 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 105 //@uses dot.junit.opcodes.invoke_interface_range.ITestImplAbstract 106 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_13", 107 AbstractMethodError.class); 108 } 109 110 /** 111 * @title Attempt to invoke conflict method 112 */ testE7()113 public void testE7() { 114 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_23", 115 IncompatibleClassChangeError.class); 116 } 117 118 /** 119 * @title Attempt to invoke abstract method 120 */ testE8()121 public void testE8() { 122 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_24", 123 AbstractMethodError.class); 124 } 125 126 127 /** 128 * @constraint A17 129 * @title invalid constant pool index 130 */ testVFE1()131 public void testVFE1() { 132 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_2", 133 VerifyError.class); 134 } 135 136 /** 137 * @constraint A17 138 * @title The referenced method_id must belong to an interface (not a class). 139 */ testVFE2()140 public void testVFE2() { 141 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_4", 142 IncompatibleClassChangeError.class); 143 } 144 145 /** 146 * @constraint B1 147 * @title number of arguments 148 */ testVFE5()149 public void testVFE5() { 150 //@uses dot.junit.opcodes.invoke_interface_range.ITest 151 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 152 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_5", 153 VerifyError.class); 154 } 155 156 /** 157 * @constraint B1 158 * @title int is passed instead of objref 159 */ testVFE6()160 public void testVFE6() { 161 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_10", 162 VerifyError.class); 163 } 164 165 /** 166 * @constraint B9 167 * @title number of arguments passed to method 168 */ testVFE9()169 public void testVFE9() { 170 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_9", 171 VerifyError.class); 172 } 173 174 /** 175 * @constraint A15 176 * @title invoke-interface may not be used to call <init>. 177 */ testVFE10()178 public void testVFE10() { 179 //@uses dot.junit.opcodes.invoke_interface_range.ITest 180 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 181 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_18", 182 VerifyError.class); 183 } 184 185 /** 186 * @constraint A15 187 * @title invoke-interface may not be used to call <clinit>. 188 */ testVFE11()189 public void testVFE11() { 190 //@uses dot.junit.opcodes.invoke_interface_range.ITest 191 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 192 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_20", 193 VerifyError.class); 194 } 195 196 /** 197 * @constraint B9 198 * @title types of arguments passed to method 199 */ testVFE12()200 public void testVFE12() { 201 //@uses dot.junit.opcodes.invoke_interface_range.ITest 202 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 203 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_21", 204 VerifyError.class); 205 } 206 207 /** 208 * @constraint A23 209 * @title number of registers 210 */ testVFE13()211 public void testVFE13() { 212 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_8", 213 VerifyError.class); 214 } 215 216 /** 217 * @constraint n/a 218 * @title Attempt to call undefined method. 219 */ testVFE14()220 public void testVFE14() { 221 //@uses dot.junit.opcodes.invoke_interface_range.ITest 222 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 223 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_7", 224 NoSuchMethodError.class, new ITestImpl()); 225 } 226 227 /** 228 * @constraint n/a 229 * @title Method has different signature. 230 */ testVFE15()231 public void testVFE15() { 232 //@uses dot.junit.opcodes.invoke_interface_range.ITest 233 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 234 loadAndRun("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_16", 235 NoSuchMethodError.class, new ITestImpl()); 236 } 237 238 /** 239 * @constraint B6 240 * @title instance methods may only be invoked on already initialized instances. 241 */ testVFE21()242 public void testVFE21() { 243 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_22 244 //@uses dot.junit.opcodes.invoke_interface_range.ITest 245 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl 246 load("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_22", 247 VerifyError.class); 248 } 249 } 250