blob: e065ebffa14bf4e1b554ee28077afb92d485748f [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/** hard coded linenumbers in test - DO NOT CHANGE
2 * @test/nodynamiccopyright/
3 * @bug 4386002 4429245
4 * @summary Test fix for: Incorrect values reported for some locals of type long
5 *
6 * @author Tim Bell
7 *
8 * @run build TestScaffold VMConnection TargetListener TargetAdapter
9 * @run compile -g FetchLocals.java
10 * @run main FetchLocals
11 */
12import com.sun.jdi.*;
13import com.sun.jdi.event.*;
14import java.util.*;
15
16class FetchLocalsDebugee {
17 public long testMethod() {
18 short s = 12345;
19 int i = 8675309;
20 boolean pt = true;
21 long w = 973230999L;
22 byte b = 0x3b;
23 long x = w * 1000L;
24 char c = '\u005A'; // 005A = "Z"
25 long y = 22;
26 float f = 6.66f;
27 double d = 7.77;
28
29 System.out.print("pt is: ");
30 System.out.println(pt);
31 System.out.print("b is: ");
32 System.out.println(b);
33 System.out.print("c is: ");
34 System.out.println(c);
35 System.out.print("s is: ");
36 System.out.println(s);
37 System.out.print("i is: ");
38 System.out.println(i);
39
40 System.out.print("w is: ");
41 System.out.print(w);
42 System.out.print(" (0x");
43 System.out.print(Long.toHexString(w));
44 System.out.println(")");
45
46 System.out.print("x is: ");
47 System.out.print(x);
48 System.out.print(" (0x");
49 System.out.print(Long.toHexString(x));
50 System.out.println(")");
51
52 System.out.print("y is: ");
53 System.out.print(y);
54 System.out.print(" (0x");
55 System.out.print(Long.toHexString(y));
56 System.out.println(")");
57
58 System.out.print("f is: ");
59 System.out.println(f);
60 System.out.print("d is: ");
61 System.out.println(d);
62 System.out.println(); // Thie is Line 63...
63 if (w == 0xde00ad00be00ef00L) {
64 System.out.print ("The debugger was here. w modified to: 0x");
65 System.out.println(Long.toHexString(w));
66 } else {
67 System.out.print ("w contains : 0x");
68 System.out.println(Long.toHexString(w));
69 }
70 System.out.println();
71 return x;
72 }
73 public static void main(String[] args) {
74 System.out.print ("FetchLocalsDebugee");
75 System.out.println(" Starting up...");
76 FetchLocalsDebugee my = new FetchLocalsDebugee ();
77 long result = my.testMethod();
78 System.out.print ("testMethod() returned: ");
79 System.out.print (result);
80 System.out.print (" (0x");
81 System.out.print (Long.toHexString(result));
82 System.out.println(")");
83
84 System.out.print ("FetchLocalsDebugee");
85 System.out.println(" Shutting down...");
86 }
87}
88
89public class FetchLocals extends TestScaffold {
90
91 FetchLocals (String args[]) {
92 super(args);
93 }
94
95 public static void main(String[] args)
96 throws Exception
97 {
98 new FetchLocals (args).startTests();
99 }
100
101 /** Express a 64 bit double as a hex string
102 */
103 private static String hexify(double d) {
104 long bits = Double.doubleToLongBits(d);
105 return (" (0x" + java.lang.Long.toHexString(bits) + ")");
106 }
107 /** Express a 32 bit float as a hex string
108 */
109 private static String hexify(float f) {
110 int bits = Float.floatToIntBits(f);
111 return (" (0x" + java.lang.Integer.toHexString(bits) + ")");
112 }
113
114 protected void test(String name, BooleanValue testV, boolean expectV)
115 throws Exception
116 {
117 if (testV.value() != expectV) {
118 System.out.println("Error for " + name + " = " + testV.value() +
119 " should be: " + expectV);
120 testFailed = true;
121 } else {
122 System.out.print ("Tested OK: ");
123 System.out.print (name);
124 System.out.print (" = ");
125 System.out.println(expectV);
126 }
127 }
128
129 protected void test(String name, ByteValue testV, byte expectV)
130 throws Exception
131 {
132 if (testV.value() != expectV) {
133 System.out.println("Error for " + name + " = " + testV.value() +
134 " should be: " + expectV);
135 testFailed = true;
136 } else {
137 System.out.print ("Tested OK: ");
138 System.out.print (name);
139 System.out.print (" = ");
140 System.out.println(expectV);
141 }
142 }
143
144 protected void test(String name, CharValue testV, char expectV)
145 throws Exception
146 {
147 if (testV.value() != expectV) {
148 System.out.println("Error for " + name + " = " + testV.value() +
149 " should be: " + expectV);
150 testFailed = true;
151 } else {
152 System.out.print ("Tested OK: ");
153 System.out.print (name);
154 System.out.print (" = ");
155 System.out.println(expectV);
156 }
157 }
158
159 protected void test(String name, ShortValue testV, short expectV)
160 throws Exception
161 {
162 if (testV.value() != expectV) {
163 System.out.println("Error for " + name + " = " + testV.value() +
164 " should be: " + expectV);
165 testFailed = true;
166 } else {
167 System.out.print ("Tested OK: ");
168 System.out.print (name);
169 System.out.print (" = ");
170 System.out.println(expectV);
171 }
172 }
173
174 protected void test(String name, IntegerValue testV, int expectV)
175 throws Exception
176 {
177 if (testV.value() != expectV) {
178 System.out.println("Error for " + name + " = " + testV.value() +
179 " should be: " + expectV);
180 testFailed = true;
181 } else {
182 System.out.print ("Tested OK: ");
183 System.out.print (name);
184 System.out.print (" = ");
185 System.out.println(expectV);
186 }
187 }
188
189 protected void test(String name, LongValue testV, long expectV)
190 throws Exception
191 {
192 if (testV.value() != expectV) {
193 System.out.println("Error for " + name + " = 0x" +
194 Long.toHexString(testV.value()) +
195 " should be: 0x" +
196 Long.toHexString(expectV));
197 testFailed = true;
198 } else {
199 System.out.print ("Tested OK: ");
200 System.out.print (name);
201 System.out.print (" = ");
202 System.out.println(expectV);
203 }
204 }
205
206 protected void test(String name, FloatValue testV, float expectV)
207 throws Exception
208 {
209 if (testV.value() != expectV) {
210 System.out.println("Error for " + name + " = " + testV.value() +
211 hexify(testV.value()) +
212 " should be: " + expectV +
213 hexify(expectV));
214 testFailed = true;
215 } else {
216 System.out.print ("Tested OK: ");
217 System.out.print (name);
218 System.out.print (" = ");
219 System.out.println(expectV);
220 }
221 }
222
223 protected void test(String name, DoubleValue testV, double expectV)
224 throws Exception
225 {
226 if (testV.value() != expectV) {
227 System.out.println("Error for " + name + " = " + testV.value() +
228 hexify(testV.value()) +
229 " should be: " + expectV +
230 hexify(expectV));
231 testFailed = true;
232 } else {
233 System.out.print ("Tested OK: ");
234 System.out.print (name);
235 System.out.print (" = ");
236 System.out.println(expectV);
237 }
238 }
239
240 protected void testLocalVariables (StackFrame sf)
241 throws Exception
242 {
243 /*
244 * Test values in the local method testMethod ():
245 * 1) Read current data
246 * 2) Test against the expected value
247 * 3) Set to a new value
248 * 4) Read again
249 * 5) Test against the expected value
250 */
251 LocalVariable lv = sf.visibleVariableByName("pt");
252 BooleanValue booleanV = (BooleanValue) sf.getValue(lv);
253 test("pt", booleanV, true);
254 booleanV = vm().mirrorOf(false);
255 sf.setValue(lv, booleanV);
256 booleanV = (BooleanValue) sf.getValue(lv);
257 test("pt", booleanV, false);
258
259 lv = sf.visibleVariableByName("b");
260 ByteValue byteV = (ByteValue) sf.getValue(lv);
261 byte bTmp = 0x3b;
262 test("b", byteV, bTmp);
263 bTmp = 0x7e;
264 byteV = vm().mirrorOf(bTmp);
265 sf.setValue(lv, byteV);
266 byteV = (ByteValue) sf.getValue(lv);
267 test("b", byteV, bTmp);
268
269 lv = sf.visibleVariableByName("c");
270 CharValue charV = (CharValue) sf.getValue(lv);
271 char cTmp = '\u005A';
272 test("c", charV, cTmp);
273 cTmp = 'A';
274 charV = vm().mirrorOf(cTmp);
275 sf.setValue(lv, charV);
276 charV = (CharValue) sf.getValue(lv);
277 test("c", charV, cTmp);
278
279 lv = sf.visibleVariableByName("s");
280 ShortValue shortV = (ShortValue) sf.getValue(lv);
281 short sTmp = 12345;
282 test("s", shortV, sTmp);
283 sTmp = -32766;
284 shortV = vm().mirrorOf(sTmp);
285 sf.setValue(lv, shortV);
286 shortV = (ShortValue) sf.getValue(lv);
287 test("s", shortV, sTmp);
288
289 lv = sf.visibleVariableByName("i");
290 IntegerValue integerV = (IntegerValue) sf.getValue(lv);
291 int iTmp = 8675309;
292 test("i", integerV, iTmp);
293 iTmp = -42;
294 integerV = vm().mirrorOf(iTmp);
295 sf.setValue(lv, integerV);
296 integerV = (IntegerValue) sf.getValue(lv);
297 test("i", integerV, iTmp);
298
299 lv = sf.visibleVariableByName("w");
300 LongValue longV = (LongValue) sf.getValue(lv);
301 long wTmp = 973230999L;
302 test("w", longV, wTmp);
303 wTmp = 0xde00ad00be00ef00L;
304 longV = vm().mirrorOf(wTmp);
305 sf.setValue(lv, longV);
306 longV = (LongValue) sf.getValue(lv);
307 test("w", longV, wTmp);
308
309 lv = sf.visibleVariableByName("x");
310 longV = (LongValue) sf.getValue(lv);
311 long xTmp = 973230999L * 1000L;
312 test("x", longV, xTmp);
313 xTmp = 0xca00fe00ba00be00L;
314 longV = vm().mirrorOf(xTmp);
315 sf.setValue(lv, longV);
316 longV = (LongValue) sf.getValue(lv);
317 test("x", longV, xTmp);
318
319 lv = sf.visibleVariableByName("y");
320 longV = (LongValue) sf.getValue(lv);
321 long yTmp = 22;
322 test("y", longV, yTmp);
323 yTmp = 0xdeadbeefcafebabeL;
324 longV = vm().mirrorOf(yTmp);
325 sf.setValue(lv, longV);
326 longV = (LongValue) sf.getValue(lv);
327 test("x", longV, yTmp);
328
329 lv = sf.visibleVariableByName("f");
330 FloatValue floatV = (FloatValue) sf.getValue(lv);
331 float fTmp = 6.66f;
332 test("f", floatV, fTmp);
333 fTmp = (float)java.lang.Math.PI;
334 floatV = vm().mirrorOf(fTmp);
335 sf.setValue(lv, floatV);
336 floatV = (FloatValue)sf.getValue(lv);
337 test("f", floatV, fTmp);
338
339 lv = sf.visibleVariableByName("d");
340 DoubleValue doubleV = (DoubleValue) sf.getValue(lv);
341 double dTmp = 7.77;
342 test("d", doubleV, dTmp);
343 dTmp = java.lang.Math.E;
344 doubleV = vm().mirrorOf(dTmp);
345 sf.setValue(lv, doubleV);
346 doubleV = (DoubleValue) sf.getValue(lv);
347 test("d", doubleV, dTmp);
348 }
349
350 protected void runTests()
351 throws Exception
352 {
353 startToMain("FetchLocalsDebugee");
354 /*
355 * Get to the bottom of testMethod():
356 */
357 try {
358 BreakpointEvent bpe = resumeTo("FetchLocalsDebugee", 63);
359 /*
360 * Fetch values from fields; what did we get?
361 */
362 StackFrame sf = bpe.thread().frame(0);
363 testLocalVariables (sf);
364
365 } catch(Exception ex) {
366 ex.printStackTrace();
367 testFailed = true;
368 } finally {
369 // Allow application to complete and shut down
370 resumeToVMDisconnect();
371 }
372 if (!testFailed) {
373 System.out.println("FetchLocals: passed");
374 } else {
375 throw new Exception("FetchLocals: failed");
376 }
377 }
378}