/** * */ package org.eclipse.dltk.tcl.testing.internal.tcltest; import org.eclipse.debug.core.ILaunch; import org.eclipse.dltk.testing.DLTKTestingPlugin; import org.eclipse.dltk.testing.ITestingClient; import org.eclipse.dltk.testing.ITestingProcessor; import org.eclipse.dltk.testing.model.ITestRunSession; class TcltestOutputProcessor implements ITestingProcessor { private ILaunch launch; long start = 0; public TcltestOutputProcessor(ILaunch launch) { this.launch = launch; // System.out.println("TcltestOutputProcessor created"); } int index = 0; private ITestRunSession session; private ITestingClient client; private boolean skip = false; private String message; private int state = STATE_NORMAL; private static final int STATE_NORMAL = 0; private static final int STATE_RESULT_WAS = 1; private static final int STATE_RESULT_ACTUAL = 2; private String resultActual = ""; private String resultExpected = ""; public void done() { // System.out.println("DONE"); if (session == null || client == null) { // System.out.println("Session is NULL"); return; } session.setTotalCount(index); client.testTerminated((int) (System.currentTimeMillis() - start)); } public void processLine(String line) { // System.out.println("#" + line); if (session == null || client == null) { return; } // System.out.println("@"); if (line.length() == 0) { return; } if (line.startsWith("====")) { if (line.endsWith("FAILED")) { if (!skip) { message = line.substring(line.indexOf(" ", line .indexOf(" ") + 1), line.lastIndexOf(" ")); } if (skip) { int lastIndexOf = line.indexOf(" ", line.indexOf(" ") + 1); String name = line.substring(5, lastIndexOf); int id = ++index; client.testTree(id, name, false, 0); client.testStarted(id, name); session.setTotalCount(id); client.testError(id, name); client.testActual(resultActual); client.testExpected(resultExpected); client.traceStart(); client.traceMessage(message); client.traceEnd(); resetState(); } skip = !skip; } } else if (line.equals("---- Result was:")) { state = STATE_RESULT_WAS; return; } else if (line .equals("---- Result should have been (exact matching):")) { state = STATE_RESULT_ACTUAL; return; } switch (state) { case STATE_RESULT_ACTUAL: String d = resultExpected.length() > 0 ? "\n" : ""; resultExpected += d + line; break; case STATE_RESULT_WAS: d = resultActual.length() > 0 ? "\n" : ""; resultActual += d + line; break; } if (!skip) { if (line.startsWith("++++")) { int lastIndexOf = line.lastIndexOf(" "); String name = line.substring(5, lastIndexOf); String state = line.substring(lastIndexOf + 1); if ("PASSED".equals(state)) { int id = ++index; client.testTree(id, name, false, 0); client.testStarted(id, name); session.setTotalCount(id); client.testEnded(id, name); resetState(); } else { // We need to test for SKIPPED: String sk = "SKIPPED:"; if (line.indexOf(sk) != -1) { lastIndexOf = line.lastIndexOf(sk); name = line.substring(5, lastIndexOf); state = line.substring(lastIndexOf + sk.length()); int id = ++index; client.testTree(id, name, false, 0); client.testStarted(id, name); session.setTotalCount(id); client.testFailed(id, name); client.traceStart(); client.traceMessage(state); client.traceEnd(); resetState(); } } } } } private void resetState() { state = STATE_NORMAL; resultActual = ""; resultExpected = ""; } public void start() { // System.out.println("!!!!!!START!!!!!!"); this.start = System.currentTimeMillis(); index = 0; session = DLTKTestingPlugin.getTestRunSession(launch); if (session == null) return; client = session.getTestRunnerClient(); if (client != null) { client.testRunStart(0); } } }