/* * Copyright 2017 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.navigator.actions; import static com.google.common.collect.Lists.newArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.jface.action.Action; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.robotframework.ide.eclipse.main.plugin.launch.local.RobotLaunchConfigurationFinder; import org.robotframework.ide.eclipse.main.plugin.model.RobotCase; import org.robotframework.ide.eclipse.main.plugin.model.RobotCasesSection; import org.robotframework.red.viewers.Selections; public class RunTestSuiteAction extends Action implements IEnablementUpdatingAction { private final ISelectionProvider selectionProvider; private final Mode mode; public RunTestSuiteAction(final ISelectionProvider selectionProvider, final Mode mode) { super(mode.actionName, mode.getImage()); this.selectionProvider = selectionProvider; this.mode = mode; } @Override public void run() { runTestSuite((IStructuredSelection) selectionProvider.getSelection(), mode); } public static void runTestSuite(final IStructuredSelection selection, final Mode mode) { final WorkspaceJob job = new WorkspaceJob("Launching Robot Tests") { @Override public IStatus runInWorkspace(final IProgressMonitor monitor) throws CoreException { final List<RobotCasesSection> selectedTestSuites = Selections.getElements(selection, RobotCasesSection.class); final List<IResource> resources = findResourcesForSections(selectedTestSuites); if (!resources.isEmpty()) { RobotLaunchConfigurationFinder.getLaunchConfigurationExceptSelectedTestCases(resources) .launch(mode.launchMgrName, monitor); } return Status.OK_STATUS; } private List<IResource> findResourcesForSections(final List<RobotCasesSection> robotCasesSections) { final List<IResource> resources = newArrayList(); for (final RobotCasesSection section : robotCasesSections) { final IResource suiteFile = section.getSuiteFile().getFile(); if (!resources.contains(suiteFile)) { resources.add(suiteFile); } } return resources; } }; job.setUser(false); job.schedule(); } @Override public void updateEnablement(final IStructuredSelection selection) { setEnabled(!Selections.getElements(selection, RobotCase.class).isEmpty()); } public static enum Mode { RUN("Run", ILaunchManager.RUN_MODE, IDebugUIConstants.IMG_ACT_RUN), DEBUG("Debug", ILaunchManager.DEBUG_MODE, IDebugUIConstants.IMG_ACT_DEBUG); private final String actionName; private final String launchMgrName; private final String imageConst; private Mode(final String actionName, final String launchMgrName, final String imageConst) { this.actionName = actionName; this.launchMgrName = launchMgrName; this.imageConst = imageConst; } ImageDescriptor getImage() { return DebugUITools.getImageDescriptor(imageConst); } } }