Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/jdi/Event/equals/equals001.java
41161 views
1
/*
2
* Copyright (c) 2002, 2018, 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
package nsk.jdi.Event.equals;
25
26
import nsk.share.*;
27
import nsk.share.jpda.*;
28
import nsk.share.jdi.*;
29
30
import com.sun.jdi.*;
31
import com.sun.jdi.request.*;
32
import com.sun.jdi.event.*;
33
import com.sun.jdi.connect.*;
34
import java.io.*;
35
import java.util.*;
36
37
/**
38
* The debugger application of the test.
39
*/
40
public class equals001 {
41
42
//------------------------------------------------------- immutable common fields
43
44
final static String SIGNAL_READY = "ready";
45
final static String SIGNAL_GO = "go";
46
final static String SIGNAL_QUIT = "quit";
47
48
private static int waitTime;
49
private static int exitStatus;
50
private static ArgumentHandler argHandler;
51
private static Log log;
52
private static Debugee debuggee;
53
private static ReferenceType debuggeeClass;
54
55
//------------------------------------------------------- mutable common fields
56
57
private final static String prefix = "nsk.jdi.Event.equals.";
58
private final static String className = "equals001";
59
private final static String debuggerName = prefix + className;
60
private final static String debuggeeName = debuggerName + "a";
61
62
//------------------------------------------------------- test specific fields
63
64
private final static String threadClassName = prefix + "equals001aThread";
65
private final static String threadName = "thread1";
66
private final static String methodName = "foo";
67
private final static String fieldName = "name";
68
69
//------------------------------------------------------- immutable common methods
70
71
public static void main(String argv[]) {
72
System.exit(Consts.JCK_STATUS_BASE + run(argv, System.out));
73
}
74
75
private static void display(String msg) {
76
log.display("debugger > " + msg);
77
}
78
79
private static void complain(String msg) {
80
log.complain("debugger FAILURE > " + msg);
81
}
82
83
public static int run(String argv[], PrintStream out) {
84
85
exitStatus = Consts.TEST_PASSED;
86
87
argHandler = new ArgumentHandler(argv);
88
log = new Log(out, argHandler);
89
waitTime = argHandler.getWaitTime() * 60000;
90
91
debuggee = Debugee.prepareDebugee(argHandler, log, debuggeeName);
92
93
debuggeeClass = debuggee.classByName(debuggeeName);
94
if ( debuggeeClass == null ) {
95
throw new Failure("Class '" + debuggeeName + "' not found.");
96
}
97
98
execTest();
99
100
int status = debuggee.endDebugee();
101
if ( status != Consts.JCK_STATUS_BASE ) {
102
throw new Failure("UNEXPECTED Debugee's exit status : " + status);
103
}
104
display("expected Debugee's exit status : " + status);
105
106
return exitStatus;
107
}
108
109
//------------------------------------------------------ mutable common method
110
111
private static void execTest() {
112
113
EventRequestManager eventRequestManager = debuggee.VM().eventRequestManager();
114
EventRequest eventRequest;
115
116
ReferenceType testedClass = debuggee.classByName(threadClassName);
117
if ( testedClass == null ) {
118
throw new Failure("Class '" + threadClassName + "' not found.");
119
}
120
121
for (int i = 0; i < 11; i++) {
122
eventRequest = null;
123
switch (i) {
124
125
case 0:
126
ThreadReference thread = debuggee.threadByName(threadName);
127
128
display("setting up StepRequest");
129
eventRequest = eventRequestManager.createStepRequest
130
(thread, StepRequest.STEP_MIN, StepRequest.STEP_INTO);
131
break;
132
133
case 1:
134
display("setting up AccessWatchpointRequest");
135
eventRequest = eventRequestManager.createAccessWatchpointRequest
136
(testedClass.fieldByName(fieldName));
137
break;
138
139
case 2:
140
display("setting up ModificationWatchpointRequest");
141
eventRequest = eventRequestManager.createModificationWatchpointRequest
142
(testedClass.fieldByName(fieldName));
143
break;
144
145
case 3:
146
display("setting up ClassPrepareRequest");
147
eventRequest = eventRequestManager.createClassPrepareRequest();
148
break;
149
150
case 4:
151
display("setting up ClassUnloadRequest");
152
eventRequest = eventRequestManager.createClassUnloadRequest();
153
break;
154
155
case 5:
156
display("setting up MethodEntryRequest");
157
eventRequest = eventRequestManager.createMethodEntryRequest();
158
break;
159
160
case 6:
161
display("setting up MethodExitRequest");
162
eventRequest = eventRequestManager.createMethodExitRequest();
163
break;
164
165
case 7:
166
display("setting up ThreadDeathRequest");
167
eventRequest = eventRequestManager.createThreadDeathRequest();
168
break;
169
170
case 8:
171
display("setting up ThreadStartRequest");
172
eventRequest = eventRequestManager.createThreadStartRequest();
173
break;
174
175
case 9:
176
display("setting up ExceptionRequest");
177
eventRequest = eventRequestManager.createExceptionRequest( null, true, true );
178
break;
179
180
case 10:
181
display("setting up BreakpointRequest");
182
Method method = methodByName(testedClass, methodName);
183
List locs = null;
184
try {
185
locs = method.allLineLocations();
186
} catch(AbsentInformationException e) {
187
throw new Failure("Unexpected AbsentInformationException while getting ");
188
}
189
Location location = (Location)locs.get(0);
190
eventRequest = eventRequestManager.createBreakpointRequest(location);
191
break;
192
193
default:
194
throw new Failure("Wrong test case : " + i);
195
}
196
197
if (eventRequest == null) {
198
throw new Failure("Cannot create request case : " + i);
199
}
200
eventRequest.addCountFilter(1);
201
eventRequest.enable();
202
}
203
204
debuggee.sendSignal(SIGNAL_GO);
205
206
boolean exit = false;
207
boolean connected = true;
208
209
Event oldEvent = null;
210
211
while (!exit) {
212
EventSet eventSet = getEventSet();
213
EventIterator eventIterator = eventSet.eventIterator();
214
215
while (eventIterator.hasNext()) {
216
Event event = eventIterator.nextEvent();
217
218
display("Checking equals() method for Event object : " + event);
219
220
if (!event.equals(event)) {
221
complain("equals method is not reflexive. x.equals(x) returns false for Event object : " + event);
222
exitStatus = Consts.TEST_FAILED;
223
}
224
225
if (event != null && event.equals(null)) {
226
complain("equals(null) returns true for Event object " + event);
227
exitStatus = Consts.TEST_FAILED;
228
}
229
230
if (oldEvent != null) {
231
boolean eq1 = event.equals(oldEvent);
232
boolean eq2 = oldEvent.equals(event);
233
if ((!eq1 && eq2) || (eq1 && !eq2)) {
234
complain("equals() is not symmetric for Event object : " + event +
235
"\n\t and another one : " + oldEvent);
236
237
exitStatus = Consts.TEST_FAILED;
238
}
239
240
eq1 = event.equals(oldEvent);
241
eq2 = event.equals(oldEvent);
242
if ((!eq1 && eq2) || (eq1 && !eq2)) {
243
complain("equals() is not consistent for Event object : " + event +
244
"\n\t and another one : " + oldEvent);
245
246
exitStatus = Consts.TEST_FAILED;
247
}
248
}
249
250
if (event instanceof VMDeathEvent) {
251
connected = true;
252
} else if (event instanceof VMDisconnectEvent) {
253
connected = true;
254
exit = true;
255
}
256
oldEvent = event;
257
}
258
if (connected) {
259
eventSet.resume();
260
}
261
}
262
display("Checking completed!");
263
}
264
265
//--------------------------------------------------------- test specific methods
266
267
private static Method methodByName(ReferenceType refType, String methodName) {
268
List methodList = refType.methodsByName(methodName);
269
if (methodList == null) return null;
270
271
Method method = (Method) methodList.get(0);
272
return method;
273
}
274
275
private static EventSet getEventSet() {
276
EventSet eventSet;
277
try {
278
eventSet = debuggee.VM().eventQueue().remove(waitTime);
279
if (eventSet == null) {
280
throw new Failure("TIMEOUT while waiting for event");
281
}
282
} catch ( Exception e ) {
283
throw new Failure("Unexpected exception while waiting for event " + e);
284
}
285
return eventSet;
286
}
287
}
288
//--------------------------------------------------------- test specific classes
289
290