package org.testng.eclipse.ui;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.action.Action;
import org.testng.eclipse.TestNGPlugin;
import org.testng.eclipse.ui.util.ConfigurationHelper;
import org.testng.eclipse.util.JDTUtil;
import org.testng.eclipse.util.LaunchUtil;
import org.testng.eclipse.util.ResourceUtil;
/**
* A quick launcher from the TestNG viewer.
*
* @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a>
*/
public class QuickRunAction extends Action {
private IJavaProject m_javaProject;
private ILaunch m_previousRun;
private RunInfo m_runInfo;
private String m_runMode;
public QuickRunAction(IJavaProject javaProject, ILaunch prevLaunch, RunInfo runInfo, String mode) {
m_javaProject= javaProject;
m_previousRun= prevLaunch;
m_runInfo= runInfo;
m_runMode= mode;
initUI();
}
private void initUI() {
if(ILaunchManager.RUN_MODE.equals(m_runMode)) {
setText(ResourceUtil.getString("QuickRunAction.run.action.label")); //$NON-NLS-1$
setToolTipText(ResourceUtil.getString("QuickRunAction.run.action.tooltip")); //$NON-NLS-1$
setDisabledImageDescriptor(TestNGPlugin.getImageDescriptor("dlcl16/relaunch.gif")); //$NON-NLS-1$
setHoverImageDescriptor(TestNGPlugin.getImageDescriptor("elcl16/relaunch.gif")); //$NON-NLS-1$
setImageDescriptor(TestNGPlugin.getImageDescriptor("elcl16/relaunch.gif")); //$NON-NLS-1$
}
else {
setText(ResourceUtil.getString("QuickRunAction.debug.action.label")); //$NON-NLS-1$
setToolTipText(ResourceUtil.getString("QuickRunAction.debug.action.tooltip")); //$NON-NLS-1$
setDisabledImageDescriptor(TestNGPlugin.getImageDescriptor("dlcl16/debug.gif")); //$NON-NLS-1$
setHoverImageDescriptor(TestNGPlugin.getImageDescriptor("elcl16/debug.gif")); //$NON-NLS-1$
setImageDescriptor(TestNGPlugin.getImageDescriptor("elcl16/debug.gif")); //$NON-NLS-1$
}
}
@Override
public void run() {
IType itype= null;
IMethod imethod= null;
try {
itype = m_javaProject.findType(m_runInfo.getClassName());
imethod= (IMethod) JDTUtil.findElement(m_javaProject, m_runInfo);
}
catch(JavaModelException jmex) {
TestNGPlugin.log(new Status(IStatus.ERROR, TestNGPlugin.PLUGIN_ID, 3333,
"Cannot find method " + m_runInfo.getMethodDisplay() + " in class " + m_runInfo.getClassName(), //$NON-NLS-1$ $NON-NLS-2$
jmex));
}
if (null == imethod || m_previousRun == null) return;
/*
* The runInfo is passed along in order to preserve any
* jvm args used in the original launcher when
* QuickRunAction is activated from the FailureTab to re-run failed
* methods.
*/
ILaunchConfiguration config = m_previousRun.getLaunchConfiguration();
try {
m_runInfo.setJvmArgs(ConfigurationHelper.getJvmArgs(config));
m_runInfo.setEnvironmentVariables(config.getAttribute(
ILaunchManager.ATTR_ENVIRONMENT_VARIABLES, (Map<String, String>) null));
} catch (CoreException e) {
TestNGPlugin.log(e);
}
LaunchUtil.launchMethodConfiguration(m_javaProject,
itype, imethod,
m_runMode, m_runInfo);
}
}