Bug 306858 -  Investigate re-architecting RhinoDebugger* implementation
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
new file mode 100644
index 0000000..f19e46d
--- /dev/null
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/scripts/script1.js
@@ -0,0 +1,17 @@
+var line1 = true;
+function test() { //line 2
+	return; "line 3"; //line 3
+}//line 4
+// line 5
+var line6 = test();
+var line7 = test();
+// line 8
+// line 9
+var line10 = test();
+// line 11
+// line 12
+function test2() { // line 13
+	return "line 14"; //line 14
+} // line 15
+// line 16
+// line 17
\ No newline at end of file
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
index 01d7ef8..2d47952 100644
--- 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
@@ -210,7 +210,7 @@
 		} finally {
 			Context.exit();
 		}
-		waitForEvents(7);
+		waitForEvents(8);
 		request = new Request(JSONConstants.BREAKPOINTS);
 		debugSession.sendRequest(request);
 		response = debugSession.receiveResponse(request.getSequence(), 30000);
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
index 41fc8d5..53e098b 100644
--- 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
@@ -19,6 +19,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.Request;
 import org.eclipse.wst.jsdt.debug.rhino.transport.Response;
 import org.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
@@ -28,11 +29,11 @@
 public class RequestBreakpointsTest extends RequestTest {
 
 	public void testBreakpointsWithNoBreakpoints() throws DisconnectedException, TimeoutException {
-		Request request = new Request("breakpoints");
+		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("breakpoints");
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
 		assertNotNull(breakpoints);
 		assertTrue(breakpoints.isEmpty());
 	}
@@ -94,11 +95,11 @@
 		};
 		eventHandler.addSubhandler(setbreakpointHandler);
 
-		Request request = new Request("breakpoints");
+		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("breakpoints");
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
 		assertNotNull(breakpoints);
 		assertTrue(breakpoints.isEmpty());
 
@@ -131,11 +132,11 @@
 
 		waitForEvents(1);
 
-		request = new Request("breakpoints");
+		request = new Request(JSONConstants.BREAKPOINTS);
 		debugSession.sendRequest(request);
 		response = debugSession.receiveResponse(request.getSequence(), 30000);
 		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get("breakpoints");
+		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
 		assertNotNull(breakpoints);
 		assertEquals(10, breakpoints.size());
 
@@ -212,7 +213,7 @@
 		Subhandler clearbreakpointHandler = new Subhandler() {
 			public boolean handleEvent(DebugSession debugSession, EventPacket event) {
 				if (event.getEvent().equals("break")) {
-					List breakpoints = (List) event.getBody().get("breakpoints");
+					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");
@@ -236,11 +237,11 @@
 		};
 		eventHandler.addSubhandler(clearbreakpointHandler);
 
-		Request request = new Request("breakpoints");
+		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("breakpoints");
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
 		assertNotNull(breakpoints);
 		assertTrue(breakpoints.isEmpty());
 
@@ -270,12 +271,12 @@
 		} finally {
 			Context.exit();
 		}
-		waitForEvents(7);
-		request = new Request("breakpoints");
+		waitForEvents(8);
+		request = new Request(JSONConstants.BREAKPOINTS);
 		debugSession.sendRequest(request);
 		response = debugSession.receiveResponse(request.getSequence(), 30000);
 		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get("breakpoints");
+		breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
 		assertNotNull(breakpoints);
 		assertEquals(3, breakpoints.size());
 
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
index eedc489..6d14a54 100644
--- 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
@@ -154,7 +154,7 @@
 		} finally {
 			Context.exit();
 		}
-		waitForEvents(7);
+		waitForEvents(8);
 		request = new Request("breakpoints");
 		debugSession.sendRequest(request);
 		response = debugSession.receiveResponse(request.getSequence(), 30000);
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
index 86b0ddc..ee47838 100644
--- 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
@@ -10,6 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.jsdt.debug.rhino.tests;
 
