Bug 33458 StringIndexOutOfBoundsException from Junit HierarchyRunView
20030227 I am attempting to run my PDE JUnit tests for Debug and Ant Core. All produce similar stack traces to the following: java.lang.StringIndexOutOfBoundsException: String index out of range: -57 at java.lang.String.substring(String.java:1480) at org.eclipse.jdt.internal.junit.ui.HierarchyRunView.newTreeEntry (HierarchyRunView.java:305) at org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart$4.run (TestRunnerViewPart.java:477) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:31) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages (Synchronizer.java:94) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:1752) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1487) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1271) at org.eclipse.ui.internal.Workbench.run(Workbench.java:1254) at org.eclipse.core.internal.boot.InternalBootLoader.run (InternalBootLoader.java:845) at org.eclipse.core.boot.BootLoader.run(BootLoader.java:461) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.eclipse.core.launcher.Main.basicRun(Main.java:247) at org.eclipse.core.launcher.Main.run(Main.java:703) at org.eclipse.core.launcher.Main.main(Main.java:539)
org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/RemoteTestRunnerClient.java
trace = fFailedRerunTrace;
			
			notifyTestReran(testId, className, testName, statusCode, trace);
		}
	}
	private void extractFailure(String arg, int status) {
		String s[]= extractTestId(arg);
		fFailedTestId= s[0];
		fFailedTest= s[1];
		fFailureKind= status;
	}
	/**
	 * Returns an array with two elements. The first one is the testId, the second one the testName.
	 */
	String[] extractTestId(String arg) {
		int i= arg.indexOf(',');
		String[] result= new String[2];
		result[0]= arg.substring(0, i);
		result[1]= arg.substring(i+1, arg.length());
		return result;
	}
	
	private void notifyTestReran(final String testId, final String className, final String testName, final int statusCode, final String trace) {
		for (int i= 0; i < fListeners.length; i++) {
			final ITestRunListener listener= fListeners[i];
			Platform.run(new ListenerSafeRunnable() { 
				public void run() {
					listener.testReran(testId, className, testName, statusCode, trace);
				}
			});