blob: e5e07f10ea842c6147f8b9692f7bec46c3fe3908 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2013 Innoopract Informationssysteme GmbH.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.tools.launch.internal.junit;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.*;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.junit.launcher.JUnitLaunchConfigurationDelegate;
import org.eclipse.jdt.launching.IVMRunner;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.core.plugin.*;
import org.eclipse.pde.ui.launcher.EquinoxLaunchConfiguration;
import org.eclipse.rap.tools.launch.internal.LaunchMessages;
import org.eclipse.rap.tools.launch.internal.RAPLaunchDelegate;
public class RAPJUnitLaunchConfigurationDelegate extends JUnitLaunchConfigurationDelegate {
private JUnitLaunchConfigurationDelegate julc
= new org.eclipse.pde.ui.launcher.JUnitLaunchConfigurationDelegate();
private EquinoxLaunchConfigurationExtension elc = new EquinoxLaunchConfigurationExtension();
private RAPLaunchDelegate rld = new RAPLaunchDelegate( true );
private static final class EquinoxLaunchConfigurationExtension extends EquinoxLaunchConfiguration
{
public void preLaunchCheck( ILaunchConfiguration configuration,
ILaunch launch,
IProgressMonitor monitor )
throws CoreException
{
super.preLaunchCheck( configuration, launch, monitor );
}
}
public boolean finalLaunchCheck( ILaunchConfiguration configuration,
String mode,
IProgressMonitor monitor )
throws CoreException
{
rld.finalLaunchCheck( configuration, mode, monitor );
return super.finalLaunchCheck( configuration, mode, monitor );
}
public void launch( ILaunchConfiguration configuration,
String mode,
ILaunch launch,
IProgressMonitor monitor )
throws CoreException
{
SubProgressMonitor subMonitor = rld.doPreLaunch( configuration, launch, monitor );
super.launch( configuration, mode, launch, subMonitor );
}
protected void preLaunchCheck( ILaunchConfiguration configuration,
ILaunch launch,
IProgressMonitor monitor )
throws CoreException
{
super.preLaunchCheck( configuration, launch, new SubProgressMonitor( monitor, 2 ) );
elc.preLaunchCheck( configuration, launch, new SubProgressMonitor( monitor, 2 ) );
}
public IVMRunner getVMRunner( ILaunchConfiguration configuration, String mode )
throws CoreException
{
return julc.getVMRunner( configuration, mode );
}
public String verifyMainTypeName( ILaunchConfiguration configuration ) throws CoreException {
return "org.eclipse.equinox.launcher.Main"; //$NON-NLS-1$
}
public String[] getClasspath( ILaunchConfiguration configuration ) throws CoreException {
return julc.getClasspath( configuration );
}
public String getProgramArguments( ILaunchConfiguration configuration ) throws CoreException {
String[] programArguments = elc.getProgramArguments( configuration );
return concatArguments( programArguments );
}
private String concatArguments( String[] arguments ) {
StringBuffer result = new StringBuffer();
for( int i = 0; i < arguments.length; i++ ) {
result.append( arguments[ i ] );
result.append( " " ); //$NON-NLS-1$
}
return result.toString().trim();
}
public String getVMArguments( ILaunchConfiguration configuration ) throws CoreException {
String[] arguments = rld.getVMArguments( configuration );
return concatArguments( arguments );
}
protected void collectExecutionArguments( ILaunchConfiguration config,
List vmArguments,
List programArguments )
throws CoreException
{
super.collectExecutionArguments( config, vmArguments, programArguments );
String name = "-loaderpluginname"; //$NON-NLS-1$
String value = "org.eclipse.rap.junit.runtime"; //$NON-NLS-1$
replaceArguments( programArguments, name, value );
programArguments.add( "-testpluginname" ); //$NON-NLS-1$
programArguments.add( getTestPluginId( config ) );
}
private void replaceArguments( List list,
String name,
String value )
{
int pos = list.indexOf( name );
list.remove( pos + 1 );
list.add( pos + 1, value );
}
private String getTestPluginId( ILaunchConfiguration configuration ) throws CoreException {
IJavaProject javaProject = getJavaProject( configuration );
IProject project = javaProject.getProject();
IPluginModelBase model = PluginRegistry.findModel( project );
if( model == null ) {
String msg = NLS.bind( LaunchMessages.RAPLaunchDelegate_Error_NotAPlugin, project.getName() );
abort( msg, null, IStatus.OK );
}
if( model instanceof IFragmentModel ) {
return ( ( IFragmentModel )model ).getFragment().getPluginId();
}
return model.getPluginBase().getId();
}
}