+import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -72,13 +73,13 @@
 		assertEquals(script, result.get("source"));
 		List lineNumbers = (List) result.get("lines");
 		assertEquals(7, lineNumbers.size());
-		assertEquals(2, Util.numberAsInt(lineNumbers.get(0)));
-		assertEquals(3, Util.numberAsInt(lineNumbers.get(1)));
-		assertEquals(6, Util.numberAsInt(lineNumbers.get(2)));
-		assertEquals(7, Util.numberAsInt(lineNumbers.get(3)));
-		assertEquals(10, Util.numberAsInt(lineNumbers.get(4)));
-		assertEquals(13, Util.numberAsInt(lineNumbers.get(5)));
-		assertEquals(14, Util.numberAsInt(lineNumbers.get(6)));
+		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());
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
index 6c665f2..d601e1c 100644
--- 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
@@ -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,174 +11,83 @@
 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.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.eclipse.wst.jsdt.debug.rhino.transport.TimeoutException;
 import org.mozilla.javascript.Context;
 import org.mozilla.javascript.Scriptable;
-import org.osgi.framework.Constants;
 
+/**
+ * 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 {
 
-	public void testBreakpointsWithNoBreakpoints() throws DisconnectedException, TimeoutException {
-		Request request = new Request("breakpoints");
+	/**
+	 * 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(), 30000);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get("breakpoints");
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
 		assertNotNull(breakpoints);
 		assertTrue(breakpoints.isEmpty());
 	}
 
-	public void testGetSetClearBreakpoint() throws DisconnectedException, TimeoutException {
+	/**
+	 * 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);
 
-		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");
+		Request request = new Request(JSONConstants.BREAKPOINTS);
 		debugSession.sendRequest(request);
-		Response response = debugSession.receiveResponse(request.getSequence(), 30000);
+		Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 		assertTrue(response.isSuccess());
-		Collection breakpoints = (Collection) response.getBody().get("breakpoints");
+		Collection breakpoints = (Collection) response.getBody().get(JSONConstants.BREAKPOINTS);
 		assertNotNull(breakpoints);
 		assertTrue(breakpoints.isEmpty());
-
-		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;
+		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 {
-			scope = context.initStandardObjects();
-			context.evaluateString(scope, script, "script", 0, null);
+			Scriptable scope = context.initStandardObjects();
+			context.evaluateString(scope, script, JSONConstants.SCRIPT, 0, null);
 		} finally {
 			Context.exit();
 		}
-		waitForEvents(7);
-		request = new Request("breakpoints");
+		waitForEvents(8);
+		
+		request = new Request(JSONConstants.BREAKPOINTS);
 		debugSession.sendRequest(request);
-		response = debugSession.receiveResponse(request.getSequence(), 30000);
+		response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 		assertTrue(response.isSuccess());
-		breakpoints = (Collection) response.getBody().get("breakpoints");
+		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);
+			request = new Request(JSONConstants.BREAKPOINT);
+			request.getArguments().put(JSONConstants.BREAKPOINT_ID, breakpointId);
 			debugSession.sendRequest(request);
-			response = debugSession.receiveResponse(request.getSequence(), 10000);
+			response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 			assertTrue(response.isSuccess());
-			Map breakpoint = (Map) response.getBody().get("breakpoint");
-			assertEquals(breakpointId.intValue(), Util.numberAsInt(breakpoint.get("breakpointId")));
-			assertTrue(breakpoint.containsKey("scriptId"));
+			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 0f7c7ea..e2135b7 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
@@ -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
@@ -10,20 +10,158 @@
  *******************************************************************************/
 package org.eclipse.wst.jsdt.debug.rhino.tests;
 
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 import junit.framework.TestCase;
 
+import org.eclipse.wst.jsdt.debug.core.jsdi.VirtualMachine;
 import org.eclipse.wst.jsdt.debug.rhino.debugger.RhinoDebugger;
