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_static_range; 18 19 import dot.junit.DxTestCase; 20 import dot.junit.DxUtil; 21 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_1; 22 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_13; 23 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_14; 24 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_15; 25 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_17; 26 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_18; 27 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_19; 28 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_2; 29 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_24; 30 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_4; 31 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_5; 32 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_6; 33 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_7; 34 import dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_8; 35 36 37 38 public class Test_invoke_static_range extends DxTestCase { 39 40 /** 41 * @title Static method from library class Math 42 */ testN1()43 public void testN1() { 44 T_invoke_static_range_1 t = new T_invoke_static_range_1(); 45 assertEquals(1234567, t.run()); 46 } 47 48 /** 49 * @title Static method from user class 50 */ testN2()51 public void testN2() { 52 //@uses dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_2 53 //@uses dot.junit.opcodes.invoke_static_range.TestClass 54 T_invoke_static_range_2 t = new T_invoke_static_range_2(); 55 assertEquals(777, t.run()); 56 } 57 58 /** 59 * @title Big number of registers 60 */ testN3()61 public void testN3() { 62 assertEquals(1, T_invoke_static_range_4.run()); 63 } 64 65 66 /** 67 * @title Check that new frame is created by invoke_static_range and 68 * arguments are passed to method 69 */ testN5()70 public void testN5() { 71 //@uses dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_15 72 //@uses dot.junit.opcodes.invoke_static_range.TestClass 73 T_invoke_static_range_15 t = new T_invoke_static_range_15(); 74 assertTrue(t.run()); 75 } 76 77 /** 78 * @title Static protected method from other class in the same package 79 */ testN6()80 public void testN6() { 81 T_invoke_static_range_18 t = new T_invoke_static_range_18(); 82 assertEquals(888, t.run()); 83 } 84 85 /** 86 * @title Native method can't be linked 87 * 88 */ testE2()89 public void testE2() { 90 loadAndRun("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_6", 91 UnsatisfiedLinkError.class); 92 } 93 94 95 /** 96 * @title initialization of referenced class throws exception 97 */ testE7()98 public void testE7() { 99 loadAndRun("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_14", 100 ExceptionInInitializerError.class); 101 } 102 103 /** 104 * @constraint A14 105 * @title invalid constant pool index 106 */ testVFE1()107 public void testVFE1() { 108 load("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_3", VerifyError.class); 109 } 110 111 /** 112 * @constraint A15 113 * @title <clinit> may not be called using invoke_static_range 114 */ testVFE3()115 public void testVFE3() { 116 load("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_10", VerifyError.class); 117 } 118 119 /** 120 * @constraint B1 121 * @title number of arguments passed to method 122 */ testVFE4()123 public void testVFE4() { 124 load("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_11", VerifyError.class); 125 } 126 127 /** 128 * @constraint A15 129 * @title <init> may not be called using invoke_static_range 130 */ testVFE5()131 public void testVFE5() { 132 load("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_19", VerifyError.class); 133 } 134 135 /** 136 * @constraint B9 137 * @title types of arguments passed to method 138 */ testVFE6()139 public void testVFE6() { 140 load("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_20", VerifyError.class); 141 } 142 143 144 /** 145 * @constraint n/a 146 * @title Attempt to call non-static method. 147 */ testVFE7()148 public void testVFE7() { 149 loadAndRun("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_5", 150 IncompatibleClassChangeError.class); 151 } 152 153 /** 154 * @constraint n/a 155 * @title Attempt to call undefined method. 156 */ testVFE8()157 public void testVFE8() { 158 loadAndRun("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_7", 159 NoSuchMethodError.class); 160 } 161 162 /** 163 * @constraint n/a 164 * @title Attempt to call private method of other class. 165 */ testVFE9()166 public void testVFE9() { 167 //@uses dot.junit.opcodes.invoke_static_range.TestClass 168 loadAndRun("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_8", 169 IllegalAccessError.class); 170 } 171 172 /** 173 * @constraint n/a 174 * @title Method has different signature. 175 */ testVFE10()176 public void testVFE10() { 177 //@uses dot.junit.opcodes.invoke_static_range.TestClass 178 loadAndRun("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_13", 179 NoSuchMethodError.class); 180 } 181 182 183 /** 184 * @constraint B12 185 * @title Attempt to call protected method of unrelated class. 186 */ testVFE12()187 public void testVFE12() { 188 //@uses dot.junit.opcodes.invoke_static_range.TestClass 189 loadAndRun("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_17", 190 IllegalAccessError.class); 191 } 192 193 /** 194 * @constraint A23 195 * @title number of registers 196 */ testVFE13()197 public void testVFE13() { 198 load("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_16", VerifyError.class); 199 } 200 201 /** 202 * @constraint A14 203 * @title attempt to invoke interface method 204 */ testVFE18()205 public void testVFE18() { 206 load("dot.junit.opcodes.invoke_static_range.d.T_invoke_static_range_24", VerifyError.class); 207 } 208 } 209