package org.phpsrc.eclipse.pti.tools.phpunit.core.model; import java.util.Date; public class AbstractTestRunnerClient { /** * An array of listeners that are informed about test events. */ protected ITestRunListener[] fListeners; private boolean fIsRunning = false; private long fStartTime = -1; private ITestDebugProcessListener fDebugProcessListener = new ITestDebugProcessListener() { public void startProcess() { fIsRunning = true; fStartTime = new Date().getTime(); notifyTestRunStarted(); } public void stopProcess() { fIsRunning = false; notifyTestRunEnded(new Date().getTime() - fStartTime); fStartTime = -1; stopListening(); } public void appendOutput(String text) { parseOutput(text); } }; /** * Start listening to a test run. Start a server connection that the * RemoteTestRunner can connect to. * * @param listeners * listeners to inform * @param port * port on which the server socket will be opened */ public synchronized void startListening(ITestRunListener[] listeners) { fListeners = listeners; PHPUnitDebugEventHandler.getDefault() .addListener(fDebugProcessListener); } protected synchronized void stopListening() { PHPUnitDebugEventHandler.getDefault().removeListener( fDebugProcessListener); fListeners = null; } protected void notifyTestRunStarted() { if (fListeners != null) { for (ITestRunListener listener : fListeners) { listener.testRunStarted(0); } } } protected void notifyTestRunEnded(long elapsedTime) { if (fListeners != null) { for (ITestRunListener listener : fListeners) { listener.testRunEnded(elapsedTime); } } } protected void parseOutput(String text) { if (text.length() == 1) { switch (text.charAt(0)) { case '.': for (ITestRunListener listener : fListeners) { listener.testStarted("Uknown", "Uknown"); listener.testEnded("Uknown", "Uknown"); } break; case 'F': for (ITestRunListener listener : fListeners) { listener.testStarted("Uknown", "Uknown"); // public void testFailed(int status, String testId, String // testName, String trace, String expected, String actual); listener.testFailed(ITestRunListener.STATUS_FAILURE, "Uknown", "Uknown", null, null, null); } break; } } } public boolean isRunning() { return fIsRunning; } /** * Requests to stop the remote test run. */ public synchronized void stopTest() { if (isRunning()) { } } }