blob: fe650bdc23af7c342b3c213a5ac6e6be09bd75db [file] [log] [blame]
The Android Open Source Projectf8057102009-03-15 16:47:16 -07001/*
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
17package dot.junit.opcodes.invoke_interface_range;
18
19import dot.junit.DxTestCase;
20import dot.junit.DxUtil;
21import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_1;
22import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_11;
23import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_12;
24import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_13;
25import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_14;
26import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_17;
27import dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_3;
28
29public class Test_invoke_interface_range extends DxTestCase {
30
31 /**
32 * @title invoke interface method
33 */
34 public void testN1() {
35 T_invoke_interface_range_1 t = new T_invoke_interface_range_1();
36 assertEquals(0, t.run("aa", "aa"));
37 assertEquals(-1, t.run("aa", "bb"));
38 assertEquals(1, t.run("bb", "aa"));
39 }
40
41 /**
42 * @title Check that new frame is created by invoke_interface_range and
43 * arguments are passed to method
44 */
45 public void testN2() {
46 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_14
47 //@uses dot.junit.opcodes.invoke_interface_range.ITest
48 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
49 T_invoke_interface_range_14 t = new T_invoke_interface_range_14();
50 ITestImpl impl = new ITestImpl();
51 assertEquals(1, t.run(impl));
52 }
53
54
55
56 /**
57 * @title objref is null
58 */
59 public void testE3() {
60 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_3
61 //@uses dot.junit.opcodes.invoke_interface_range.ITest
62 try {
63 new T_invoke_interface_range_3(null);
64 fail("expected NullPointerException");
65 } catch (NullPointerException npe) {
66 // expected
67 }
68 }
69
70 /**
71 * @title object doesn't implement interface
72 */
73 public void testE4() {
74 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_11
75 //@uses dot.junit.opcodes.invoke_interface_range.ITest
76 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
77 T_invoke_interface_range_11 t = new T_invoke_interface_range_11();
78 try {
79 t.run();
80 fail("expected IncompatibleClassChangeError");
81 } catch (IncompatibleClassChangeError e) {
82 // expected
83 }
84 }
85
86 /**
87 * @title Native method can't be linked
88 */
89 public void testE5() {
90 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_12
91 //@uses dot.junit.opcodes.invoke_interface_range.ITest
92 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
93 T_invoke_interface_range_12 t = new T_invoke_interface_range_12();
94 ITestImpl impl = new ITestImpl();
95 try {
96 t.run(impl);
97 fail("expected UnsatisfiedLinkError");
98 } catch (UnsatisfiedLinkError e) {
99 // expected
100 }
101 }
102
103 /**
104 * @title Attempt to invoke abstract method
105 */
106 public void testE6() {
107 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_13
108 //@uses dot.junit.opcodes.invoke_interface_range.ITest
109 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
110 //@uses dot.junit.opcodes.invoke_interface_range.ITestImplAbstract
111 T_invoke_interface_range_13 t = new T_invoke_interface_range_13();
112 try {
113 t.run();
114 fail("expected AbstractMethodError");
115 } catch (AbstractMethodError e) {
116 // expected
117 }
118 }
119
120
121 /**
122 * @title Attempt to invoke non-public interface method
123 */
124 public void testE8() {
125 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_17
126 //@uses dot.junit.opcodes.invoke_interface_range.ITest
127 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
128 //@uses dot.junit.opcodes.invoke_interface_range.ITestImplAbstract
129 try {
130 T_invoke_interface_range_17 t = new T_invoke_interface_range_17();
131 t.run();
132 fail("expected a verification exception");
133 } catch (IllegalAccessError e) {
134 // expected
135 } catch (VerifyError e) {
136 // expected
137 }
138 }
139
140
141 /**
142 * @constraint A17
143 * @title invalid constant pool index
144 */
145 public void testVFE1() {
146 try {
147 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_2");
148 fail("expected a verification exception");
149 } catch (Throwable t) {
150 DxUtil.checkVerifyException(t);
151 }
152 }
153
154 /**
155 * @constraint A17
156 * @title The referenced method_id must belong to an interface (not a class).
157 */
158 public void testVFE2() {
159 try {
160 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_4");
161 fail("expected a verification exception");
162 } catch (Throwable t) {
163 DxUtil.checkVerifyException(t);
164 }
165 }
166
167 /**
168 * @constraint B1
169 * @title number of arguments
170 */
171 public void testVFE5() {
172 try {
173 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_5");
174 fail("expected a verification exception");
175 } catch (Throwable t) {
176 DxUtil.checkVerifyException(t);
177 }
178 }
179
180 /**
181 * @constraint B1
182 * @title int is passed instead of objref
183 */
184 public void testVFE6() {
185 try {
186 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_10");
187 fail("expected a verification exception");
188 } catch (Throwable t) {
189 DxUtil.checkVerifyException(t);
190 }
191 }
192
193 /**
194 * @constraint B9
195 * @title number of arguments passed to method
196 */
197 public void testVFE9() {
198 try {
199 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_9");
200 fail("expected a verification exception");
201 } catch (Throwable t) {
202 DxUtil.checkVerifyException(t);
203 }
204 }
205
206 /**
207 * @constraint A15
208 * @title invoke-interface may not be used to call <init>.
209 */
210 public void testVFE10() {
211 try {
212 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_18");
213 fail("expected a verification exception");
214 } catch (Throwable t) {
215 DxUtil.checkVerifyException(t);
216 }
217 }
218
219 /**
220 * @constraint A15
221 * @title invoke-interface may not be used to call <clinit>.
222 */
223 public void testVFE11() {
224 try {
225 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_20");
226 fail("expected a verification exception");
227 } catch (Throwable t) {
228 DxUtil.checkVerifyException(t);
229 }
230 }
231
232 /**
233 * @constraint B9
234 * @title types of arguments passed to method
235 */
236 public void testVFE12() {
237 try {
238 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_21");
239 fail("expected a verification exception");
240 } catch (Throwable t) {
241 DxUtil.checkVerifyException(t);
242 }
243 }
244
245 /**
246 * @constraint A23
247 * @title number of registers
248 */
249 public void testVFE13() {
250 try {
251 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_8");
252 fail("expected a verification exception");
253 } catch (Throwable t) {
254 DxUtil.checkVerifyException(t);
255 }
256 }
257
258 /**
259 * @constraint n/a
260 * @title Attempt to call undefined method. Java throws NoSuchMethodError
261 * on first access but Dalvik throws VerifyError on class loading.
262 */
263 public void testVFE14() {
264 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_7
265 //@uses dot.junit.opcodes.invoke_interface_range.ITest
266 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
267 try {
268 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_7");
269 fail("expected a verification exception");
270 } catch (Throwable t) {
271 DxUtil.checkVerifyException(t);
272 }
273 }
274
275 /**
276 * @constraint n/a
277 * @title Method has different signature. Java throws NoSuchMethodError
278 * on first access but Dalvik throws VerifyError on class loading.
279 */
280 public void testVFE15() {
281 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_16
282 //@uses dot.junit.opcodes.invoke_interface_range.ITest
283 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
284 try {
285 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_16");
286 fail("expected a verification exception");
287 } catch (Throwable t) {
288 DxUtil.checkVerifyException(t);
289 }
290 }
291
292 /**
293 * @constraint B6
294 * @title instance methods may only be invoked on already initialized instances.
295 */
296 public void testVFE21() {
297 //@uses dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_22
298 //@uses dot.junit.opcodes.invoke_interface_range.ITest
299 //@uses dot.junit.opcodes.invoke_interface_range.ITestImpl
300 try {
301 Class.forName("dot.junit.opcodes.invoke_interface_range.d.T_invoke_interface_range_22");
302 fail("expected a verification exception");
303 } catch (Throwable t) {
304 DxUtil.checkVerifyException(t);
305 }
306 }
307}