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.sget_object;
18 
19 import dot.junit.DxTestCase;
20 import dot.junit.DxUtil;
21 import dot.junit.opcodes.sget_object.d.T_sget_object_1;
22 import dot.junit.opcodes.sget_object.d.T_sget_object_11;
23 import dot.junit.opcodes.sget_object.d.T_sget_object_12;
24 import dot.junit.opcodes.sget_object.d.T_sget_object_13;
25 import dot.junit.opcodes.sget_object.d.T_sget_object_21;
26 import dot.junit.opcodes.sget_object.d.T_sget_object_5;
27 import dot.junit.opcodes.sget_object.d.T_sget_object_6;
28 import dot.junit.opcodes.sget_object.d.T_sget_object_7;
29 import dot.junit.opcodes.sget_object.d.T_sget_object_8;
30 import dot.junit.opcodes.sget_object.d.T_sget_object_9;
31 
32 public class Test_sget_object extends DxTestCase {
33 
34     /**
35      * @title get object from static field
36      */
testN1()37     public void testN1() {
38         T_sget_object_1 t = new T_sget_object_1();
39         assertEquals(null, t.run());
40     }
41 
42 
43     /**
44      * @title access protected field from subclass
45      */
testN3()46     public void testN3() {
47         //@uses dot.junit.opcodes.sget_object.d.T_sget_object_1
48         //@uses dot.junit.opcodes.sget_object.d.T_sget_object_11
49         T_sget_object_11 t = new T_sget_object_11();
50         assertEquals(null, t.run());
51     }
52 
53     /**
54      * @constraint A12
55      * @title attempt to access non-static field
56      */
testE1()57     public void testE1() {
58         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_5",
59                    IncompatibleClassChangeError.class);
60     }
61 
62     /**
63      * @title initialization of referenced class throws exception
64      */
testE6()65     public void testE6() {
66         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_9",
67                    ExceptionInInitializerError.class);
68     }
69 
70 
71 
72     /**
73      * @constraint A12
74      * @title constant pool index
75      */
testVFE1()76     public void testVFE1() {
77         load("dot.junit.opcodes.sget_object.d.T_sget_object_4", VerifyError.class);
78     }
79 
80     /**
81      *
82      * @constraint A23
83      * @title number of registers
84      */
testVFE2()85     public void testVFE2() {
86         load("dot.junit.opcodes.sget_object.d.T_sget_object_3", VerifyError.class);
87     }
88 
89     /**
90      *
91      * @constraint B13
92      * @title read object from long field - only field with same name but
93      * different type exists
94      */
testVFE3()95     public void testVFE3() {
96         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_13", NoSuchFieldError.class);
97     }
98 
99     /**
100      * @constraint n/a
101      * @title Attempt to read inaccessible field.
102      */
testVFE4()103     public void testVFE4() {
104         //@uses dot.junit.opcodes.sget_object.TestStubs
105         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_6", IllegalAccessError.class);
106     }
107 
108     /**
109      * @constraint n/a
110      * @title Attempt to read field of undefined class.
111      */
testVFE5()112     public void testVFE5() {
113         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_7", NoClassDefFoundError.class);
114     }
115 
116     /**
117      * @constraint n/a
118      * @title Attempt to read undefined field.
119      */
testVFE6()120     public void testVFE6() {
121         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_8", NoSuchFieldError.class);
122     }
123 
124     /**
125      * @constraint n/a
126      * @title Attempt to read superclass' private field from subclass.
127      */
testVFE7()128     public void testVFE7() {
129         //@uses dot.junit.opcodes.sget_object.d.T_sget_object_1
130         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_12", IllegalAccessError.class);
131     }
132 
133     /**
134      * @constraint B1
135      * @title sget_object shall not work for short fields
136      */
testVFE8()137     public void testVFE8() {
138         load("dot.junit.opcodes.sget_object.d.T_sget_object_14", VerifyError.class);
139     }
140 
141     /**
142      *
143      * @constraint B1
144      * @title sget_object shall not work for char fields
145      */
testVFE9()146     public void testVFE9() {
147         load("dot.junit.opcodes.sget_object.d.T_sget_object_15", VerifyError.class);
148     }
149 
150     /**
151      *
152      * @constraint B1
153      * @title sget_object shall not work for int fields
154      */
testVFE10()155     public void testVFE10() {
156         load("dot.junit.opcodes.sget_object.d.T_sget_object_16", VerifyError.class);
157     }
158 
159     /**
160      *
161      * @constraint B1
162      * @title sget_object shall not work for byte fields
163      */
testVFE11()164     public void testVFE11() {
165         load("dot.junit.opcodes.sget_object.d.T_sget_object_17", VerifyError.class);
166     }
167 
168     /**
169      *
170      * @constraint B1
171      * @title sget_object shall not work for boolean fields
172      */
testVFE12()173     public void testVFE12() {
174         load("dot.junit.opcodes.sget_object.d.T_sget_object_18", VerifyError.class);
175     }
176 
177     /**
178      *
179      * @constraint B1
180      * @title sget_object shall not work for double fields
181      */
testVFE13()182     public void testVFE13() {
183         load("dot.junit.opcodes.sget_object.d.T_sget_object_19", VerifyError.class);
184     }
185 
186     /**
187      *
188      * @constraint B1
189      * @title sget_object shall not work for long fields
190      */
testVFE14()191     public void testVFE14() {
192         load("dot.junit.opcodes.sget_object.d.T_sget_object_20", VerifyError.class);
193     }
194 
195     /**
196      *
197      * @constraint B13
198      * @title only field of different type exists)
199      */
testVFE15()200     public void testVFE15() {
201         loadAndRun("dot.junit.opcodes.sget_object.d.T_sget_object_21", NoSuchFieldError.class);
202     }
203 }
204