fFailedRerunTrace= "";
fFailedRerunTrace.setLength(0);
	    ProcessingState readMessage(String message) {	        if (message.startsWith(MessageIds.TRACE_START)) {	        	clearFailedTrace();	            return fTraceState;	        }	        if (message.startsWith(MessageIds.EXPECTED_START)) {	            fExpectedResult= null;	            return fExpectedState;	        }	        if (message.startsWith(MessageIds.ACTUAL_START)) {	            fActualResult= null;	            return fActualState;	        }	        if (message.startsWith(MessageIds.RTRACE_START)) {	            fFailedRerunTrace= ""; //$NON-NLS-1$	            return fRerunState;	        }	        String arg= message.substring(MessageIds.MSG_HEADER_LENGTH);	        if (message.startsWith(MessageIds.TEST_RUN_START)) {	            // version < 2 format: count	            // version >= 2 format: count+" "+version	            int count= 0;	            int v= arg.indexOf(' ');	            if (v == -1) {	                fVersion= "v1"; //$NON-NLS-1$	                count= Integer.parseInt(arg);	            } else {	                fVersion= arg.substring(v+1);	                String sc= arg.substring(0, v);	                count= Integer.parseInt(sc);	            }	            notifyTestRunStarted(count);	            return this;	        }	        if (message.startsWith(MessageIds.TEST_START)) {	            notifyTestStarted(arg);	            return this;	        }	        if (message.startsWith(MessageIds.TEST_END)) {	            notifyTestEnded(arg);	            return this;	        }	        if (message.startsWith(MessageIds.TEST_ERROR)) {	            extractFailure(arg, ITestRunListener.STATUS_ERROR);	            return this;	        }	        if (message.startsWith(MessageIds.TEST_FAILED)) {	            extractFailure(arg, ITestRunListener.STATUS_FAILURE);	            return this;	        }	        if (message.startsWith(MessageIds.TEST_RUN_END)) {	            long elapsedTime = Long.parseLong(arg);	            testRunEnded(elapsedTime);	            return this;	        }	        if (message.startsWith(MessageIds.TEST_STOPPED)) {	            long elapsedTime = Long.parseLong(arg);	            notifyTestRunStopped(elapsedTime);	            shutDown();	            return this;	        }	        if (message.startsWith(MessageIds.TEST_TREE)) {	            notifyTestTreeEntry(arg);	            return this;	        }	        if (message.startsWith(MessageIds.TEST_RERAN)) {	            if (hasTestId())	                scanReranMessage(arg);	            else 	                scanOldReranMessage(arg);	            return this;	        }		        return this;	    }