package org.erlide.cover.core; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Semaphore; import org.eclipse.core.runtime.IPath; import org.erlide.cover.api.AbstractCoverRunner; import org.erlide.cover.api.CoverageAnalysis; import org.erlide.cover.api.IConfiguration; import org.erlide.cover.constants.TestConstants; import org.erlide.cover.views.model.TestTreeModel; import org.erlide.runtime.rpc.RpcException; import org.erlide.util.ErlLogger; import com.ericsson.otp.erlang.OtpErlangAtom; /** * Class for launching cover * * @author Aleksandra Lipiec <aleksandra.lipiec@erlang-solutions.com> * */ public class CoverRunner extends AbstractCoverRunner { private static Semaphore semaphore = new Semaphore(1); public CoverRunner() { } @Override public void run() { final CoverBackend backend = CoverBackend.getInstance(); try { semaphore.acquireUninterruptibly(); final IConfiguration config = backend.getSettings().getConfig(); CoverageAnalysis.prepareAnalysis(config); runTests(config); CoverageAnalysis.performAnalysis(); } catch (final Exception e) { ErlLogger.error(e); backend.handleError("Exception while running cover: " + e); } finally { semaphore.release(); } } // performs tests private void runTests(final IConfiguration config) throws RpcException { // clear viewer TestTreeModel.getInstance().clear(); for (final IEUnitObserver obs : CoverBackend.getInstance().getEUnitListeners()) { obs.treeChanged(); obs.labelChanged(); } // test CoverBackend.getInstance().getBackend().getOtpRpc().call( TestConstants.TEST_ERL_BACKEND, TestConstants.FUN_START, "x", new OtpErlangAtom( CoverBackend.getInstance().getSettings().getFramework())); ErlLogger.info(config.getProject().getWorkspaceProject().getLocation().toPortableString()); final IPath ppath = config.getProject().getWorkspaceProject().getLocation(); ErlLogger.info(ppath.append(config.getOutputDir()).toPortableString()); CoverBackend.getInstance().getBackend().getOtpRpc().call( TestConstants.TEST_ERL_BACKEND, TestConstants.FUN_OUTPUT_DIR, "s", ppath.append(config.getOutputDir()).toString()); switch (CoverBackend.getInstance().getSettings().getType()) { case MODULE: ErlLogger.info(config.getModules().iterator().next().getFilePath()); CoverBackend.getInstance().getBackend().getOtpRpc().call( TestConstants.TEST_ERL_BACKEND, TestConstants.FUN_TEST, "ss", CoverBackend.getInstance().getSettings().getType().name() .toLowerCase(), config.getModules().iterator().next().getFilePath()); break; case ALL: final List<String> testDirs = new ArrayList<>(); for (final IPath p : config.getSourceDirs()) { ErlLogger.info(p.toPortableString()); if (!p.toString().endsWith("test")) { testDirs.add(ppath.append(p).append("test").toString()); } } testDirs.add(ppath.append("test").toString()); for (final String path : testDirs) { ErlLogger.info(path); CoverBackend.getInstance().getBackend().getOtpRpc() .call(TestConstants.TEST_ERL_BACKEND, TestConstants.FUN_TEST, "ss", CoverBackend.getInstance() .getSettings().getType().name().toLowerCase(), path); } break; default: break; } } }