• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 dxc.junit.opcodes.getfield;
18 
19 import dxc.junit.DxTestCase;
20 import dxc.junit.DxUtil;
21 import dxc.junit.opcodes.getfield.jm.T_getfield_1;
22 import dxc.junit.opcodes.getfield.jm.T_getfield_10;
23 import dxc.junit.opcodes.getfield.jm.T_getfield_11;
24 import dxc.junit.opcodes.getfield.jm.T_getfield_12;
25 import dxc.junit.opcodes.getfield.jm.T_getfield_14;
26 import dxc.junit.opcodes.getfield.jm.T_getfield_16;
27 import dxc.junit.opcodes.getfield.jm.T_getfield_17;
28 import dxc.junit.opcodes.getfield.jm.T_getfield_2;
29 import dxc.junit.opcodes.getfield.jm.T_getfield_5;
30 import dxc.junit.opcodes.getfield.jm.T_getfield_6;
31 import dxc.junit.opcodes.getfield.jm.T_getfield_7;
32 import dxc.junit.opcodes.getfield.jm.T_getfield_8;
33 import dxc.junit.opcodes.getfield.jm.T_getfield_9;
34 import dxc.junit.opcodes.getfield.jm.TestStubs;
35 
36 public class Test_getfield extends DxTestCase {
37     private int TestStubField = 123;
38     protected int TestStubFieldP = 0;
39 
40     private int privateInt = 456;
41 
42     /**
43      * @title  type - int
44      */
testN1()45     public void testN1() {
46         T_getfield_1 t = new T_getfield_1();
47         assertEquals(5, t.run());
48     }
49 
50     /**
51      * @title  type - double
52      */
testN2()53     public void testN2() {
54         T_getfield_2 t = new T_getfield_2();
55         assertEquals(123d, t.run());
56     }
57 
58     /**
59      * @title  access protected field from subclass
60      */
testN3()61     public void testN3() {
62      // @uses dxc.junit.opcodes.getfield.jm.T_getfield_1
63         T_getfield_11 t = new T_getfield_11();
64         assertEquals(10, t.run());
65     }
66 
67     /**
68      * @title  assignment compatible references
69      */
testN4()70     public void testN4() {
71         // @uses dxc.junit.opcodes.getfield.jm.TChild
72         // @uses dxc.junit.opcodes.getfield.jm.TSuper
73         T_getfield_14 t = new T_getfield_14();
74         assertEquals(0, t.run().compareTo("abc"));
75     }
76 
77     /**
78      * @title  attempt to access static field
79      */
testE1()80     public void testE1() {
81         // @uses dxc.junit.opcodes.getstatic.jm.T_getstatic_1
82         try {
83             T_getfield_5 t = new T_getfield_5();
84             t.run();
85             fail("expected IncompatibleClassChangeError");
86         } catch (IncompatibleClassChangeError e) {
87             // expected
88         } catch (VerifyError vfe) {
89             // ok for dalvikvm;
90             System.out.print("dvmvfe:");
91         }
92     }
93 
94     /**
95      * @title  attempt to access of non-accessible private field
96      */
testE2()97     public void testE2() {
98         try {
99             T_getfield_6 t = new T_getfield_6();
100             int res = t.run();
101             System.out.println("res:"+res);
102             fail("expected IllegalAccessError");
103         } catch (IllegalAccessError iae) {
104             // expected
105         } catch (VerifyError vfe) {
106             // ok for dalvikvm;
107             System.out.print("dvmvfe:");
108         }
109     }
110 
111     /**
112      * @title expected NoClassDefFoundError
113      */
testE3()114     public void testE3() {
115         try {
116             // need to include the constructor call into the try-catch block,
117             // since class resolution can take place at any time.
118             // (not only when t.run() is called
119             T_getfield_7 t = new T_getfield_7();
120             t.run();
121             fail("expected NoClassDefFoundError");
122         } catch (NoClassDefFoundError e) {
123             // expected
124         } catch (VerifyError vfe) {
125             // ok for dalvikvm;
126             System.out.print("dvmvfe:");
127         }
128     }
129 
130     /**
131      * @title expected NoSuchFieldError
132      */
testE4()133     public void testE4() {
134         try {
135             T_getfield_8 t = new T_getfield_8();
136             t.run();
137             fail("expected NoSuchFieldError");
138         } catch (NoSuchFieldError e) {
139             // expected
140         } catch (VerifyError vfe) {
141             // ok for dalvikvm;
142             System.out.print("dvmvfe:");
143         }
144     }
145 
146     /**
147      * @title  attempt to get int from float field
148      */
testE5()149     public void testE5() {
150         try {
151             T_getfield_10 t = new T_getfield_10();
152             t.run();
153             fail("expected NoSuchFieldError");
154         } catch (NoSuchFieldError e) {
155             // expected
156         } catch (VerifyError vfe) {
157             // ok for dalvikvm;
158             System.out.print("dvmvfe:");
159         }
160     }
161 
162     /**
163      * @title expected NullPointerException
164      */
testE6()165     public void testE6() {
166         T_getfield_9 t = new T_getfield_9();
167         try {
168             t.run();
169             fail("expected NullPointerException");
170         } catch (NullPointerException e) {
171             // expected
172         }
173     }
174 
175     //FIXME: "fail" commented out temporarily - check
176     /**
177      * @title  attempt to read superclass' private field from subclass
178      * in same package
179      *
180      * FIXME: this seems to be a bug in JDK 1.5?
181      */
testE7()182     public void testE7() {
183         // @uses dxc.junit.opcodes.getfield.jm.T_getfield_1
184         try {
185             T_getfield_12 t = new T_getfield_12();
186             //fail("expected IllegalAccessError");
187         } catch (IllegalAccessError e) {
188             // expected
189         } catch (VerifyError vfe) {
190             // ok for dalvikvm;
191             System.out.print("dvmvfe:");
192         }
193     }
194 
195     /**
196      * @title  attempt to read private field of a class which was passed
197      * as argument
198      */
testE9()199     public void testE9() {
200         // @uses dxc.junit.opcodes.getfield.jm.TestStubs
201         try {
202             T_getfield_17 t = new T_getfield_17();
203             t.run(new dxc.junit.opcodes.getfield.jm.TestStubs());
204             fail("expected IllegalAccessError");
205         } catch (IllegalAccessError e) {
206             // expected
207         } catch (VerifyError vfe) {
208             // ok for dalvikvm;
209             System.out.print("dvmvfe:");
210         }
211     }
212 
213 
214 
215     /**
216      * @title  attempt to access of non-accessible protected field
217      */
testE8()218     public void testE8() {
219         try {
220             T_getfield_16 t = new T_getfield_16();
221             t.run();
222             fail("expected IllegalAccessError");
223         } catch (IllegalAccessError iae) {
224             // expected
225         } catch (VerifyError vfe) {
226             // ok for dalvikvm;
227             System.out.print("dvmvfe:");
228         }
229     }
230 
231     /**
232      * @constraint 4.8.1.12
233      * @title constant pool index
234      */
testVFE1()235     public void testVFE1() {
236         try {
237             Class.forName("dxc.junit.opcodes.getfield.jm.T_getfield_4");
238             fail("expected a verification exception");
239         } catch (Throwable t) {
240             DxUtil.checkVerifyException(t);
241         }
242     }
243 
244     /**
245      * @constraint 4.8.2.5
246      * @title stack size
247      */
testVFE2()248     public void testVFE2() {
249         try {
250             Class.forName("dxc.junit.opcodes.getfield.jm.T_getfield_3");
251             fail("expected a verification exception");
252         } catch (Throwable t) {
253             DxUtil.checkVerifyException(t);
254         }
255     }
256 
257     /**
258      * @constraint 4.8.1.12
259      * @title constant pool type
260      */
testVFE3()261     public void testVFE3() {
262         try {
263             Class.forName("dxc.junit.opcodes.getfield.jm.T_getfield_13");
264             fail("expected a verification exception");
265         } catch (Throwable t) {
266             DxUtil.checkVerifyException(t);
267         }
268     }
269 
270     /**
271      * @constraint 4.8.1.16
272      * @title assignment incompatible references
273      */
testVFE4()274     public void testVFE4() {
275         // @uses dxc.junit.opcodes.getfield.jm.TChild
276         // @uses dxc.junit.opcodes.getfield.jm.TSuper
277         try {
278             Class.forName("dxc.junit.opcodes.getfield.jm.T_getfield_15");
279             fail("expected a verification exception");
280         } catch (Throwable t) {
281             DxUtil.checkVerifyException(t);
282         }
283     }
284 
285 }
286