/******************************************************************************* * Copyright Technophobia Ltd 2012 * * This file is part of the Substeps Eclipse Plugin. * * The Substeps Eclipse Plugin is free software: you can redistribute it and/or modify * it under the terms of the Eclipse Public License v1.0. * * The Substeps Eclipse Plugin is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * Eclipse Public License for more details. * * You should have received a copy of the Eclipse Public License * along with the Substeps Eclipse Plugin. If not, see <http://www.eclipse.org/legal/epl-v10.html>. ******************************************************************************/ package com.technophobia.substeps.model; import com.technophobia.substeps.FeatureRunnerPlugin; import com.technophobia.substeps.junit.ui.SubstepsRunSession; import com.technophobia.substeps.junit.ui.SubstepsRunSessionListener; import com.technophobia.substeps.model.structure.Status; import com.technophobia.substeps.model.structure.SubstepsTestElement; import com.technophobia.substeps.model.structure.SubstepsTestLeafElement; public class SubstepsRunSessionListenerImpl implements SubstepsRunSessionListener { private SubstepsRunSession activeTestRunSession; private SubstepsSessionListener substepsSessionListener; @Override public void sessionAdded(final SubstepsRunSession substepsRunSession) { // Only serve one legacy ITestRunListener at a time, since they cannot // distinguish between different concurrent test sessions: if (activeTestRunSession != null) return; this.activeTestRunSession = substepsRunSession; this.substepsSessionListener = new SubstepsSessionListener() { @Override public void testAdded(final SubstepsTestElement testElement) { // No-op } @Override public void sessionStarted() { final Object[] testRunListeners = FeatureRunnerPlugin.instance().getSubstepsRunListeners() .getListeners(); for (int i = 0; i < testRunListeners.length; i++) { ((SubstepsRunListener) testRunListeners[i]).testRunStarted(activeTestRunSession.getTotalCount()); } } @Override public void sessionTerminated() { final Object[] testRunListeners = FeatureRunnerPlugin.instance().getSubstepsRunListeners() .getListeners(); for (int i = 0; i < testRunListeners.length; i++) { ((SubstepsRunListener) testRunListeners[i]).testRunTerminated(); } sessionRemoved(activeTestRunSession); } @Override public void sessionStopped(final long elapsedTime) { final SubstepsRunListener[] testRunListeners = FeatureRunnerPlugin.instance().getModel() .getTestRunListeners(); for (int i = 0; i < testRunListeners.length; i++) { testRunListeners[i].testRunStopped(elapsedTime); } sessionRemoved(activeTestRunSession); } @Override public void sessionEnded(final long elapsedTime) { final Object[] testRunListeners = FeatureRunnerPlugin.instance().getSubstepsRunListeners() .getListeners(); for (int i = 0; i < testRunListeners.length; i++) { ((SubstepsRunListener) testRunListeners[i]).testRunEnded(elapsedTime); } sessionRemoved(activeTestRunSession); } @Override public void runningBegins() { // ignore } @Override public void testStarted(final SubstepsTestLeafElement testElement) { final Object[] testRunListeners = FeatureRunnerPlugin.instance().getSubstepsRunListeners() .getListeners(); for (int i = 0; i < testRunListeners.length; i++) { ((SubstepsRunListener) testRunListeners[i]).testStarted(testElement.getId(), testElement.getTestName()); } } @Override public void testFailed(final SubstepsTestElement testElement, final Status status, final String trace, final String expected, final String actual) { final Object[] testRunListeners = FeatureRunnerPlugin.instance().getSubstepsRunListeners() .getListeners(); for (int i = 0; i < testRunListeners.length; i++) { ((SubstepsRunListener) testRunListeners[i]).testFailed(status, testElement.getId(), testElement.getTestName(), trace, expected, actual); } } @Override public void testEnded(final SubstepsTestLeafElement testCaseElement) { final Object[] testRunListeners = FeatureRunnerPlugin.instance().getSubstepsRunListeners() .getListeners(); for (int i = 0; i < testRunListeners.length; i++) { ((SubstepsRunListener) testRunListeners[i]).testEnded(testCaseElement.getId(), testCaseElement.getTestName()); } } @Override public void testReran(final SubstepsTestLeafElement testCaseElement, final Status status, final String trace, final String expectedResult, final String actualResult) { final SubstepsRunListener[] testRunListeners = FeatureRunnerPlugin.instance().getModel() .getTestRunListeners(); for (int i = 0; i < testRunListeners.length; i++) { testRunListeners[i].testReran(testCaseElement.getId(), testCaseElement.getClassName(), testCaseElement.getTestMethodName(), status, trace, expectedResult, actualResult); } } @Override public boolean acceptsSwapToDisk() { return true; } @Override public void sessionLaunched(final SubstepsRunSession session) { // TODO Auto-generated method stub } }; activeTestRunSession.addTestSessionListener(substepsSessionListener); } @Override public void sessionRemoved(final SubstepsRunSession testRunSession) { if (activeTestRunSession == testRunSession) { activeTestRunSession.removeTestSessionListener(substepsSessionListener); substepsSessionListener = null; activeTestRunSession = null; } } }