Bug 120886 - debug test not cleaning before next test runs
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/PreLaunchBreakpointTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/PreLaunchBreakpointTest.java
index 184d91b6..5864cd3 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/PreLaunchBreakpointTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/PreLaunchBreakpointTest.java
@@ -10,14 +10,15 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.core;
 
-import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.debug.core.DebugEvent;
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.debug.core.ILaunchesListener;
 import org.eclipse.debug.internal.ui.DebugUIPlugin;
 import org.eclipse.debug.internal.ui.IInternalDebugUIConstants;
-import org.eclipse.debug.ui.DebugUITools;
+import org.eclipse.jdt.debug.core.IJavaThread;
+import org.eclipse.jdt.debug.testplugin.DebugElementKindEventDetailWaiter;
+import org.eclipse.jdt.debug.testplugin.DebugEventWaiter;
 import org.eclipse.jdt.debug.tests.AbstractDebugTest;
 import org.eclipse.jface.dialogs.MessageDialogWithToggle;
 import org.eclipse.jface.preference.IPreferenceStore;
@@ -27,41 +28,26 @@
  */
 public class PreLaunchBreakpointTest extends AbstractDebugTest {
 	
-	private boolean debugAdded = false;
-	private boolean runRemoved = false;
-	
-	ILaunchConfiguration configuration;
-	String sourceName;
-	
 	public PreLaunchBreakpointTest(String name) {
 		super(name);
-		sourceName = name;
 	}
 	
-	public void testRunModeLaunchWithBreakpoints() {
+	public void testRunModeLaunchWithBreakpoints() throws Exception {
 		String typeName = "Breakpoints";		
 		
-		configuration = getLaunchConfiguration(typeName);
-		getLaunchManager().addLaunchListener(new MyListener());
+		ILaunchConfiguration configuration = getLaunchConfiguration(typeName);
 		
 		IPreferenceStore preferenceStore = DebugUIPlugin.getDefault().getPreferenceStore();
 		preferenceStore.setValue(IInternalDebugUIConstants.PREF_RELAUNCH_IN_DEBUG_MODE, MessageDialogWithToggle.ALWAYS);
-		
+		IJavaThread thread = null;
 		try {
-			createTargetPatternBreakpoint(77, sourceName);
-			
-			DebugUITools.buildAndLaunch(configuration, ILaunchManager.RUN_MODE, new NullProgressMonitor());
-			
-			synchronized (this) {
-				if (!debugAdded) {
-					try {
-						wait();
-					} catch (InterruptedException e) {
-					}
-				}
-			}
-			assertFalse("RUN_MODE Launch should never have been added", runRemoved);
-			assertTrue("DEBUG_MODE Launch should have been added", debugAdded);
+			createLineBreakpoint(52, typeName);
+			DebugEventWaiter waiter= new DebugElementKindEventDetailWaiter(DebugEvent.SUSPEND, IJavaThread.class, DebugEvent.BREAKPOINT);
+			waiter.setTimeout(DEFAULT_TIMEOUT);
+			ILaunch launch = configuration.launch(ILaunchManager.RUN_MODE, null);
+			Object suspendee= waiter.waitForEvent();
+			assertTrue("Program did not suspend", suspendee instanceof IJavaThread);
+			thread = (IJavaThread) suspendee;
 			
 		} catch (Exception e) {
 			e.printStackTrace();
@@ -69,44 +55,7 @@
 			removeAllBreakpoints();
 			//this must get done... other tests might fail.
 			preferenceStore.setValue(IInternalDebugUIConstants.PREF_RELAUNCH_IN_DEBUG_MODE, MessageDialogWithToggle.NEVER);
-		}
-	}
-	
-	private class MyListener implements ILaunchesListener {
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch[])
-		 */
-		public void launchesRemoved(ILaunch[] launches) {
-			synchronized (PreLaunchBreakpointTest.this) {
-				for (int i = 0; i < launches.length; i++) {
-					ILaunchConfiguration goneAway = launches[i].getLaunchConfiguration();
-					if (goneAway.equals(configuration) && launches[i].getLaunchMode().equals(ILaunchManager.RUN_MODE)) {
-						runRemoved = true;
-						PreLaunchBreakpointTest.this.notify();
-					}
-				}
-			}
-		}
-		
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch[])
-		 */
-		public void launchesAdded(ILaunch[] launches) {
-			synchronized (PreLaunchBreakpointTest.this) {
-				for (int i = 0; i < launches.length; i++) {
-					ILaunchConfiguration newLC = launches[i].getLaunchConfiguration();
-					if (newLC.equals(configuration) && launches[i].getLaunchMode().equals(ILaunchManager.DEBUG_MODE)) {
-						debugAdded = true;
-						PreLaunchBreakpointTest.this.notify();
-					}
-				}
-			}
-		}
-		
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[])
-		 */
-		public void launchesChanged(ILaunch[] launches) {
+			terminateAndRemove(thread);
 		}
 	}
 }