Skip to content

Commit 209eb7e

Browse files
committed
Wait for specific MethodExitEvent in MethodReturnValuesTests
MethodReturnValuesTests can receive multiple MethodExitEvent events, before calling EventWaiter.waitEvent(). As a result, the test can potentially make its checks on the wrong event, e.g. for: MainClass.triggerEvent() This change ensures only the MethodExitEvent for the correct method is accepted by EventWaiter. Fixes: #528
1 parent c927f6c commit 209eb7e

File tree

3 files changed

+47
-6
lines changed

3 files changed

+47
-6
lines changed

org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/EventWaiter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,8 @@ public boolean modificationWatchpoint(ModificationWatchpointEvent event) {
116116
* Notify any object that is waiting for an event.
117117
*/
118118
synchronized protected void notifyEvent(Event event) {
119-
notify();
120119
fEvent = event;
120+
notify();
121121
}
122122
/**
123123
* @see org.eclipse.debug.jdi.tests.EventListener#step(com.sun.jdi.event.StepEvent)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2026 Simeon Andreev and others.
3+
*
4+
* This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Public License 2.0
6+
* which accompanies this distribution, and is available at
7+
* https://www.eclipse.org/legal/epl-2.0/
8+
*
9+
* SPDX-License-Identifier: EPL-2.0
10+
*
11+
* Contributors:
12+
* Simeon Andreev - initial API and implementation
13+
*******************************************************************************/
14+
15+
package org.eclipse.debug.jdi.tests;
16+
17+
import com.sun.jdi.event.MethodExitEvent;
18+
import com.sun.jdi.request.EventRequest;
19+
/**
20+
* Listen for ClassPrepareEvent for a specific class.
21+
*/
22+
public class MethodExitEventWaiter extends EventWaiter {
23+
protected String fMethodName;
24+
25+
/**
26+
* Constructor
27+
*/
28+
public MethodExitEventWaiter(EventRequest request, boolean shouldGo, String methodName) {
29+
super(request, shouldGo);
30+
fMethodName = methodName;
31+
}
32+
33+
@Override
34+
public boolean methodExit(MethodExitEvent event) {
35+
if (event.method().name().equals(fMethodName)) {
36+
notifyEvent(event);
37+
return fShouldGo;
38+
}
39+
return true;
40+
}
41+
}

org.eclipse.jdt.debug.jdi.tests/tests/org/eclipse/debug/jdi/tests/MethodReturnValuesTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public void testGetVoidMethodReturnValue() {
9595
req = erm.createMethodExitRequest();
9696
req.addClassFilter("org.eclipse.debug.jdi.tests.program.*");
9797
req.enable();
98-
waiter = new EventWaiter(req, true);
98+
waiter = new MethodExitEventWaiter(req, true, "print");
9999
fEventReader.addEventListener(waiter);
100100
tref.resume();
101101
event = (MethodExitEvent)waiter.waitEvent(10000);
@@ -137,7 +137,7 @@ public void testGetStringMethodReturnValue() {
137137
req = erm.createMethodExitRequest();
138138
req.addClassFilter("org.eclipse.debug.jdi.tests.program.*");
139139
req.enable();
140-
waiter = new EventWaiter(req, true);
140+
waiter = new MethodExitEventWaiter(req, true, "foo");
141141
fEventReader.addEventListener(waiter);
142142
tref.resume();
143143
event = (MethodExitEvent)waiter.waitEvent(5000);
@@ -179,7 +179,7 @@ public void testGetIntMethodReturnValue() {
179179
req = erm.createMethodExitRequest();
180180
req.addClassFilter("org.eclipse.debug.jdi.tests.program.*");
181181
req.enable();
182-
waiter = new EventWaiter(req, true);
182+
waiter = new MethodExitEventWaiter(req, true, "getInt");
183183
fEventReader.addEventListener(waiter);
184184
tref.resume();
185185
event = (MethodExitEvent)waiter.waitEvent(5000);
@@ -221,7 +221,7 @@ public void testGetBooleanMethodReturnValue() {
221221
req = erm.createMethodExitRequest();
222222
req.addClassFilter("org.eclipse.debug.jdi.tests.program.*");
223223
req.enable();
224-
waiter = new EventWaiter(req, true);
224+
waiter = new MethodExitEventWaiter(req, true, "getBoolean");
225225
fEventReader.addEventListener(waiter);
226226
tref.resume();
227227
event = (MethodExitEvent)waiter.waitEvent(5000);
@@ -263,7 +263,7 @@ public void testGetLongMethodReturnValue() {
263263
req = erm.createMethodExitRequest();
264264
req.addClassFilter("org.eclipse.debug.jdi.tests.program.*");
265265
req.enable();
266-
waiter = new EventWaiter(req, true);
266+
waiter = new MethodExitEventWaiter(req, true, "getLong");
267267
fEventReader.addEventListener(waiter);
268268
tref.resume();
269269
event = (MethodExitEvent)waiter.waitEvent(5000);

0 commit comments

Comments
 (0)