• 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.packed_switch;
18 
19 import dot.junit.DxTestCase;
20 import dot.junit.DxUtil;
21 import dot.junit.opcodes.packed_switch.d.T_packed_switch_1;
22 import dot.junit.opcodes.packed_switch.d.T_packed_switch_2;
23 
24 public class Test_packed_switch extends DxTestCase {
25 
26     /**
27      * @title try different values
28      */
testN1()29     public void testN1() {
30         T_packed_switch_1 t = new T_packed_switch_1();
31         assertEquals(2, t.run(-1));
32 
33         assertEquals(-1, t.run(4));
34         assertEquals(20, t.run(2));
35         assertEquals(-1, t.run(5));
36 
37         assertEquals(-1, t.run(6));
38         assertEquals(20, t.run(3));
39         assertEquals(-1, t.run(7));
40     }
41 
42     /**
43      * @title Argument = Integer.MAX_VALUE
44      */
testB1()45     public void testB1() {
46         T_packed_switch_1 t = new T_packed_switch_1();
47         assertEquals(-1, t.run(Integer.MAX_VALUE));
48     }
49 
50     /**
51      * @title Argument = Integer.MIN_VALUE
52      */
testB2()53     public void testB2() {
54         T_packed_switch_1 t = new T_packed_switch_1();
55         assertEquals(-1, t.run(Integer.MIN_VALUE));
56     }
57 
58     /**
59      * @title Argument = 0
60      */
testB3()61     public void testB3() {
62         T_packed_switch_1 t = new T_packed_switch_1();
63         assertEquals(-1, t.run(0));
64     }
65 
66     /**
67      * @constraint A23
68      * @title number of registers
69      */
testVFE1()70     public void testVFE1() {
71         try {
72             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_3");
73             fail("expected a verification exception");
74         } catch (Throwable t) {
75             DxUtil.checkVerifyException(t);
76         }
77     }
78 
79 
80 
81     /**
82      * @constraint B1
83      * @title type of argument - double
84      */
testVFE2()85     public void testVFE2() {
86         try {
87             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_4");
88             fail("expected a verification exception");
89         } catch (Throwable t) {
90             DxUtil.checkVerifyException(t);
91         }
92     }
93 
94     /**
95      * @constraint B1
96      * @title type of argument - long
97      */
testVFE3()98     public void testVFE3() {
99         try {
100             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_5");
101             fail("expected a verification exception");
102         } catch (Throwable t) {
103             DxUtil.checkVerifyException(t);
104         }
105     }
106 
107     /**
108      * @constraint B1
109      * @title type of argument - reference
110      */
testVFE4()111     public void testVFE4() {
112         try {
113             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_6");
114             fail("expected a verification exception");
115         } catch (Throwable t) {
116             DxUtil.checkVerifyException(t);
117         }
118     }
119 
120     /**
121      * @constraint A7
122      * @title branch target shall be inside the method
123      */
testVFE5()124     public void testVFE5() {
125         try {
126             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_7");
127             fail("expected a verification exception");
128         } catch (Throwable t) {
129             DxUtil.checkVerifyException(t);
130         }
131     }
132 
133     /**
134      * @constraint A7
135      * @title branch target shall not be "inside" instruction
136      */
testVFE6()137     public void testVFE6() {
138         try {
139             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_8");
140             fail("expected a verification exception");
141         } catch (Throwable t) {
142             DxUtil.checkVerifyException(t);
143         }
144     }
145 
146 
147     /**
148      * @constraint A7
149      * @title offset to table shall be inside method
150      */
testVFE7()151     public void testVFE7() {
152         try {
153             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_9");
154             fail("expected a verification exception");
155         } catch (Throwable t) {
156             DxUtil.checkVerifyException(t);
157         }
158     }
159 
160     /**
161      * @constraint B1
162      * @title Types of arguments - float, int. The verifier checks that ints
163      * and floats are not used interchangeably.
164      */
testVFE8()165     public void testVFE8() {
166         try {
167             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_2");
168             fail("expected a verification exception");
169         } catch (Throwable t) {
170             DxUtil.checkVerifyException(t);
171         }
172     }
173 
174     /**
175      * @constraint A7
176      * @title the size and the list of targets must be consistent.
177      */
testVFE9()178     public void testVFE9() {
179         try {
180             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_11");
181             fail("expected a verification exception");
182         } catch (Throwable t) {
183             DxUtil.checkVerifyException(t);
184         }
185     }
186 
187 
188     /**
189      * @constraint B22
190      * @title packed-switch-data pseudo-instructions must not be reachable by control flow
191      */
testVFE10()192     public void testVFE10() {
193         try {
194             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_12");
195             fail("expected a verification exception");
196         } catch (Throwable t) {
197             DxUtil.checkVerifyException(t);
198         }
199     }
200 
201     /**
202      * @constraint A7
203      * @title table has wrong ident code
204      */
testVFE11()205     public void testVFE11() {
206         try {
207             Class.forName("dot.junit.opcodes.packed_switch.d.T_packed_switch_13");
208             fail("expected a verification exception");
209         } catch (Throwable t) {
210             DxUtil.checkVerifyException(t);
211         }
212     }
213 }
214