Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/com/sun/jdi/FetchLocals.java
41152 views
1
/*
2
* Copyright (c) 2013, 2017, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
// THIS TEST IS LINE NUMBER SENSITIVE
25
26
/**
27
* @test
28
* @bug 4386002 4429245
29
* @summary Test fix for: Incorrect values reported for some locals of type long
30
* @author Tim Bell
31
*
32
* @run build TestScaffold VMConnection TargetListener TargetAdapter
33
* @run compile -g FetchLocals.java
34
* @run driver FetchLocals
35
*/
36
import com.sun.jdi.*;
37
import com.sun.jdi.event.*;
38
import java.util.*;
39
40
class FetchLocalsDebugee {
41
public long testMethod() {
42
short s = 12345;
43
int i = 8675309;
44
boolean pt = true;
45
long w = 973230999L;
46
byte b = 0x3b;
47
long x = w * 1000L;
48
char c = '\u005A'; // 005A = "Z"
49
long y = 22;
50
float f = 6.66f;
51
double d = 7.77;
52
53
System.out.print("pt is: ");
54
System.out.println(pt);
55
System.out.print("b is: ");
56
System.out.println(b);
57
System.out.print("c is: ");
58
System.out.println(c);
59
System.out.print("s is: ");
60
System.out.println(s);
61
System.out.print("i is: ");
62
System.out.println(i);
63
64
System.out.print("w is: ");
65
System.out.print(w);
66
System.out.print(" (0x");
67
System.out.print(Long.toHexString(w));
68
System.out.println(")");
69
70
System.out.print("x is: ");
71
System.out.print(x);
72
System.out.print(" (0x");
73
System.out.print(Long.toHexString(x));
74
System.out.println(")");
75
76
System.out.print("y is: ");
77
System.out.print(y);
78
System.out.print(" (0x");
79
System.out.print(Long.toHexString(y));
80
System.out.println(")");
81
82
System.out.print("f is: ");
83
System.out.println(f);
84
System.out.print("d is: ");
85
System.out.println(d);
86
System.out.println(); // This is FetchLocals::LINE
87
if (w == 0xde00ad00be00ef00L) {
88
System.out.print ("The debugger was here. w modified to: 0x");
89
System.out.println(Long.toHexString(w));
90
} else {
91
System.out.print ("w contains : 0x");
92
System.out.println(Long.toHexString(w));
93
}
94
System.out.println();
95
return x;
96
}
97
public static void main(String[] args) {
98
System.out.print ("FetchLocalsDebugee");
99
System.out.println(" Starting up...");
100
FetchLocalsDebugee my = new FetchLocalsDebugee ();
101
long result = my.testMethod();
102
System.out.print ("testMethod() returned: ");
103
System.out.print (result);
104
System.out.print (" (0x");
105
System.out.print (Long.toHexString(result));
106
System.out.println(")");
107
108
System.out.print ("FetchLocalsDebugee");
109
System.out.println(" Shutting down...");
110
}
111
}
112
113
public class FetchLocals extends TestScaffold {
114
static final int LINE = 86;
115
116
FetchLocals (String args[]) {
117
super(args);
118
}
119
120
public static void main(String[] args)
121
throws Exception
122
{
123
new FetchLocals (args).startTests();
124
}
125
126
/** Express a 64 bit double as a hex string
127
*/
128
private static String hexify(double d) {
129
long bits = Double.doubleToLongBits(d);
130
return (" (0x" + java.lang.Long.toHexString(bits) + ")");
131
}
132
/** Express a 32 bit float as a hex string
133
*/
134
private static String hexify(float f) {
135
int bits = Float.floatToIntBits(f);
136
return (" (0x" + java.lang.Integer.toHexString(bits) + ")");
137
}
138
139
protected void test(String name, BooleanValue testV, boolean expectV)
140
throws Exception
141
{
142
if (testV.value() != expectV) {
143
System.out.println("Error for " + name + " = " + testV.value() +
144
" should be: " + expectV);
145
testFailed = true;
146
} else {
147
System.out.print ("Tested OK: ");
148
System.out.print (name);
149
System.out.print (" = ");
150
System.out.println(expectV);
151
}
152
}
153
154
protected void test(String name, ByteValue testV, byte expectV)
155
throws Exception
156
{
157
if (testV.value() != expectV) {
158
System.out.println("Error for " + name + " = " + testV.value() +
159
" should be: " + expectV);
160
testFailed = true;
161
} else {
162
System.out.print ("Tested OK: ");
163
System.out.print (name);
164
System.out.print (" = ");
165
System.out.println(expectV);
166
}
167
}
168
169
protected void test(String name, CharValue testV, char expectV)
170
throws Exception
171
{
172
if (testV.value() != expectV) {
173
System.out.println("Error for " + name + " = " + testV.value() +
174
" should be: " + expectV);
175
testFailed = true;
176
} else {
177
System.out.print ("Tested OK: ");
178
System.out.print (name);
179
System.out.print (" = ");
180
System.out.println(expectV);
181
}
182
}
183
184
protected void test(String name, ShortValue testV, short expectV)
185
throws Exception
186
{
187
if (testV.value() != expectV) {
188
System.out.println("Error for " + name + " = " + testV.value() +
189
" should be: " + expectV);
190
testFailed = true;
191
} else {
192
System.out.print ("Tested OK: ");
193
System.out.print (name);
194
System.out.print (" = ");
195
System.out.println(expectV);
196
}
197
}
198
199
protected void test(String name, IntegerValue testV, int expectV)
200
throws Exception
201
{
202
if (testV.value() != expectV) {
203
System.out.println("Error for " + name + " = " + testV.value() +
204
" should be: " + expectV);
205
testFailed = true;
206
} else {
207
System.out.print ("Tested OK: ");
208
System.out.print (name);
209
System.out.print (" = ");
210
System.out.println(expectV);
211
}
212
}
213
214
protected void test(String name, LongValue testV, long expectV)
215
throws Exception
216
{
217
if (testV.value() != expectV) {
218
System.out.println("Error for " + name + " = 0x" +
219
Long.toHexString(testV.value()) +
220
" should be: 0x" +
221
Long.toHexString(expectV));
222
testFailed = true;
223
} else {
224
System.out.print ("Tested OK: ");
225
System.out.print (name);
226
System.out.print (" = ");
227
System.out.println(expectV);
228
}
229
}
230
231
protected void test(String name, FloatValue testV, float expectV)
232
throws Exception
233
{
234
if (testV.value() != expectV) {
235
System.out.println("Error for " + name + " = " + testV.value() +
236
hexify(testV.value()) +
237
" should be: " + expectV +
238
hexify(expectV));
239
testFailed = true;
240
} else {
241
System.out.print ("Tested OK: ");
242
System.out.print (name);
243
System.out.print (" = ");
244
System.out.println(expectV);
245
}
246
}
247
248
protected void test(String name, DoubleValue testV, double expectV)
249
throws Exception
250
{
251
if (testV.value() != expectV) {
252
System.out.println("Error for " + name + " = " + testV.value() +
253
hexify(testV.value()) +
254
" should be: " + expectV +
255
hexify(expectV));
256
testFailed = true;
257
} else {
258
System.out.print ("Tested OK: ");
259
System.out.print (name);
260
System.out.print (" = ");
261
System.out.println(expectV);
262
}
263
}
264
265
protected void testLocalVariables (StackFrame sf)
266
throws Exception
267
{
268
/*
269
* Test values in the local method testMethod ():
270
* 1) Read current data
271
* 2) Test against the expected value
272
* 3) Set to a new value
273
* 4) Read again
274
* 5) Test against the expected value
275
*/
276
LocalVariable lv = sf.visibleVariableByName("pt");
277
BooleanValue booleanV = (BooleanValue) sf.getValue(lv);
278
test("pt", booleanV, true);
279
booleanV = vm().mirrorOf(false);
280
sf.setValue(lv, booleanV);
281
booleanV = (BooleanValue) sf.getValue(lv);
282
test("pt", booleanV, false);
283
284
lv = sf.visibleVariableByName("b");
285
ByteValue byteV = (ByteValue) sf.getValue(lv);
286
byte bTmp = 0x3b;
287
test("b", byteV, bTmp);
288
bTmp = 0x7e;
289
byteV = vm().mirrorOf(bTmp);
290
sf.setValue(lv, byteV);
291
byteV = (ByteValue) sf.getValue(lv);
292
test("b", byteV, bTmp);
293
294
lv = sf.visibleVariableByName("c");
295
CharValue charV = (CharValue) sf.getValue(lv);
296
char cTmp = '\u005A';
297
test("c", charV, cTmp);
298
cTmp = 'A';
299
charV = vm().mirrorOf(cTmp);
300
sf.setValue(lv, charV);
301
charV = (CharValue) sf.getValue(lv);
302
test("c", charV, cTmp);
303
304
lv = sf.visibleVariableByName("s");
305
ShortValue shortV = (ShortValue) sf.getValue(lv);
306
short sTmp = 12345;
307
test("s", shortV, sTmp);
308
sTmp = -32766;
309
shortV = vm().mirrorOf(sTmp);
310
sf.setValue(lv, shortV);
311
shortV = (ShortValue) sf.getValue(lv);
312
test("s", shortV, sTmp);
313
314
lv = sf.visibleVariableByName("i");
315
IntegerValue integerV = (IntegerValue) sf.getValue(lv);
316
int iTmp = 8675309;
317
test("i", integerV, iTmp);
318
iTmp = -42;
319
integerV = vm().mirrorOf(iTmp);
320
sf.setValue(lv, integerV);
321
integerV = (IntegerValue) sf.getValue(lv);
322
test("i", integerV, iTmp);
323
324
lv = sf.visibleVariableByName("w");
325
LongValue longV = (LongValue) sf.getValue(lv);
326
long wTmp = 973230999L;
327
test("w", longV, wTmp);
328
wTmp = 0xde00ad00be00ef00L;
329
longV = vm().mirrorOf(wTmp);
330
sf.setValue(lv, longV);
331
longV = (LongValue) sf.getValue(lv);
332
test("w", longV, wTmp);
333
334
lv = sf.visibleVariableByName("x");
335
longV = (LongValue) sf.getValue(lv);
336
long xTmp = 973230999L * 1000L;
337
test("x", longV, xTmp);
338
xTmp = 0xca00fe00ba00be00L;
339
longV = vm().mirrorOf(xTmp);
340
sf.setValue(lv, longV);
341
longV = (LongValue) sf.getValue(lv);
342
test("x", longV, xTmp);
343
344
lv = sf.visibleVariableByName("y");
345
longV = (LongValue) sf.getValue(lv);
346
long yTmp = 22;
347
test("y", longV, yTmp);
348
yTmp = 0xdeadbeefcafebabeL;
349
longV = vm().mirrorOf(yTmp);
350
sf.setValue(lv, longV);
351
longV = (LongValue) sf.getValue(lv);
352
test("x", longV, yTmp);
353
354
lv = sf.visibleVariableByName("f");
355
FloatValue floatV = (FloatValue) sf.getValue(lv);
356
float fTmp = 6.66f;
357
test("f", floatV, fTmp);
358
fTmp = (float)java.lang.Math.PI;
359
floatV = vm().mirrorOf(fTmp);
360
sf.setValue(lv, floatV);
361
floatV = (FloatValue)sf.getValue(lv);
362
test("f", floatV, fTmp);
363
364
lv = sf.visibleVariableByName("d");
365
DoubleValue doubleV = (DoubleValue) sf.getValue(lv);
366
double dTmp = 7.77;
367
test("d", doubleV, dTmp);
368
dTmp = java.lang.Math.E;
369
doubleV = vm().mirrorOf(dTmp);
370
sf.setValue(lv, doubleV);
371
doubleV = (DoubleValue) sf.getValue(lv);
372
test("d", doubleV, dTmp);
373
}
374
375
protected void runTests()
376
throws Exception
377
{
378
startToMain("FetchLocalsDebugee");
379
/*
380
* Get to the bottom of testMethod():
381
*/
382
try {
383
BreakpointEvent bpe = resumeTo("FetchLocalsDebugee", LINE);
384
/*
385
* Fetch values from fields; what did we get?
386
*/
387
StackFrame sf = bpe.thread().frame(0);
388
testLocalVariables (sf);
389
390
} catch(Exception ex) {
391
ex.printStackTrace();
392
testFailed = true;
393
} finally {
394
// Allow application to complete and shut down
395
resumeToVMDisconnect();
396
}
397
if (!testFailed) {
398
System.out.println("FetchLocals: passed");
399
} else {
400
throw new Exception("FetchLocals: failed");
401
}
402
}
403
}
404
405