+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.PipedTransportService;
+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.eclipse.wst.jsdt.debug.rhino.transport.TransportService;
 import org.mozilla.javascript.ContextFactory;
 
-public class RequestTest extends TestCase {
+/**
+ * Abstract test for making requests
+ * 
+ * @since 1.0
+ */
+public abstract class RequestTest extends TestCase {
+	/**
+	 * This default handler handles a script load event and sets a 
+	 * breakpoint on every single debuggable line 
+	 * 
+	 * @since 1.1
+	 */
+	protected static Subhandler setBreakpointsHandler = new Subhandler() {
+		/* (non-Javadoc)
+		 * @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);
+				try {
+					debugSession.sendRequest(request);
+					Response response = debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
+					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(), VirtualMachine.DEFAULT_TIMEOUT);
+						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(), VirtualMachine.DEFAULT_TIMEOUT);
+						assertTrue(response.isSuccess());
+					}
+
+					// 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());
+				} catch (DisconnectedException e) {
+					e.printStackTrace();
+				} catch (TimeoutException e) {
+					e.printStackTrace();
+				}
+				return true;
+			}
+			return false;
+		}
+	};
+	
+	/**
+	 * Default handler that handles a <code>break</code> event and clears the 
+	 * associated breakpoint
+	 * 
+	 * @since 1.1
+	 */
+	protected static Subhandler clearBreakpointsHandler = new Subhandler() {
+		/* (non-Javadoc)
+		 * @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();
+					}
+				}
+				return true;
+			}
+			return false;
+		}
+	};
+	
 	protected RhinoDebugger debugger;
 	protected DebugSession debugSession;
 	protected TestEventHandler eventHandler;
 	protected ContextFactory contextFactory;
+	private static boolean tracing = false;
 
+	/**
+	 * Turns on tracing for the test. All testing event handlers use this.
+	 */
+	protected void useTracing() {
+		tracing = true;
+	}
+	
+	/**
+	 * Turns off tracing. This method is called on every {@link #tearDown()} invocation.
+	 */
+	protected void disableTracing() {
+		tracing = false;
+	}
+	
+	/**
+	 * Returns if tracing is enabled
+	 * 
+	 * @return if tracing is enabled
+	 */
+	public static boolean isTracing() {
+		return tracing;
+	}
+	
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#setUp()
+	 */
 	protected void setUp() throws Exception {
 		TransportService pipedTransport = new PipedTransportService();
 		ConnectionHelper helper = new ConnectionHelper(pipedTransport, null);
@@ -32,7 +170,7 @@
 		debugger.start();
 
 		debugSession = new DebugSession(helper.getClientConnection());
-		eventHandler = new TestEventHandler(debugSession);
+		eventHandler = new TestEventHandler(debugSession, getName());
 		eventHandler.start();
 
 		assertTrue(debugger.suspendForRuntime(5000));
@@ -41,7 +179,11 @@
 		super.setUp();
 	}
 
+	/* (non-Javadoc)
+	 * @see junit.framework.TestCase#tearDown()
+	 */
 	protected void tearDown() throws Exception {
+		disableTracing();
 		super.tearDown();
 		contextFactory.removeListener(debugger);
 		eventHandler.stop();
@@ -49,8 +191,33 @@
 		debugSession.dispose();
 	}
 
+	/**
+	 * Forces the backing event handler to block until the given number of events have been 
+	 * received or a timeout occurs.
+	 * 
+	 * @param count the event count to wait for
+	 */
 	synchronized void waitForEvents(int count) {
 		eventHandler.waitForEvents(count);
 	}
 
+	/**
+	 * Sets the collection of specific events we are expecting to handle
+	 * 
+	 * @param events the collection of events
+	 */
+	synchronized void setExpectedEvents(EventPacket[] events) {
+		eventHandler.setExpectedEvents(events);
+	}
+	
+	/**
+	 * Forces the backing event handler to block until the given number of events have been 
+	 * received or a timeout occurs.
+	 * 
+	 * @param events the specific set of events expected
+	 * @see #setExpectedEvents(EventPacket[])
+	 */
+	synchronized void waitForEvents(EventPacket[] events) {
+		eventHandler.waitForEvents(events);
+	}
 }
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/AllTests.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RhinoDebugTestSuite.java
similarity index 92%
rename from tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/AllTests.java
rename to tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RhinoDebugTestSuite.java
index f7d0b50..757f2f8 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/AllTests.java
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/RhinoDebugTestSuite.java
@@ -11,13 +11,13 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
-public class AllTests extends TestSuite {
+public class RhinoDebugTestSuite extends TestSuite {
 
 	public static Test suite() {
-		return new AllTests();
+		return new RhinoDebugTestSuite();
 	}
 
-	public AllTests() {
+	public RhinoDebugTestSuite() {
 		addTestSuite(TransportTest.class);
 		addTestSuite(DebugSessionTest.class);
 		addTestSuite(RhinoDebuggerTest.class);
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/TestEventHandler.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/TestEventHandler.java
index 177a8f9..d3b6095 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/TestEventHandler.java
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/TestEventHandler.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
@@ -10,121 +10,136 @@
  *******************************************************************************/
 package org.eclipse.wst.jsdt.debug.rhino.tests;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.StringReader;
 import java.util.ArrayList;
 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.EventPacket;
 import org.eclipse.wst.jsdt.debug.rhino.transport.JSONUtil;
 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;
 
+/**
+ * Event handler for testing purposes
+ * 
+ * @since 1.0
+ */
 public class TestEventHandler implements Runnable {
 
+	/**
+	 * Sub-handler for test to implement and add to the root {@link TestEventHandler}
+	 */
 	public interface Subhandler {
 		boolean handleEvent(DebugSession debugSession, EventPacket event);
 	}
 
-	public static Subhandler debugScriptSubhandler = 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);
-					System.out.println(JSONUtil.write(response.toJSON()));
-					String lines = (String) ((Map) response.getBody().get("script")).get("source");
-					BufferedReader reader = new BufferedReader(new StringReader(lines));
-					try {
-						int lineNumber = 1;
-						String line = reader.readLine();
-						while (line != null) {
-							System.out.println("[" + lineNumber++ + "]: " + line);
-							line = reader.readLine();
-						}
-					} catch (IOException e) {
-						// TODO Auto-generated catch block
-						e.printStackTrace();
-					}
-				} catch (DisconnectedException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				} catch (TimeoutException e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-				}
-			}
-			return false;
-		}
-
-	};
-
 	private DebugSession debugSession;
 	private Thread thread;
 	private final ArrayList subhandlers = new ArrayList();
+	private final ArrayList expectedEvents = new ArrayList();
 	private volatile boolean shutdown = false;
 
 	private int eventCount = 0;
+	private String testname = null;
 
-	public TestEventHandler(DebugSession debugSession) {
+	/**
+	 * Constructor
+	 * 
+	 * @param debugSession the current session to handle
+	 * @param testname the name of the test using this handler
+	 */
+	public TestEventHandler(DebugSession debugSession, String testname) {
 		this.debugSession = debugSession;
 		this.thread = new Thread(this, "TestEventHandler");
+		this.testname = testname;
 	}
 
+	/**
+	 * start the test handler
+	 */
 	public void start() {
 		thread.start();
 	}
 
+	/**
+	 * stop the test handler
+	 */
 	public void stop() {
 		shutdown = true;
+		this.expectedEvents.clear();
+		this.subhandlers.clear();
+		this.eventCount = 0;
 		thread.interrupt();
 		try {
 			thread.join();
 		} catch (InterruptedException e) {
-			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-
 	}
 
+	/**
+	 * Sets the events that the handler is expected to receive
+	 * @param events
+	 */
+	public void setExpectedEvents(EventPacket[] events) {
+		this.expectedEvents.clear();
+		for (int i = 0; i < events.length; i++) {
+			this.expectedEvents.add(events[i]);
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see java.lang.Runnable#run()
+	 */
 	public void run() {
 		while (!shutdown) {
 			try {
-				EventPacket event = debugSession.receiveEvent(1000);
+				EventPacket event = debugSession.receiveEvent(VirtualMachine.DEFAULT_TIMEOUT);
 				handleEvent(event);
 			} catch (TimeoutException e) {
-				// ignore
+				//ignore
 			} catch (DisconnectedException e) {
-				// TODO Auto-generated catch block
 				e.printStackTrace();
 			}
 		}
-
 	}
 
+	/**
+	 * Add a sub handler
+	 * @param subhandler
+	 */
 	public synchronized void addSubhandler(Subhandler subhandler) {
 		subhandlers.add(subhandler);
 	}
 
+	/**
+	 * Remove a sub handler
+	 * @param subhandler
+	 */
 	public synchronized void removeSubhandler(Subhandler subhandler) {
 		subhandlers.remove(subhandler);
 	}
 
+	/**
+	 * Handles the given event packet
+	 * @param event
+	 */
 	private synchronized void handleEvent(EventPacket event) {
-		// System.out.println(JSONUtil.write(event.toJSON()));
+		String estring = null;
+		if(RequestTest.isTracing()) {
+			estring = JSONUtil.write(event.toJSON());
+			System.out.println(this.testname+" got event: "+estring);
+		}
 		for (Iterator iterator = subhandlers.iterator(); iterator.hasNext();) {
 			Subhandler subhandler = (Subhandler) iterator.next();
 			try {
 				if (subhandler.handleEvent(debugSession, event)) {
+					if(RequestTest.isTracing()) {
+						System.out.println("\t"+this.testname+" handled event: "+estring);
+					}
+					this.expectedEvents.remove(event);
 					eventCount++;
 					notifyAll();
 				}
@@ -138,6 +153,11 @@
 
 	}
 
+	/**
+	 * Continues the handler
+	 * @param event
+	 * @param step
+	 */
 	protected void sendContinue(EventPacket event, String step) {
 		Number threadId = (Number) event.getBody().get("threadId");
 
@@ -146,7 +166,7 @@
 		request.getArguments().put("step", step);
 		try {
 			debugSession.sendRequest(request);
-			debugSession.receiveResponse(request.getSequence(), 1000);
+			debugSession.receiveResponse(request.getSequence(), VirtualMachine.DEFAULT_TIMEOUT);
 		} catch (DisconnectedException e) {
 			if (!shutdown)
 				e.printStackTrace();
@@ -156,6 +176,10 @@
 		}
 	}
 
+	/**
+	 * Waits for all of the events specified from {@link #setExpectedEvents(EventPacket[])}
+	 * @param count
+	 */
 	public synchronized void waitForEvents(int count) {
 		long timeout = System.currentTimeMillis() + 5000;
 		while (eventCount < count && System.currentTimeMillis() < timeout) {
@@ -165,12 +189,47 @@
 				e.printStackTrace();
 			}
 		}
-		if (eventCount != count) {
-			throw new IllegalStateException("eventcount was: " + eventCount + " expected: " + count);
+		try {
+			if (eventCount != count) {
+				throw new IllegalStateException("eventcount was: " + eventCount + " expected: " + count);
+			}
+		}
+		finally {
+			this.eventCount = 0;
 		}
 	}
-
-	public int eventCount() {
-		return eventCount;
+	
+	/**
+	 * Waits for the given collection of events to be handled, or a default timeout to occur
+	 * @param events
+	 */
+	public synchronized void waitForEvents(EventPacket[] events) {
+		long timeout = System.currentTimeMillis() + 5000;
+		while(!this.expectedEvents.isEmpty() && System.currentTimeMillis() < timeout) {
+			try {
+				wait(1000);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+		if(!this.expectedEvents.isEmpty()) {
+			try {
+				throw new IllegalStateException("Some expected events were not received");
+			}
+			finally {
+				this.eventCount = 0;
+				for (int i = 0; i < this.expectedEvents.size(); i++) {
+					System.out.println(this.testname+" missed expected event: "+JSONUtil.write(this.expectedEvents.get(i)));
+				}
+			}
+		}
+		if(this.eventCount > events.length) {
+			try {
+				throw new IllegalStateException(this.testname+" got too many events - expected ["+events.length+"] got ["+eventCount+"]");
+			}
+			finally {
+				this.eventCount = 0;
+			}
+		}
 	}
 }
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/Util.java b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/Util.java
index c8f664a..e0f8b5c 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/Util.java
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/src/org/eclipse/wst/jsdt/debug/rhino/tests/Util.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
@@ -10,10 +10,199 @@
  *******************************************************************************/
 package org.eclipse.wst.jsdt.debug.rhino.tests;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CodingErrorAction;
+import java.nio.charset.IllegalCharsetNameException;
+import java.nio.charset.UnsupportedCharsetException;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+
+/**
+ * Collection of utility methods for tests
+ * 
+ * @since 1.0
+ */
 public class Util {
 
+	/**
+	 * BiDi
+	 * @since 1.1
+	 */
+	public static final String UTF_8 = "UTF-8";
+	/**
+	 * The name of the source container <code>scripts</code> in the test bundle
+	 * @since 1.1
+	 */
+	public static final String SRC_SCRIPTS_CONTAINER = "scripts";
+	
+	/**
+	 * Constant representing the default size to read from an input stream
+	 * @since 1.1
+	 */
+	private static final int DEFAULT_READING_SIZE = 8192;
+	
+	/**
+	 * Returns the int value of the given {@link Number}
+	 * @param number
+	 * @return
+	 */
 	public static int numberAsInt(Object number) {
 		return ((Number) number).intValue();
 	}
 
+	/**
+	 * Returns the OS path to the directory that contains the test plugin.
+	 * 
+	 * @since 1.1
+	 */
+	public static IPath getPluginDirectoryPath() {
+		if (Platform.isRunning()) {
+			try {
+				URL platformURL = Platform.getBundle("org.eclipse.wst.jsdt.debug.rhino.tests").getEntry("/");
+				return new Path(new File(FileLocator.toFileURL(platformURL).getFile()).getAbsolutePath());
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return new Path(System.getProperty("user.dir"));
+	}
+	
+	/**
+	 * Loads the test source with the given name. If the source does not exist
+	 * a {@link FileNotFoundException} is thrown.
+	 * 
+	 * @param container the folder in the test project containing the source
+	 * @param sourcename the name of the source file to load
+	 * 
+	 * @return the {@link String} representation of the source or <code>null</code>
+	 * @throws FileNotFoundException if the source does not exist
+	 * @since 1.1
+	 */
+	public static String getTestSource(String container, String sourcename) {
+		return getFileContentAsString(getPluginDirectoryPath().append(container).append(sourcename).toFile());
+	}
+	
+	/**
+	 * Returns the contents of the given file as a string, or <code>null</code>
+	 * 
+	 * @param file the file to get the contents for
+	 * @return the contents of the file as a {@link String} or <code>null</code>
+	 * @since 1.1
+	 */
+	public static String getFileContentAsString(File file) {
+		String contents = null;
+		FileInputStream stream = null;
+		try {
+			stream = new FileInputStream(file);
+			char[] array = getInputStreamAsCharArray(stream, -1, "UTF-8");
+			contents = new String(array);
+		}
+		catch(IOException ioe) {
+			ioe.printStackTrace();
+		} finally {
+			if (stream != null) {
+				try {
+					stream.close();
+				} catch (IOException e) {
+					// ignore
+				}
+			}
+		}
+		return contents;
+	}
+	
+	/**
+	 * Returns the given input stream's contents as a character array.
+	 * If a length is specified (i.e. if length != -1), this represents the number of bytes in the stream.
+	 * Note the specified stream is not closed in this method
+	 * 
+	 * @param stream the stream to get convert to the char array 
+	 * @param length the length of the input stream, or -1 if unknown
+	 * @param encoding the encoding to use when reading the stream
+	 * @return the given input stream's contents as a character array.
+	 * @throws IOException if a problem occurred reading the stream.
+	 * @since 1.1
+	 */
+	public static char[] getInputStreamAsCharArray(InputStream stream, int length, String encoding) throws IOException {
+		Charset charset = null;
+		try {
+			charset = Charset.forName(encoding);
+		} catch (IllegalCharsetNameException e) {
+			System.err.println("Illegal charset name : " + encoding); //$NON-NLS-1$
+			return null;
+		} catch(UnsupportedCharsetException e) {
+			System.err.println("Unsupported charset : " + encoding); //$NON-NLS-1$
+			return null;
+		}
+		CharsetDecoder charsetDecoder = charset.newDecoder();
+		charsetDecoder.onMalformedInput(CodingErrorAction.REPLACE).onUnmappableCharacter(CodingErrorAction.REPLACE);
+		byte[] contents = getInputStreamAsByteArray(stream, length);
+		ByteBuffer byteBuffer = ByteBuffer.allocate(contents.length);
+		byteBuffer.put(contents);
+		byteBuffer.flip();
+		return charsetDecoder.decode(byteBuffer).array();
+	}
+	
+	/**
+	 * Returns the given input stream as a byte array
+	 * 
+	 * @param stream the stream to get as a byte array
+	 * @param length the length to read from the stream or -1 for unknown
+	 * @return the given input stream as a byte array
+	 * @throws IOException
+	 * @since 1.1
+	 */
+	public static byte[] getInputStreamAsByteArray(InputStream stream, int length) throws IOException {
+		byte[] contents;
+		if (length == -1) {
+			contents = new byte[0];
+			int contentsLength = 0;
+			int amountRead = -1;
+			do {
+				// read at least 8K
+				int amountRequested = Math.max(stream.available(), DEFAULT_READING_SIZE);
+				// resize contents if needed
+				if (contentsLength + amountRequested > contents.length) {
+					System.arraycopy(contents,
+							0,
+							contents = new byte[contentsLength + amountRequested],
+							0,
+							contentsLength);
+				}
+				// read as many bytes as possible
+				amountRead = stream.read(contents, contentsLength, amountRequested);
+				if (amountRead > 0) {
+					// remember length of contents
+					contentsLength += amountRead;
+				}
+			} while (amountRead != -1);
+			// resize contents if necessary
+			if (contentsLength < contents.length) {
+				System.arraycopy(contents, 0, contents = new byte[contentsLength], 0, contentsLength);
+			}
+		} else {
+			contents = new byte[length];
+			int len = 0;
+			int readSize = 0;
+			while ((readSize != -1) && (len != length)) {
+				// See PR 1FMS89U
+				// We record first the read size. In this case length is the actual
+				// read size.
+				len += readSize;
+				readSize = stream.read(contents, len, length - len);
+			}
+		}
+		return contents;
+	}
 }
diff --git a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/test.xml b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/test.xml
index 95bfa66..a2b6dc3 100644
--- a/tests/org.eclipse.wst.jsdt.debug.rhino.tests/test.xml
+++ b/tests/org.eclipse.wst.jsdt.debug.rhino.tests/test.xml
@@ -18,7 +18,7 @@
         value="org.eclipse.wst.jsdt.debug.rhino.tests" />
     <property
         name="classname"
-        value="org.eclipse.wst.jsdt.debug.rhino.tests.AllTests" />
+        value="org.eclipse.wst.jsdt.debug.rhino.tests.RhinoDebugTestSuite" />
     <property
         name="testType"
         value="core-test" />