Package org.testng.eclipse.launch

Source Code of org.testng.eclipse.launch.AbstractTestNGLaunchDelegate

package org.testng.eclipse.launch;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.AssertionFailedException;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ui.IEditorActionDelegate;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.testng.eclipse.TestNGPlugin;
import org.testng.eclipse.launch.components.ITestContent;
import org.testng.eclipse.ui.util.TypeParser;
import org.testng.eclipse.util.JDTUtil;
import org.testng.eclipse.util.LaunchUtil;
import org.testng.eclipse.util.SuiteFileValidator;

/**
* Base class for Run/Debug contextual actions. Handles TestNG tests, but no
* suites yet.
*
* @author <a href='mailto:the_mindstorm[at]evolva[dot]ro'>Alexandru Popescu</a>
*/
public abstract class AbstractTestNGLaunchDelegate implements IEditorActionDelegate {
  private IAction m_action;
  private IEditorPart m_editorPart;
 
  private IProject m_project;
  private ICompilationUnit m_compilationUnit;
  private Map m_launchAttributes= new HashMap();
  private String m_configName;
 
  private String m_actionText= "";
  private boolean m_isSuite= false;
  private boolean m_enabled= false;
 
  protected abstract String getLaunchMode();
 
  protected abstract String getCommandPrefix();
 
  protected abstract String getTestShortcut();
 
  protected abstract String getSuiteShortcut();
 
  public void setActiveEditor(IAction action, IEditorPart targetEditor) {
    m_action= action;
    m_editorPart= targetEditor;
    update();
  }

  public void selectionChanged(IAction action, ISelection selection) {
  }

  private void update() {
    if(null == m_action || null == m_editorPart) {
      return;
    }

    m_enabled= false;
    m_launchAttributes.clear();

    IEditorInput editorInput= m_editorPart.getEditorInput();
 
    if(editorInput instanceof IFileEditorInput) {
      IFile file= ((IFileEditorInput) editorInput).getFile();
      m_project= file.getProject();
      m_actionText= getCommandPrefix();
     
      if("java".equals(file.getFileExtension())) {
        m_actionText+= " test";
        m_compilationUnit= JDTUtil.getJavaElement(file);

        IType[] types= getTypes(m_compilationUnit);
        IType mainType= getMainType(m_compilationUnit, types);
       
        if(null == types || null == mainType || !hasSource(mainType)) {
          return;
        }

        ITestContent testContent = TypeParser.parseType(mainType);

        if(testContent.isTestNGClass()) {
          m_enabled= true;
          m_configName= mainType.getElementName();
         
          m_launchAttributes= LaunchUtil.createClassLaunchConfigurationMap(mainType, types, testContent.getAnnotationType());
        }       
      }
//      else if("xml".equals(file.getFileExtension())) {
//        m_actionText+= " suite";
//     
//        if(isSuiteDefinition(file)) {
//          m_launchAttributes.put(TestNGLaunchConfigurationConstants.TYPE, SUITE_TYPE);
//          m_launchAttributes.put(TestNGLaunchConfigurationConstants.SUITE_TEST_LIST,
//            Utils.stringToList(file.getProjectRelativePath().toOSString()));
//          m_configName= file.getProjectRelativePath().toString().replace('/', '.');
//          m_isSuite= true;
//          isTestNGenabled= true;
//        }
//      }
   
      m_action.setEnabled(m_enabled);
      m_action.setText(m_actionText);
    }
  }
 
  /**
   * @param compilationUnit
   * @param types
   * @return
   */
  private IType getMainType(ICompilationUnit compilationUnit, IType[] types) {
    IType mainType= null;
    try {
      mainType= compilationUnit.findPrimaryType();
    }
    catch(AssertionFailedException failure) {
      ; //ignore
    }
    if(null == mainType && null != types && types.length > 0) {
      mainType= types[0];
    }
   
    return mainType;
  }

  public void run(IAction action) {
    if(!m_enabled) return;
   
    LaunchUtil.launchMapConfiguration(m_project, m_configName, m_launchAttributes, m_compilationUnit, getLaunchMode());
  }

  protected IType[] getTypes(ICompilationUnit compilationUnit) {
    try {
      return compilationUnit.getTypes();
    }
    catch(JavaModelException jme) {
      TestNGPlugin.log(jme);
    }
   
    return null;
  }
 
/*  protected IType[] getTypes(IFile file) {
    try {
      ICompilationUnit compilationUnit= JDTUtil.getJavaElement(file);
      return compilationUnit.getTypes();
    }
    catch(JavaModelException jme) {
      TestNGPlugin.log(jme);
    }
   
    return null;
  }*/
 
  private boolean hasSource(IType type) {
    try {
      return type.getSource() != null;
    }
    catch(JavaModelException jme) {
      TestNGPlugin.log(jme);
    }
   
    return false;
  }
 
  protected boolean isSuiteDefinition(IFile file) {
    try {
      return SuiteFileValidator.isSuiteDefinition(file);
    }
    catch(CoreException ce) {
      TestNGPlugin.log(ce);
    }
   
    return false;
 
}
TOP

Related Classes of org.testng.eclipse.launch.AbstractTestNGLaunchDelegate

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.