• 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 dot.junit.opcodes.iput;
18 
19 import dot.junit.DxTestCase;
20 import dot.junit.DxUtil;
21 import dot.junit.opcodes.iput.d.T_iput_1;
22 import dot.junit.opcodes.iput.d.T_iput_10;
23 import dot.junit.opcodes.iput.d.T_iput_11;
24 import dot.junit.opcodes.iput.d.T_iput_12;
25 import dot.junit.opcodes.iput.d.T_iput_13;
26 import dot.junit.opcodes.iput.d.T_iput_14;
27 import dot.junit.opcodes.iput.d.T_iput_15;
28 import dot.junit.opcodes.iput.d.T_iput_17;
29 import dot.junit.opcodes.iput.d.T_iput_19;
30 import dot.junit.opcodes.iput.d.T_iput_5;
31 import dot.junit.opcodes.iput.d.T_iput_7;
32 import dot.junit.opcodes.iput.d.T_iput_8;
33 import dot.junit.opcodes.iput.d.T_iput_9;
34 
35 public class Test_iput extends DxTestCase {
36 
37     /**
38      * @title type - int
39      */
testN1()40     public void testN1() {
41         T_iput_1 t = new T_iput_1();
42         assertEquals(0, t.st_i1);
43         t.run();
44         assertEquals(1000000, t.st_i1);
45     }
46 
47     /**
48      * @title type - float
49      */
testN2()50     public void testN2() {
51         T_iput_19 t = new T_iput_19();
52         assertEquals(0.0f, t.st_f1);
53         t.run();
54         assertEquals(3.14f, t.st_f1);
55     }
56 
57 
58     /**
59      * @title modification of final field
60      */
testN3()61     public void testN3() {
62         T_iput_12 t = new T_iput_12();
63         assertEquals(0, t.st_i1);
64         t.run();
65         assertEquals(1000000, t.st_i1);
66     }
67 
68     /**
69      * @title modification of protected field from subclass
70      */
testN4()71     public void testN4() {
72         //@uses dot.junit.opcodes.iput.d.T_iput_1
73         //@uses dot.junit.opcodes.iput.d.T_iput_14
74         T_iput_14 t = new T_iput_14();
75         assertEquals(0, t.getProtectedField());
76         t.run();
77         assertEquals(1000000, t.getProtectedField());
78     }
79 
80 
81     /**
82      * @title expected NullPointerException
83      */
testE2()84     public void testE2() {
85         loadAndRun("dot.junit.opcodes.iput.d.T_iput_13", NullPointerException.class);
86     }
87 
88     /**
89      * @constraint A11
90      * @title constant pool index
91      */
testVFE1()92     public void testVFE1() {
93         load("dot.junit.opcodes.iput.d.T_iput_3", VerifyError.class);
94     }
95 
96     /**
97      *
98      * @constraint A23
99      * @title number of registers
100      */
testVFE2()101     public void testVFE2() {
102         load("dot.junit.opcodes.iput.d.T_iput_4", VerifyError.class);
103     }
104 
105 
106     /**
107      *
108      * @constraint B14
109      * @title put integer into long field - only field with same name but
110      * different type exists
111      */
testVFE5()112     public void testVFE5() {
113         loadAndRun("dot.junit.opcodes.iput.d.T_iput_17", NoSuchFieldError.class);
114     }
115 
116     /**
117      * @constraint B1
118      * @title Trying to put float into integer field. The verifier checks that ints
119      * and floats are not used interchangeably.
120      */
testVFE6()121     public void testVFE6() {
122         load("dot.junit.opcodes.iput.d.T_iput_5", VerifyError.class);
123     }
124 
125     /**
126      *
127      * @constraint B14
128      * @title type of field doesn't match opcode - attempt to modify double field
129      * with single-width register
130      */
testVFE7()131     public void testVFE7() {
132         load("dot.junit.opcodes.iput.d.T_iput_18", VerifyError.class);
133     }
134 
135     /**
136      * @constraint A11
137      * @title Attempt to set static field.
138      */
testVFE8()139     public void testVFE8() {
140         loadAndRun("dot.junit.opcodes.iput.d.T_iput_7", IncompatibleClassChangeError.class);
141     }
142 
143     /**
144      * @constraint B12
145      * @title Attempt to modify inaccessible protected field.
146      */
testVFE9()147     public void testVFE9() {
148         //@uses dot.junit.opcodes.iput.TestStubs
149         loadAndRun("dot.junit.opcodes.iput.d.T_iput_8", IllegalAccessError.class);
150     }
151 
152     /**
153      * @constraint n/a
154      * @title Attempt to modify field of undefined class.
155      */
testVFE10()156     public void testVFE10() {
157         loadAndRun("dot.junit.opcodes.iput.d.T_iput_9", NoClassDefFoundError.class);
158     }
159 
160     /**
161      * @constraint n/a
162      * @title Attempt to modify undefined field.
163      */
testVFE11()164     public void testVFE11() {
165         loadAndRun("dot.junit.opcodes.iput.d.T_iput_10", NoSuchFieldError.class);
166     }
167 
168     /**
169      * @constraint n/a
170      * @title Attempt to modify superclass' private field from subclass.
171      */
testVFE12()172     public void testVFE12() {
173         //@uses dot.junit.opcodes.iput.d.T_iput_1
174         loadAndRun("dot.junit.opcodes.iput.d.T_iput_15", IllegalAccessError.class);
175     }
176 
177     /**
178      * @constraint B1
179      * @title iput shall not work for wide numbers
180      */
testVFE13()181     public void testVFE13() {
182         load("dot.junit.opcodes.iput.d.T_iput_2", VerifyError.class);
183     }
184 
185     /**
186      *
187      * @constraint B1
188      * @title iput shall not work for reference fields
189      */
testVFE14()190     public void testVFE14() {
191         load("dot.junit.opcodes.iput.d.T_iput_20", VerifyError.class);
192     }
193 
194     /**
195      *
196      * @constraint B1
197      * @title iput shall not work for short fields
198      */
testVFE15()199     public void testVFE15() {
200         load("dot.junit.opcodes.iput.d.T_iput_21", VerifyError.class);
201     }
202 
203     /**
204      *
205      * @constraint B1
206      * @title iput shall not work for boolean fields
207      */
testVFE16()208     public void testVFE16() {
209         load("dot.junit.opcodes.iput.d.T_iput_22", VerifyError.class);
210     }
211 
212     /**
213      *
214      * @constraint B1
215      * @title iput shall not work for char fields
216      */
testVFE17()217     public void testVFE17() {
218         load("dot.junit.opcodes.iput.d.T_iput_23", VerifyError.class);
219     }
220 
221     /**
222      *
223      * @constraint B1
224      * @title iput shall not work for byte fields
225      */
testVFE18()226     public void testVFE18() {
227         load("dot.junit.opcodes.iput.d.T_iput_24", VerifyError.class);
228     }
229 
230 
231     /**
232      * @constraint B6
233      * @title instance fields may only be accessed on already initialized instances.
234      */
testVFE30()235     public void testVFE30() {
236         load("dot.junit.opcodes.iput.d.T_iput_30", VerifyError.class);
237     }
238 
239     /**
240      * @constraint N/A
241      * @title instance fields may only be accessed on reference registers
242      */
testVFE31()243     public void testVFE31() {
244         load("dot.junit.opcodes.iput.d.T_iput_31", VerifyError.class);
245     }
246 
247     /**
248      * @constraint n/a
249      * @title Modification of final field in other class
250      */
testE5()251     public void testE5() {
252         //@uses dot.junit.opcodes.iput.TestStubs
253         loadAndRun("dot.junit.opcodes.iput.d.T_iput_11", IllegalAccessError.class);
254     }
255 }
256