Bug 307938 -  Rhino debugger line tracking is bogus
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/scripts/script1.js b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/scripts/script1.js
index f19e46d..b22318e 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/scripts/script1.js
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/scripts/script1.js
@@ -1,6 +1,6 @@
 var line1 = true;
 function test() { //line 2
-	return; "line 3"; //line 3
+	return "line 3"; //line 3
 }//line 4
 // line 5
 var line6 = test();
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/BreakpointRequestTests.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/BreakpointRequestTests.java
new file mode 100644
index 0000000..8cd3e88
--- /dev/null
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/BreakpointRequestTests.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.jsdt.debug.rhino.tests;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
+import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
+import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
+import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
+import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.Scriptable;
+
+/**
+ * Variety of tests for requesting breakpoint(s)
+ * 
+ * @since 1.1
+ */
+public class BreakpointRequestTests extends RequestTest {
+
+	/**
+	 * Tests that asking for an invalid breakpoint returns an unsuccessful response
+	 * 
+	 * @throws Exception
+	 */
+	public void testInvalidBreakpoint() throws Exception {
+		Request request = new Request(JSONConstants.BREAKPOINT);
+		request.getArguments().put(JSONConstants.BREAKPOINT_ID, new Integer("9999"));
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertFalse(response.isSuccess());
+	}
+
+	
+	/**
+	 * Tests asking for all breakpoints when none have been set
+	 * 
+	 * @throws Exception
+	 */
+	public void testBreakpointsWithNoBreakpoints() throws Exception {
+		Request request = new Request(JSONConstants.BREAKPOINTS);
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
+		assertNotNull(breakpoints);
+		assertTrue(breakpoints.isEmpty());
+	}
+
+	/**
+	 * Tests trying to clear an invalid breakpoint id
+	 * @throws Exception
+	 */
+	public void testClearInvalidBreakpoint() throws Exception {
+		Request request = new Request(JSONConstants.CLEARBREAKPOINT);
+		request.getArguments().put(JSONConstants.BREAKPOINT_ID, new Integer("9999"));
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertFalse(response.isSuccess());
+	}
+
+	/**
+	 * Tests setting a breakpoint on every valid line of the test script and verifying they exist
+	 * 
+	 * @throws Exception
+	 */
+	public void testBreakpoints() throws Exception {
+		eventHandler.addSubhandler(setBreakpointsHandler);
+		Request request = new Request(JSONConstants.BREAKPOINTS);
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
+		assertNotNull(breakpoints);
+		assertTrue(breakpoints.isEmpty());
+
+		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
+		assertNotNull("The test source for [script1.js] must exist", script);
+		
+		Scriptable scope = null;
+		Context context = contextFactory.enterContext();
+		try {
+			scope = context.initStandardObjects();
+			context.evaluateString(scope, script, "script", 0, null);
+		} finally {
+			Context.exit();
+		}
+
+		waitForEvents(1);
+
+		request = new Request(JSONConstants.BREAKPOINTS);
+		debugSession.sendRequest(request);
+		response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
+		assertNotNull(breakpoints);
+		assertEquals(7, breakpoints.size());
+
+		for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
+			Number breakpointId = (Number) iterator.next();
+			request = new Request(JSONConstants.BREAKPOINT);
+			request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
+			debugSession.sendRequest(request);
+			response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+			assertTrue(response.isSuccess());
+			Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
+			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
+			assertTrue(breakpoint.containsKey(JSONConstants.SCRIPT_ID));
+		}
+	}
+	
+	/**
+	 * Tests setting breakpoints and removing them
+	 * @throws Exception
+	 */
+	public void testGetSetClearBreakpoint() throws Exception {
+		eventHandler.addSubhandler(setBreakpointsHandler);
+		eventHandler.addSubhandler(clearBreakpointsHandler);
+
+		Request request = new Request(JSONConstants.BREAKPOINTS);
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
+		assertNotNull(breakpoints);
+		assertTrue(breakpoints.isEmpty());
+
+		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
+		assertNotNull("The test source for [script1.js] must exist", script);
+		
+		Scriptable scope = null;
+		Context context = contextFactory.enterContext();
+		try {
+			scope = context.initStandardObjects();
+			context.evaluateString(scope, script, "script", 0, null);
+		} finally {
+			Context.exit();
+		}
+		waitForEvents(6);
+		request = new Request(JSONConstants.BREAKPOINTS);
+		debugSession.sendRequest(request);
+		response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
+		assertNotNull(breakpoints);
+		assertEquals(2, breakpoints.size());
+
+		for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
+			Number breakpointId = (Number) iterator.next();
+			request = new Request(JSONConstants.BREAKPOINT);
+			request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
+			debugSession.sendRequest(request);
+			response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+			assertTrue(response.isSuccess());
+			Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
+			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
+			assertTrue(breakpoint.containsKey(JSONConstants.SCRIPT_ID));
+			deleteBreakpoint(debugSession, breakpointId);
+		}
+	}
+	
+	void deleteBreakpoint(DebugSession session, Number breakpointid) {
+		Request request = new Request(JSONConstants.CLEARBREAKPOINT);
+		request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointid);
+		try {
+			debugSession.sendRequest(request);
+			Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+			assertTrue(response.isSuccess());
+		} catch (DisconnectedException e) {
+			e.printStackTrace();
+		} catch (TimeoutException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/FrameRequestTests.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/FrameRequestTests.java
new file mode 100644
index 0000000..7fd5b7e
--- /dev/null
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/FrameRequestTests.java
@@ -0,0 +1,188 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.jsdt.debug.rhino.tests;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
+import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
+import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
+import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
+import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
+import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
+import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.Scriptable;
+
+/**
+ * Variety of tests for requesting frame(s) / frame information
+ * 
+ * @since 1.1
+ */
+public class FrameRequestTests extends RequestTest {
+
+	
+	Subhandler setBreakpointHandler = new Subhandler() {
+		public boolean handleEvent(DebugSession debugSession, EventPacket event) {
+			if (event.getEvent().equals(JSONConstants.SCRIPT)) {
+				Object scriptId = event.getBody().get(JSONConstants.SCRIPT_ID);
+				Request request = new Request(JSONConstants.SCRIPT);
+				request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
+				try {
+					debugSession.sendRequest(request);
+					Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+					assertTrue(response.isSuccess());
+					Map result = (Map) response.getBody().get(JSONConstants.SCRIPT);
+					assertNotNull("The script map cannot be null", result);
+					// just set the breakpoint on line 6
+					request = new Request(JSONConstants.SETBREAKPOINT);
+					request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
+					request.getArguments().put(JSONConstants.LINE, new Integer(6));
+					debugSession.sendRequest(request);
+					response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+					assertTrue(response.isSuccess());
+				} catch (DisconnectedException e) {
+					e.printStackTrace();
+				} catch (TimeoutException e) {
+					e.printStackTrace();
+				}
+				return true;
+			}
+			return false;
+		}
+	};
+	/**
+	 * Tests getting a frame once suspended
+	 * @throws Exception
+	 */
+	public void testFramesAndFrameLookup() throws Exception {
+		
+		eventHandler.addSubhandler(setBreakpointHandler);
+
+		final Object[] success = new Object[1];
+
+		Subhandler frameCheckHandler = new Subhandler() {
+			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
+				if (event.getEvent().equals(JSONConstants.BREAK)) {
+					Number threadId = (Number) event.getBody().get(JSONConstants.THREAD_ID);
+					Number contextId = (Number) event.getBody().get(JSONConstants.CONTEXT_ID);
+					Request request = new Request(JSONConstants.FRAMES);
+					request.getArguments().put(JSONConstants.THREAD_ID, threadId);
+					try {
+						debugSession.sendRequest(request);
+						Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+						assertTrue(response.isSuccess());
+						Collection frames = (Collection) response.getBody().get(JSONConstants.FRAMES);
+						for (Iterator iterator = frames.iterator(); iterator.hasNext();) {
+							Number frameId = (Number) iterator.next();
+							request = new Request(JSONConstants.FRAME);
+							request.getArguments().put(JSONConstants.THREAD_ID, threadId);
+							request.getArguments().put(JSONConstants.CONTEXT_ID, contextId);
+							request.getArguments().put(JSONConstants.FRAME_ID, frameId);
+							debugSession.sendRequest(request);
+							response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+							assertTrue(response.isSuccess());
+						}
+						success[0] = Boolean.TRUE;
+					} catch (DisconnectedException e) {
+						e.printStackTrace();
+					} catch (TimeoutException e) {
+						e.printStackTrace();
+					}
+					return true;
+				}
+				return false;
+			}
+		};
+		eventHandler.addSubhandler(frameCheckHandler);
+		
+		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
+		assertNotNull("The test source for [script1.js] must exist", script);
+		
+		Scriptable scope = null;
+		Context context = contextFactory.enterContext();
+		try {
+			scope = context.initStandardObjects();
+			context.evaluateString(scope, script, JSONConstants.SCRIPT, 0, null);
+		} finally {
+			Context.exit();
+		}
+		//script + breakpoint on line 6
+		waitForEvents(2);
+		assertEquals(Boolean.TRUE, success[0]);
+	}
+	
+	/**
+	 * Tests getting frames and running an evaluate
+	 * @throws Exception
+	 */
+	public void testFramesAndFrameLookupAndEvaluate() throws Exception {
+		eventHandler.addSubhandler(setBreakpointHandler);
+
+		final Object[] success = new Object[1];
+
+		Subhandler frameCheckHandler = new Subhandler() {
+			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
+				if (event.getEvent().equals(JSONConstants.BREAK)) {
+					Number threadId = (Number) event.getBody().get(JSONConstants.THREAD_ID);
+					Number contextId = (Number) event.getBody().get(JSONConstants.CONTEXT_ID);
+					Request request = new Request(JSONConstants.FRAMES);
+					request.getArguments().put(JSONConstants.THREAD_ID, threadId);
+					try {
+						debugSession.sendRequest(request);
+						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
+						assertTrue(response.isSuccess());
+						Collection frames = (Collection) response.getBody().get(JSONConstants.FRAMES);
+						for (Iterator iterator = frames.iterator(); iterator.hasNext();) {
+							Number frameId = (Number) iterator.next();
+							request = new Request(JSONConstants.EVALUATE);
+							request.getArguments().put(JSONConstants.THREAD_ID, threadId);
+							request.getArguments().put(JSONConstants.CONTEXT_ID, contextId);
+							request.getArguments().put(JSONConstants.FRAME_ID, frameId);
+							request.getArguments().put(JSONConstants.EXPRESSION, "this");
+							debugSession.sendRequest(request);
+							response = debugSession.receiveResponse(request.getSequence(), 10000);
+							assertTrue(response.isSuccess());
+							assertTrue(response.getBody().containsKey(JSONConstants.EVALUATE));
+						}
+						success[0] = Boolean.TRUE;
+					} catch (DisconnectedException e) {
+						e.printStackTrace();
+					} catch (TimeoutException e) {
+						e.printStackTrace();
+					}
+					return true;
+				}
+				return false;
+			}
+		};
+		eventHandler.addSubhandler(frameCheckHandler);
+
+		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
+		assertNotNull("The test source for [script1.js] must exist", script);
+
+		Scriptable scope = null;
+		Context context = contextFactory.enterContext();
+		try {
+			scope = context.initStandardObjects();
+			context.evaluateString(scope, script, "script", 0, null);
+		} finally {
+			Context.exit();
+		}
+		//script + breakpoint + StepEvent when we exit context
+		waitForEvents(3);
+		assertEquals(Boolean.TRUE, success[0]);
+	}
+}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestBreakpointTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestBreakpointTest.java
deleted file mode 100644
index 2d47952..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestBreakpointTest.java
+++ /dev/null
@@ -1,234 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-
-public class RequestBreakpointTest extends RequestTest {
-
-	/**
-	 * Tests that asking for an invalid breakpoint returns an unsuccessful response
-	 * 
-	 * @throws DisconnectedException
-	 * @throws TimeoutException
-	 */
-	public void testInvalidBreakpoint() throws DisconnectedException, TimeoutException {
-		Request request = new Request(JSONConstants.BREAKPOINT);
-		request.getArguments().put(JSONConstants.BREAKPOINT_ID, new Integer("9999"));
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertFalse(response.isSuccess());
-	}
-
-	public void testGetSetClearBreakpoint() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals(JSONConstants.SCRIPT)) {
-					Number scriptId = (Number) event.getBody().get(JSONConstants.SCRIPT_ID);
-					Request request = new Request(JSONConstants.SCRIPT);
-					request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get(JSONConstants.SCRIPT);
-
-						// line numbers
-						List lineNumbers = (List) result.get(JSONConstants.LINES);
-						for (Iterator iterator = lineNumbers.iterator(); iterator.hasNext();) {
-							Number lineNumber = (Number) iterator.next();
-							request = new Request(JSONConstants.SETBREAKPOINT);
-							request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
-							request.getArguments().put(JSONConstants.LINE, lineNumber);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-
-							Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-							Number breakpointId = (Number) breakpoint.get(JSONConstants.BREAKPOINT_ID);
-							request = new Request(JSONConstants.BREAKPOINT);
-							request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-							breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-							assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
-							assertEquals(scriptId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.SCRIPT_ID)));
-							assertEquals(lineNumber.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.LINE)));
-							assertNull(breakpoint.get(JSONConstants.FUNCTION));
-						}
-
-						// functions
-						List functionNames = (List) result.get(JSONConstants.FUNCTIONS);
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request(JSONConstants.SETBREAKPOINT);
-							request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
-							request.getArguments().put(JSONConstants.FUNCTION, functionName);
-							request.getArguments().put(JSONConstants.CONDITION, "1===1");
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-
-							Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-							Number breakpointId = (Number) breakpoint.get(JSONConstants.BREAKPOINT_ID);
-							request = new Request(JSONConstants.BREAKPOINT);
-							request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-							breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-							assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
-							assertEquals(scriptId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.SCRIPT_ID)));
-							assertEquals(functionName, breakpoint.get(JSONConstants.FUNCTION));
-							assertEquals("1===1", breakpoint.get(JSONConstants.CONDITION));
-							assertNull(breakpoint.get(JSONConstants.LINE));
-						}
-
-						// script onEnter
-						request = new Request(JSONConstants.SETBREAKPOINT);
-						request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
-						debugSession.sendRequest(request);
-						response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-
-						Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-						Number breakpointId = (Number) breakpoint.get(JSONConstants.BREAKPOINT_ID);
-						request = new Request(JSONConstants.BREAKPOINT);
-						request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
-						debugSession.sendRequest(request);
-						response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-						assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
-						assertEquals(scriptId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.SCRIPT_ID)));
-						assertNull(breakpoint.get(JSONConstants.LINE));
-						assertNull(breakpoint.get(JSONConstants.FUNCTION));
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		Subhandler clearbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals(JSONConstants.BREAK)) {
-					List breakpoints = (List) event.getBody().get(JSONConstants.BREAKPOINTS);
-					for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-						Number breakpointId = (Number) iterator.next();
-						Request request = new Request(JSONConstants.CLEARBREAKPOINT);
-						request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
-						try {
-							debugSession.sendRequest(request);
-							Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-
-							Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-							breakpointId = (Number) breakpoint.get(JSONConstants.BREAKPOINT_ID);
-							request = new Request(JSONConstants.BREAKPOINT);
-							request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertFalse(response.isSuccess());
-						} catch (DisconnectedException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						} catch (TimeoutException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						}
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(clearbreakpointHandler);
-
-		Request request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertTrue(breakpoints.isEmpty());
-
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(8);
-		request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertEquals(3, breakpoints.size());
-
-		for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-			Number breakpointId = (Number) iterator.next();
-			request = new Request(JSONConstants.BREAKPOINT);
-			request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
-			debugSession.sendRequest(request);
-			response = debugSession.receiveResponse(request.getSequence(), 10000);
-			assertTrue(response.isSuccess());
-			Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
-			assertTrue(breakpoint.containsKey(JSONConstants.SCRIPT_ID));
-		}
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestBreakpointsTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestBreakpointsTest.java
deleted file mode 100644
index 53e098b..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestBreakpointsTest.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-
-public class RequestBreakpointsTest extends RequestTest {
-
-	public void testBreakpointsWithNoBreakpoints() throws DisconnectedException, TimeoutException {
-		Request request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertTrue(breakpoints.isEmpty());
-	}
-
-	public void testBreakpoints() throws DisconnectedException, TimeoutException {
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get("script");
-
-						// line numbers
-						List lineNumbers = (List) result.get("lines");
-						for (Iterator iterator = lineNumbers.iterator(); iterator.hasNext();) {
-							Number lineNumber = (Number) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("line", lineNumber);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-
-						// functions
-						List functionNames = (List) result.get("functions");
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("function", functionName);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-
-						// script onEnter
-						request = new Request("setbreakpoint");
-						request.getArguments().put("scriptId", scriptId);
-						debugSession.sendRequest(request);
-						response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		Request request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertTrue(breakpoints.isEmpty());
-
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-
-		waitForEvents(1);
-
-		request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertEquals(10, breakpoints.size());
-
-		for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-			Number breakpointId = (Number) iterator.next();
-			request = new Request("breakpoint");
-			request.getArguments().put("breakpointId", breakpointId);
-			debugSession.sendRequest(request);
-			response = debugSession.receiveResponse(request.getSequence(), 10000);
-			assertTrue(response.isSuccess());
-			Map breakpoint = (Map) response.getBody().get("breakpoint");
-			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get("breakpointId")));
-			assertTrue(breakpoint.containsKey("scriptId"));
-		}
-	}
-
-	public void testBreakpointsWithClear() throws DisconnectedException, TimeoutException {
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get("script");
-
-						// line numbers
-						List lineNumbers = (List) result.get("lines");
-						for (Iterator iterator = lineNumbers.iterator(); iterator.hasNext();) {
-							Number lineNumber = (Number) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("line", lineNumber);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-
-						// functions
-						List functionNames = (List) result.get("functions");
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("function", functionName);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-
-						// script onEnter
-						request = new Request("setbreakpoint");
-						request.getArguments().put("scriptId", scriptId);
-						debugSession.sendRequest(request);
-						response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		Subhandler clearbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					List breakpoints = (List) event.getBody().get(JSONConstants.BREAKPOINTS);
-					for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-						Number breakpointId = (Number) iterator.next();
-						Request request = new Request("clearbreakpoint");
-						request.getArguments().put("breakpointId", breakpointId);
-						try {
-							debugSession.sendRequest(request);
-							Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						} catch (DisconnectedException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						} catch (TimeoutException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						}
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(clearbreakpointHandler);
-
-		Request request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertTrue(breakpoints.isEmpty());
-
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(8);
-		request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertEquals(3, breakpoints.size());
-
-		for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-			Number breakpointId = (Number) iterator.next();
-			request = new Request("breakpoint");
-			request.getArguments().put("breakpointId", breakpointId);
-			debugSession.sendRequest(request);
-			response = debugSession.receiveResponse(request.getSequence(), 10000);
-			assertTrue(response.isSuccess());
-			Map breakpoint = (Map) response.getBody().get("breakpoint");
-			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get("breakpointId")));
-			assertTrue(breakpoint.containsKey("scriptId"));
-		}
-	}
-
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestClearBreakpointTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestClearBreakpointTest.java
deleted file mode 100644
index 6d14a54..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestClearBreakpointTest.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-
-public class RequestClearBreakpointTest extends RequestTest {
-
-	public void testClearInvalidBreakpoint() throws DisconnectedException, TimeoutException {
-		Request request = new Request("clearbreakpoint");
-		request.getArguments().put("breakpointId", new Integer("9999"));
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertFalse(response.isSuccess());
-	}
-
-	public void testGetSetClearBreakpoint() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get("script");
-
-						// line numbers
-						List lineNumbers = (List) result.get("lines");
-						for (Iterator iterator = lineNumbers.iterator(); iterator.hasNext();) {
-							Number lineNumber = (Number) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("line", lineNumber);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-
-						// functions
-						List functionNames = (List) result.get("functions");
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("function", functionName);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-
-						// script onEnter
-						request = new Request("setbreakpoint");
-						request.getArguments().put("scriptId", scriptId);
-						debugSession.sendRequest(request);
-						response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		Subhandler clearbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					List breakpoints = (List) event.getBody().get("breakpoints");
-					for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-						Number breakpointId = (Number) iterator.next();
-						Request request = new Request("clearbreakpoint");
-						request.getArguments().put("breakpointId", breakpointId);
-						try {
-							debugSession.sendRequest(request);
-							Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						} catch (DisconnectedException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						} catch (TimeoutException e) {
-							// TODO Auto-generated catch block
-							e.printStackTrace();
-						}
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(clearbreakpointHandler);
-
-		Request request = new Request("breakpoints");
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get("breakpoints");
-		assertNotNull(breakpoints);
-		assertTrue(breakpoints.isEmpty());
-
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(8);
-		request = new Request("breakpoints");
-		debugSession.sendRequest(request);
-		response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get("breakpoints");
-		assertNotNull(breakpoints);
-		assertEquals(3, breakpoints.size());
-
-		for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-			Number breakpointId = (Number) iterator.next();
-			request = new Request("breakpoint");
-			request.getArguments().put("breakpointId", breakpointId);
-			debugSession.sendRequest(request);
-			response = debugSession.receiveResponse(request.getSequence(), 10000);
-			assertTrue(response.isSuccess());
-			Map breakpoint = (Map) response.getBody().get("breakpoint");
-			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get("breakpointId")));
-			assertTrue(breakpoint.containsKey("scriptId"));
-		}
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestEvaluateTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestEvaluateTest.java
deleted file mode 100644
index 5656a0e..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestEvaluateTest.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-
-public class RequestEvaluateTest extends RequestTest {
-
-	public void testFramesAndFrameLookupAndEvaluate() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get("script");
-						// functions
-						List functionNames = (List) result.get("functions");
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("function", functionName);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		final Object[] success = new Object[1];
-
-		Subhandler frameCheckHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					Number threadId = (Number) event.getBody().get("threadId");
-					Number contextId = (Number) event.getBody().get("contextId");
-					Request request = new Request("frames");
-					request.getArguments().put("threadId", threadId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Collection frames = (Collection) response.getBody().get("frames");
-						for (Iterator iterator = frames.iterator(); iterator.hasNext();) {
-							Number frameId = (Number) iterator.next();
-							request = new Request("evaluate");
-							request.getArguments().put("threadId", threadId);
-							request.getArguments().put("contextId", contextId);
-							request.getArguments().put("frameId", frameId);
-							request.getArguments().put("expression", "this");
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-							assertTrue(response.getBody().containsKey("evaluate"));
-						}
-						success[0] = Boolean.TRUE;
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(frameCheckHandler);
-
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(4);
-		assertEquals(Boolean.TRUE, success[0]);
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestFrameTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestFrameTest.java
deleted file mode 100644
index bd95107..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestFrameTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-import org.osgi.framework.Constants;
-
-public class RequestFrameTest extends RequestTest {
-
-	public void testFramesAndFrameLookupAndEvaluate() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get("script");
-						// functions
-						List functionNames = (List) result.get("functions");
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("function", functionName);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		final Object[] success = new Object[1];
-
-		Subhandler frameCheckHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					Number threadId = (Number) event.getBody().get("threadId");
-					Number contextId = (Number) event.getBody().get("contextId");
-					Request request = new Request("frames");
-					request.getArguments().put("threadId", threadId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Collection frames = (Collection) response.getBody().get("frames");
-						for (Iterator iterator = frames.iterator(); iterator.hasNext();) {
-							Number frameId = (Number) iterator.next();
-							request = new Request("frame");
-							request.getArguments().put("threadId", threadId);
-							request.getArguments().put("contextId", contextId);
-							request.getArguments().put("frameId", frameId);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-						success[0] = Boolean.TRUE;
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(frameCheckHandler);
-
-		Map headers = new HashMap();
-		headers.put(Constants.BUNDLE_SYMBOLICNAME, "test");
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(4);
-		assertEquals(Boolean.TRUE, success[0]);
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestFramesTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestFramesTest.java
deleted file mode 100644
index d7c38a9..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestFramesTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-import org.osgi.framework.Constants;
-
-public class RequestFramesTest extends RequestTest {
-
-	public void testFramesAndFrameLookupAndEvaluate() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get("script");
-						// functions
-						List functionNames = (List) result.get("functions");
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("function", functionName);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		final Object[] success = new Object[1];
-
-		Subhandler frameCheckHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					Number threadId = (Number) event.getBody().get("threadId");
-					Number contextId = (Number) event.getBody().get("contextId");
-					Request request = new Request("frames");
-					request.getArguments().put("threadId", threadId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Collection frames = (Collection) response.getBody().get("frames");
-						for (Iterator iterator = frames.iterator(); iterator.hasNext();) {
-							Number frameId = (Number) iterator.next();
-							request = new Request("frame");
-							request.getArguments().put("threadId", threadId);
-							request.getArguments().put("contextId", contextId);
-							request.getArguments().put("frameId", frameId);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-
-							request = new Request("lookup");
-							request.getArguments().put("threadId", threadId);
-							request.getArguments().put("contextId", contextId);
-							request.getArguments().put("frameId", frameId);
-							request.getArguments().put("handle", new Integer(0));
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-							assertTrue(response.getBody().containsKey("lookup"));
-
-							request = new Request("evaluate");
-							request.getArguments().put("threadId", threadId);
-							request.getArguments().put("contextId", contextId);
-							request.getArguments().put("frameId", frameId);
-							request.getArguments().put("expression", "this");
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-							assertTrue(response.getBody().containsKey("evaluate"));
-						}
-						success[0] = Boolean.TRUE;
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(frameCheckHandler);
-
-		Map headers = new HashMap();
-		headers.put(Constants.BUNDLE_SYMBOLICNAME, "test");
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(4);
-		assertEquals(Boolean.TRUE, success[0]);
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestLookupTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestLookupTest.java
index fe705cb..29e3899 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestLookupTest.java
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestLookupTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
+ * Copyright (c) 2009, 2010 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,94 +11,65 @@
 package org.eclipse.wst.jsdt.debug.rhino.tests;
 
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
 
+import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
 import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
 import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
 import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
 import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
+import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
 import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
 import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
 import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Scriptable;
-import org.osgi.framework.Constants;
 
-public class RequestLookupTest extends RequestTest {
+/**
+ * Variety of tests for sending <code>lookup</code> requests
+ * 
+ * @since 1.0
+ */
+public class RequestLookupTest extends FrameRequestTests {
 
-	public void testLookup() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map result = (Map) response.getBody().get("script");
-						// functions
-						List functionNames = (List) result.get("functions");
-						for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
-							String functionName = (String) iterator.next();
-							request = new Request("setbreakpoint");
-							request.getArguments().put("scriptId", scriptId);
-							request.getArguments().put("function", functionName);
-							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
-							assertTrue(response.isSuccess());
-						}
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
+	/**
+	 * Tests performing a <code>lookup</code>
+	 * @throws Exception
+	 */
+	public void testLookup() throws Exception {
+		
+		eventHandler.addSubhandler(setBreakpointHandler);
 
 		final Object[] success = new Object[1];
 
 		Subhandler frameCheckHandler = new Subhandler() {
 			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					Number threadId = (Number) event.getBody().get("threadId");
-					Number contextId = (Number) event.getBody().get("contextId");
+				if (event.getEvent().equals(JSONConstants.BREAK)) {
+					Number threadId = (Number) event.getBody().get(JSONConstants.THREAD_ID);
+					Number contextId = (Number) event.getBody().get(JSONConstants.CONTEXT_ID);
 					Request request = new Request("frames");
-					request.getArguments().put("threadId", threadId);
+					request.getArguments().put(JSONConstants.THREAD_ID, threadId);
 					try {
 						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
+						Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 						assertTrue(response.isSuccess());
 						Collection frames = (Collection) response.getBody().get("frames");
 						for (Iterator iterator = frames.iterator(); iterator.hasNext();) {
 							Number frameId = (Number) iterator.next();
-							request = new Request("lookup");
-							request.getArguments().put("threadId", threadId);
-							request.getArguments().put("contextId", contextId);
-							request.getArguments().put("frameId", frameId);
-							request.getArguments().put("handle", new Integer(0));
+							request = new Request(JSONConstants.LOOKUP);
+							request.getArguments().put(JSONConstants.THREAD_ID, threadId);
+							request.getArguments().put(JSONConstants.CONTEXT_ID, contextId);
+							request.getArguments().put(JSONConstants.FRAME_ID, frameId);
+							request.getArguments().put(JSONConstants.HANDLE, new Integer(0));
 							debugSession.sendRequest(request);
-							response = debugSession.receiveResponse(request.getSequence(), 10000);
+							response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 							assertTrue(response.isSuccess());
-							assertTrue(response.getBody().containsKey("lookup"));
+							assertTrue(response.getBody().containsKey(JSONConstants.LOOKUP));
 						}
 						success[0] = Boolean.TRUE;
 					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
 						e.printStackTrace();
 					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
 						e.printStackTrace();
 					}
 					return true;
@@ -108,25 +79,8 @@
 		};
 		eventHandler.addSubhandler(frameCheckHandler);
 
-		Map headers = new HashMap();
-		headers.put(Constants.BUNDLE_SYMBOLICNAME, "test");
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
+		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
+		assertNotNull("The test source for [script1.js] must exist", script);
 
 		Scriptable scope = null;
 		Context context = contextFactory.enterContext();
@@ -136,7 +90,8 @@
 		} finally {
 			Context.exit();
 		}
-		waitForEvents(4);
+		//script + breakpoint on line 6 + exit step event
+		waitForEvents(3);
 		assertEquals(Boolean.TRUE, success[0]);
 	}
 }
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestScriptTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestScriptTest.java
deleted file mode 100644
index ee47838..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestScriptTest.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-import org.osgi.framework.Constants;
-
-public class RequestScriptTest extends RequestTest {
-
-	public void testScript() throws DisconnectedException, TimeoutException {
-
-		Map headers = new HashMap();
-		headers.put(Constants.BUNDLE_SYMBOLICNAME, "test");
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-
-		Request request = new Request("scripts");
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		List scripts = (List) response.getBody().get("scripts");
-		assertNotNull(scripts);
-		assertFalse(scripts.isEmpty());
-
-		request = new Request("script");
-		request.getArguments().put("scriptId", scripts.get(0));
-		debugSession.sendRequest(request);
-		response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Map result = (Map) response.getBody().get("script");
-		assertEquals(script, result.get("source"));
-		List lineNumbers = (List) result.get("lines");
-		assertEquals(7, lineNumbers.size());
-		assertTrue("The line number [2] should be returned", lineNumbers.contains(new BigDecimal(2)));
-		assertTrue("The line number [3] should be returned", lineNumbers.contains(new BigDecimal(3)));
-		assertTrue("The line number [6] should be returned", lineNumbers.contains(new BigDecimal(6)));
-		assertTrue("The line number [7] should be returned", lineNumbers.contains(new BigDecimal(7)));
-		assertTrue("The line number [10] should be returned", lineNumbers.contains(new BigDecimal(10)));
-		assertTrue("The line number [13] should be returned", lineNumbers.contains(new BigDecimal(13)));
-		assertTrue("The line number [14] should be returned", lineNumbers.contains(new BigDecimal(14)));
-
-		List functionNames = (List) result.get("functions");
-		assertEquals(2, functionNames.size());
-		assertEquals("test", functionNames.get(0));
-		assertEquals("test2", functionNames.get(1));
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestScriptsTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestScriptsTest.java
deleted file mode 100644
index 055efbb..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestScriptsTest.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-
-public class RequestScriptsTest extends RequestTest {
-
-	public void testScriptsWithNoScripts() throws DisconnectedException, TimeoutException {
-		Request request = new Request("scripts");
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Collection scripts = (Collection) response.getBody().get("scripts");
-		assertNotNull(scripts);
-		assertTrue(scripts.isEmpty());
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestSetBreakpointTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestSetBreakpointTest.java
deleted file mode 100644
index d601e1c..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestSetBreakpointTest.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009, 2010 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
-import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-
-/**
- * Tests setting breakpoints and making sure we get the break events for them when evaluating the script
- * 
- * @since 1.0
- */
-public class RequestSetBreakpointTest extends RequestTest {
-
-	/**
-	 * Tests asking for the current set of breakpoints when the session has none
-	 * 
-	 * @throws Exception if the test fails
-	 */
-	public void testBreakpointsWithNoBreakpoints() throws Exception {
-		Request request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
-		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertTrue(breakpoints.isEmpty());
-	}
-
-	/**
-	 * Tests setting a variety of breakpoints and that they are hit
-	 * 
-	 * @throws Exception if the test fails
-	 */
-	public void testGetSetClearBreakpoint() throws Exception {
-		eventHandler.addSubhandler(setBreakpointsHandler);
-		eventHandler.addSubhandler(clearBreakpointsHandler);
-
-		Request request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
-		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertTrue(breakpoints.isEmpty());
-		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
-		assertNotNull("The test source for [script1.js] should exist", script);
-		Context context = contextFactory.enterContext();
-		try {
-			Scriptable scope = context.initStandardObjects();
-			context.evaluateString(scope, script, JSONConstants.SCRIPT, 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(8);
-		
-		request = new Request(JSONConstants.BREAKPOINTS);
-		debugSession.sendRequest(request);
-		response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
-		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
-		assertNotNull(breakpoints);
-		assertEquals(3, breakpoints.size());
-
-		for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-			Number breakpointId = (Number) iterator.next();
-			request = new Request(JSONConstants.BREAKPOINT);
-			request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
-			debugSession.sendRequest(request);
-			response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
-			assertTrue(response.isSuccess());
-			Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
-			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
-			assertTrue(breakpoint.containsKey(JSONConstants.SCRIPT_ID));
-		}
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestTest.java
index e2135b7..bc87b56 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestTest.java
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestTest.java
@@ -22,6 +22,7 @@
 import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
 import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
 import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
+import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
 import org.eclipse.wst.jsdt.debug.rhino.transport.PipedTransportService;
 import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
 import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
@@ -46,29 +47,44 @@
 		 * @see org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler#handleEvent(org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession, org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket)
 		 */
 		public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-			if (event.getEvent().equals("script")) {
-				Object scriptId = event.getBody().get("scriptId");
-				Request request = new Request("script");
-				request.getArguments().put("scriptId", scriptId);
+			if (event.getEvent().equals(JSONConstants.SCRIPT)) {
+				Number scriptId = (Number) event.getBody().get(JSONConstants.SCRIPT_ID);
+				Request request = new Request(JSONConstants.SCRIPT);
+				request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
 				try {
 					debugSession.sendRequest(request);
 					Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 					assertTrue(response.isSuccess());
-					Map result = (Map) response.getBody().get("script");
+					Map result = (Map) response.getBody().get(JSONConstants.SCRIPT);
 
 					// line numbers
-					List lineNumbers = (List) result.get("lines");
+					List lineNumbers = (List) result.get(JSONConstants.LINES);
 					for (Iterator iterator = lineNumbers.iterator(); iterator.hasNext();) {
 						Number lineNumber = (Number) iterator.next();
-						request = new Request("setbreakpoint");
-						request.getArguments().put("scriptId", scriptId);
-						request.getArguments().put("line", lineNumber);
+						request = new Request(JSONConstants.SETBREAKPOINT);
+						request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
+						request.getArguments().put(JSONConstants.LINE, lineNumber);
+						request.getArguments().put(JSONConstants.CONDITION, "1===1");
 						debugSession.sendRequest(request);
 						response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 						assertTrue(response.isSuccess());
+						
+						Map breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
+						Number breakpointId = (Number) breakpoint.get(JSONConstants.BREAKPOINT_ID);
+						request = new Request(JSONConstants.BREAKPOINT);
+						request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
+						debugSession.sendRequest(request);
+						response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+						assertTrue(response.isSuccess());
+						breakpoint = (Map) response.getBody().get(JSONConstants.BREAKPOINT);
+						assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.BREAKPOINT_ID)));
+						assertEquals(scriptId.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.SCRIPT_ID)));
+						assertEquals(lineNumber.intValue(), Util.numberAsInt(breakpoint.get(JSONConstants.LINE)));
+						assertEquals("1===1", breakpoint.get(JSONConstants.CONDITION));
 					}
 
-					// functions
+					//TODO the default breakpoint support only allows breakpoints on valid lines, which could be a function
+					/*// functions
 					List functionNames = (List) result.get("functions");
 					for (Iterator iterator = functionNames.iterator(); iterator.hasNext();) {
 						String functionName = (String) iterator.next();
@@ -78,14 +94,15 @@
 						debugSession.sendRequest(request);
 						response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 						assertTrue(response.isSuccess());
-					}
+					}*/
 
-					// script onEnter
+					//TODO bogus now since we only allow breakpoints on valid lines
+					/*// script onEnter
 					request = new Request("setbreakpoint");
 					request.getArguments().put("scriptId", scriptId);
 					debugSession.sendRequest(request);
 					response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
-					assertTrue(response.isSuccess());
+					assertTrue(response.isSuccess());*/
 				} catch (DisconnectedException e) {
 					e.printStackTrace();
 				} catch (TimeoutException e) {
@@ -108,23 +125,20 @@
 		 * @see org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler#handleEvent(org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession, org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket)
 		 */
 		public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-			if (event.getEvent().equals("break")) {
-				List breakpoints = (List) event.getBody().get("breakpoints");
-				for (Iterator iterator = breakpoints.iterator(); iterator.hasNext();) {
-					Number breakpointId = (Number) iterator.next();
-					Request request = new Request("clearbreakpoint");
-					request.getArguments().put("breakpointId", breakpointId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
-						assertTrue(response.isSuccess());
-					} catch (DisconnectedException e) {
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						e.printStackTrace();
-					}
+			if (event.getEvent().equals(JSONConstants.BREAK)) {
+				Number bid = (Number)event.getBody().get(JSONConstants.BREAKPOINT);
+				Request request = new Request(JSONConstants.CLEARBREAKPOINT);
+				request.getArguments().put(JSONConstants.BREAKPOINT_ID, bid);
+				try {
+					debugSession.sendRequest(request);
+					Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+					assertTrue(response.isSuccess());
+					return true;
+				} catch (DisconnectedException e) {
+					e.printStackTrace();
+				} catch (TimeoutException e) {
+					e.printStackTrace();
 				}
-				return true;
 			}
 			return false;
 		}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestThreadTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestThreadTest.java
deleted file mode 100644
index 8820684..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestThreadTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-import org.osgi.framework.Constants;
-
-public class RequestThreadTest extends RequestTest {
-
-	public void testInvalidThread() throws DisconnectedException, TimeoutException {
-		Request request = new Request("context");
-		request.getArguments().put("threadId", new Integer("9999"));
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertFalse(response.isSuccess());
-	}
-
-	public void testThread() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						// script onEnter
-						request = new Request("setbreakpoint");
-						request.getArguments().put("scriptId", scriptId);
-						debugSession.sendRequest(request);
-						response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		final Object[] success = new Object[1];
-
-		Subhandler contextCheckHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					Number threadId = (Number) event.getBody().get("threadId");
-					Request request = new Request("thread");
-					request.getArguments().put("threadId", threadId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						Map thread = (Map) response.getBody().get("thread");
-						assertEquals(threadId.intValue(), Util.numberAsInt(thread.get("threadId")));
-						assertEquals("suspended", thread.get("state"));
-						success[0] = Boolean.TRUE;
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(contextCheckHandler);
-
-		Map headers = new HashMap();
-		headers.put(Constants.BUNDLE_SYMBOLICNAME, "test");
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-
-		// TODO: figure out this intermittent problem
-		// junit.framework.AssertionFailedError: expected:<suspended> but was:<running>
-		// at junit.framework.Assert.fail(Assert.java:47)
-		// at junit.framework.Assert.failNotEquals(Assert.java:280)
-		// at junit.framework.Assert.assertEquals(Assert.java:64)
-		// at junit.framework.Assert.assertEquals(Assert.java:71)
-		// at org.eclipse.e4.languages.javascript.debug.connect.test.RequestThreadTest$2.handleEvent(RequestThreadTest.java:74)
-		// at org.eclipse.e4.languages.javascript.debug.connect.test.TestEventHandler.handleEvent(TestEventHandler.java:117)
-		// at org.eclipse.e4.languages.javascript.debug.connect.test.TestEventHandler.run(TestEventHandler.java:93)
-		// at java.lang.Thread.run(Thread.java:619)
-
-		waitForEvents(2);
-		assertEquals(Boolean.TRUE, success[0]);
-
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestThreadsTest.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestThreadsTest.java
deleted file mode 100644
index 08adec4..0000000
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RequestThreadsTest.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     IBM Corporation - initial API and implementation
- *******************************************************************************/
-package org.eclipse.wst.jsdt.debug.rhino.tests;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
-import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
-import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
-import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
-import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
-import org.mozilla.javascript.Context;
-import org.mozilla.javascript.Scriptable;
-import org.osgi.framework.Constants;
-
-public class RequestThreadsTest extends RequestTest {
-
-	public void testThreadsWithNoThreads() throws DisconnectedException, TimeoutException {
-		Request request = new Request("threads");
-		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
-		assertTrue(response.isSuccess());
-		Collection threads = (Collection) response.getBody().get("threads");
-		assertNotNull(threads);
-		assertTrue(threads.isEmpty());
-	}
-
-	public void testThreads() throws DisconnectedException, TimeoutException {
-
-		Subhandler setbreakpointHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("script")) {
-					Object scriptId = event.getBody().get("scriptId");
-					Request request = new Request("script");
-					request.getArguments().put("scriptId", scriptId);
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						// script onEnter
-						request = new Request("setbreakpoint");
-						request.getArguments().put("scriptId", scriptId);
-						debugSession.sendRequest(request);
-						response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(setbreakpointHandler);
-
-		final Object[] success = new Object[1];
-
-		Subhandler contextCheckHandler = new Subhandler() {
-			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
-				if (event.getEvent().equals("break")) {
-					Number threadId = (Number) event.getBody().get("threadId");
-					Request request = new Request("threads");
-					try {
-						debugSession.sendRequest(request);
-						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
-						assertTrue(response.isSuccess());
-						List threads = (List) response.getBody().get("threads");
-						assertEquals(threadId.intValue(), Util.numberAsInt(threads.get(0)));
-						success[0] = Boolean.TRUE;
-					} catch (DisconnectedException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					} catch (TimeoutException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-					return true;
-				}
-				return false;
-			}
-		};
-		eventHandler.addSubhandler(contextCheckHandler);
-
-		Map headers = new HashMap();
-		headers.put(Constants.BUNDLE_SYMBOLICNAME, "test");
-		String script = "var line1 = true;\r\n";
-		script += "function test() { // line 2 \r\n";
-		script += " return \"line 3\";\r\n";
-		script += "} // line 4 \r\n";
-		script += "// line 5\r\n";
-		script += "var line6 = test();\r\n";
-		script += "var line7 = test();\r\n";
-		script += "// line 8\r\n";
-		script += "// line 9\r\n";
-		script += "var line10 = test();\r\n";
-		script += "// line 11\r\n";
-		script += "// line 12\r\n";
-		script += "function test2() { // line 13 \r\n";
-		script += " return \"line 14\";\r\n";
-		script += "} // line 15 \r\n";
-		script += "// line 16\r\n";
-		script += "// line 17\r\n";
-
-		Scriptable scope = null;
-		Context context = contextFactory.enterContext();
-		try {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
-		} finally {
-			Context.exit();
-		}
-		waitForEvents(2);
-		assertEquals(Boolean.TRUE, success[0]);
-
-	}
-}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RhinoDebugTestSuite.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RhinoDebugTestSuite.java
index 757f2f8..392915d 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RhinoDebugTestSuite.java
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RhinoDebugTestSuite.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009 IBM Corporation and others All rights reserved. This
+ * Copyright (c) 2009, 2010 IBM Corporation and others All rights reserved. This
  * program and the accompanying materials are made available under the terms of
  * the Eclipse Public License v1.0 which accompanies this distribution, and is
  * available at http://www.eclipse.org/legal/epl-v10.html
@@ -11,31 +11,34 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
+/**
+ * Main test suite entry point
+ * @since 1.0
+ */
 public class RhinoDebugTestSuite extends TestSuite {
 
+	/**
+	 * @return the new test suite
+	 */
 	public static Test suite() {
 		return new RhinoDebugTestSuite();
 	}
 
+	/**
+	 * Constructor
+	 */
 	public RhinoDebugTestSuite() {
 		addTestSuite(TransportTest.class);
 		addTestSuite(DebugSessionTest.class);
 		addTestSuite(RhinoDebuggerTest.class);
 		addTestSuite(RequestBadCommandTest.class);
-		addTestSuite(RequestBreakpointsTest.class);
-		addTestSuite(RequestBreakpointTest.class);
-		addTestSuite(RequestClearBreakpointTest.class);
-		addTestSuite(RequestThreadsTest.class);
-		addTestSuite(RequestThreadTest.class);
+		addTestSuite(BreakpointRequestTests.class);
+		addTestSuite(ThreadRequestTests.class);
 		addTestSuite(RequestContinueTest.class);
 		addTestSuite(RequestDisposeTest.class);
-		addTestSuite(RequestEvaluateTest.class);
-		addTestSuite(RequestFramesTest.class);
-		addTestSuite(RequestFrameTest.class);
+		addTestSuite(FrameRequestTests.class);
 		addTestSuite(RequestLookupTest.class);
-		addTestSuite(RequestScriptsTest.class);
-		addTestSuite(RequestScriptTest.class);
-		addTestSuite(RequestSetBreakpointTest.class);
+		addTestSuite(ScriptRequestTests.class);
 		addTestSuite(RequestSuspendTest.class);
 		addTestSuite(RequestVersionTest.class);
 	}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/ScriptRequestTests.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/ScriptRequestTests.java
new file mode 100644
index 0000000..66fce81
--- /dev/null
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/ScriptRequestTests.java
@@ -0,0 +1,95 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.jsdt.debug.rhino.tests;
+
+import java.math.BigDecimal;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
+import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.Scriptable;
+
+/**
+ * Variety of tests requesting information from scripts
+ * 
+ * @since 1.1
+ */
+public class ScriptRequestTests extends RequestTest {
+
+	/**
+	 * Tests asking for all scripts when there are none
+	 * 
+	 * @throws Exception
+	 */
+	public void testScriptsWithNoScripts() throws Exception {
+		Request request = new Request(JSONConstants.SCRIPTS);
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		Collection scripts = (Collection) response.getBody().get(JSONConstants.SCRIPTS);
+		assertNotNull(scripts);
+		assertTrue(scripts.isEmpty());
+	}
+	
+	/**
+	 * Tests getting a script and asserting its information
+	 * 
+	 * @throws Exception
+	 */
+	public void testScript() throws Exception {
+		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
+		assertNotNull("The test source for [script1.js] must exist", script);
+		Scriptable scope = null;
+		Context context = contextFactory.enterContext();
+		try {
+			scope = context.initStandardObjects();
+			context.evaluateString(scope, script, "script", 0, null);
+		} finally {
+			Context.exit();
+		}
+
+		Request request = new Request(JSONConstants.SCRIPTS);
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		List scripts = (List) response.getBody().get(JSONConstants.SCRIPTS);
+		assertNotNull(scripts);
+		assertFalse(scripts.isEmpty());
+
+		request = new Request("script");
+		request.getArguments().put("scriptId", scripts.get(0));
+		debugSession.sendRequest(request);
+		response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		Map result = (Map) response.getBody().get(JSONConstants.SCRIPT);
+		assertEquals(script, result.get(JSONConstants.SOURCE));
+		List lineNumbers = (List) result.get(JSONConstants.LINES);
+		assertEquals(7, lineNumbers.size());
+		assertTrue("The line number [1] should be returned", lineNumbers.contains(new BigDecimal(1)));
+		assertTrue("The line number [2] should be returned", lineNumbers.contains(new BigDecimal(2)));
+		assertTrue("The line number [5] should be returned", lineNumbers.contains(new BigDecimal(5)));
+		assertTrue("The line number [6] should be returned", lineNumbers.contains(new BigDecimal(6)));
+		assertTrue("The line number [9] should be returned", lineNumbers.contains(new BigDecimal(9)));
+		assertTrue("The line number [12] should be returned", lineNumbers.contains(new BigDecimal(12)));
+		assertTrue("The line number [13] should be returned", lineNumbers.contains(new BigDecimal(13)));
+		//assertTrue("The line number [14] should be returned", lineNumbers.contains(new BigDecimal(14)));
+
+		List functionNames = (List) result.get(JSONConstants.FUNCTIONS);
+		assertEquals(2, functionNames.size());
+		assertEquals("test", functionNames.get(0));
+		assertEquals("test2", functionNames.get(1));
+	}
+}
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/ThreadRequestTests.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/ThreadRequestTests.java
new file mode 100644
index 0000000..d5df8a4
--- /dev/null
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/ThreadRequestTests.java
@@ -0,0 +1,139 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.wst.jsdt.debug.rhino.tests;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
+import org.eclipse.wst.jsdt.debug.rhino.tests.TestEventHandler.Subhandler;
+import org.eclipse.wst.jsdt.debug.rhino.transport.DebugSession;
+import org.eclipse.wst.jsdt.debug.rhino.transport.DisconnectedException;
+import org.eclipse.wst.jsdt.debug.rhino.transport.EventPacket;
+import org.eclipse.wst.jsdt.debug.rhino.transport.JSONConstants;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Request;
+import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
+import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
+import org.mozilla.javascript.Context;
+import org.mozilla.javascript.Scriptable;
+
+/**
+ * Variety of tests for thread requests
+ * 
+ * @since 1.1
+ */
+public class ThreadRequestTests extends RequestTest {
+
+	/**
+	 * Tests requesting the threads from the debugger when there are none
+	 * @throws Exception
+	 */
+	public void testThreadsWithNoThreads() throws Exception {
+		Request request = new Request(JSONConstants.THREADS);
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertTrue(response.isSuccess());
+		Collection threads = (Collection) response.getBody().get(JSONConstants.THREADS);
+		assertNotNull(threads);
+		assertTrue(threads.isEmpty());
+	}
+
+	/**
+	 * Tests asking the VM for a thread with an invalid ID
+	 * @throws Exception
+	 */
+	public void testInvalidThread() throws Exception {
+		Request request = new Request("context");
+		request.getArguments().put(JSONConstants.THREAD_ID, new Integer("9999"));
+		debugSession.sendRequest(request);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+		assertFalse(response.isSuccess());
+	}
+	
+	/**
+	 * Tests getting threads from the VM
+	 * @throws Exception
+	 */
+	public void testThreads() throws Exception {
+		Subhandler setbreakpointHandler = new Subhandler() {
+			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
+				if (event.getEvent().equals(JSONConstants.SCRIPT)) {
+					Number scriptId = (Number) event.getBody().get(JSONConstants.SCRIPT_ID);
+					Request request = new Request(JSONConstants.SCRIPT);
+					request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
+					try {
+						debugSession.sendRequest(request);
+						Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+						assertTrue(response.isSuccess());
+						Map script = (Map) response.getBody().get(JSONConstants.SCRIPT);
+						assertNotNull("The response body cannot be null", script);
+						request = new Request(JSONConstants.SETBREAKPOINT);
+						request.getArguments().put(JSONConstants.SCRIPT_ID, scriptId);
+						request.getArguments().put(JSONConstants.LINE, new Integer(6));
+						debugSession.sendRequest(request);
+						response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+						assertTrue(response.isSuccess());
+						
+					} catch (DisconnectedException e) {
+						e.printStackTrace();
+					} catch (TimeoutException e) {
+						e.printStackTrace();
+					}
+					return true;
+				}
+				return false;
+			}
+		};
+		eventHandler.addSubhandler(setbreakpointHandler);
+
+		final Object[] success = new Object[1];
+
+		Subhandler contextCheckHandler = new Subhandler() {
+			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
+				if (event.getEvent().equals(JSONConstants.BREAK)) {
+					Number threadId = (Number) event.getBody().get(JSONConstants.THREAD_ID);
+					Request request = new Request(JSONConstants.THREADS);
+					try {
+						debugSession.sendRequest(request);
+						Response response = debugSession.receiveResponse(request.getSequence(), 10000);
+						assertTrue(response.isSuccess());
+						List threads = (List) response.getBody().get(JSONConstants.THREADS);
+						assertEquals(threadId.intValue(), Util.numberAsInt(threads.get(0)));
+						success[0] = Boolean.TRUE;
+					} catch (DisconnectedException e) {
+						e.printStackTrace();
+					} catch (TimeoutException e) {
+						e.printStackTrace();
+					}
+					return true;
+				}
+				return false;
+			}
+		};
+		eventHandler.addSubhandler(contextCheckHandler);
+
+		String script = Util.getTestSource(Util.SRC_SCRIPTS_CONTAINER, "script1.js");
+		assertNotNull("The test source for [script1.js] must exist", script);
+		
+		Scriptable scope = null;
+		Context context = contextFactory.enterContext();
+		try {
+			scope = context.initStandardObjects();
+			context.evaluateString(scope, script, JSONConstants.SCRIPT, 0, null);
+		} finally {
+			Context.exit();
+		}
+		//script event + breakpoint on line 6
+		waitForEvents(2);
+		assertEquals(Boolean.TRUE, success[0]);
+	}
+}