blob: 39f4444bc6662c7f15413113c17b064dff25715b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2016 xored software, Inc. and others
*
* 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:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.ruby.testing.internal;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.model.ILaunchConfigurationDelegate;
import org.eclipse.dltk.compiler.util.Util;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.environment.IEnvironment;
import org.eclipse.dltk.launching.IInterpreterRunner;
import org.eclipse.dltk.launching.InterpreterConfig;
import org.eclipse.dltk.launching.ScriptLaunchConfigurationConstants;
import org.eclipse.dltk.ruby.launching.RubyLaunchConfigurationDelegate;
import org.eclipse.dltk.testing.DLTKTestingConstants;
import org.eclipse.dltk.testing.DLTKTestingMessages;
import org.eclipse.dltk.testing.DLTKTestingPlugin;
import org.eclipse.dltk.testing.ITestingEngine;
import org.eclipse.dltk.testing.TestingEngineManager;
public class RubyTestingLaunchConfigurationDelegate extends
RubyLaunchConfigurationDelegate implements ILaunchConfigurationDelegate {
public static boolean isContainerMode(ILaunchConfiguration configuration)
throws CoreException {
final String containerHandle = configuration.getAttribute(
DLTKTestingConstants.ATTR_TEST_CONTAINER, Util.EMPTY_STRING);
return containerHandle.length() > 0;
}
@Override
protected void validateLaunchConfiguration(
ILaunchConfiguration configuration, String mode, IProject project)
throws CoreException {
super.validateLaunchConfiguration(configuration, mode, project);
final ITestingEngine engine = getTestingEngine(configuration);
if (engine == null) {
abort(DLTKTestingMessages.TestingNoEngineConfigured, null,
ScriptLaunchConfigurationConstants.ERR_NO_TESTING_ENGINE);
}
if (isContainerMode(configuration)) {
final String containerHandle = configuration
.getAttribute(DLTKTestingConstants.ATTR_TEST_CONTAINER,
Util.EMPTY_STRING);
Assert.isLegal(containerHandle.length() != 0);
final IModelElement containerElement = DLTKCore
.create(containerHandle);
if (containerElement == null) {
abort(
DLTKTestingMessages.JUnitLaunchConfigurationTab_error_noContainer,
null,
ScriptLaunchConfigurationConstants.ERR_UNSPECIFIED_MAIN_SCRIPT);
}
}
}
@Override
protected String getScriptLaunchPath(ILaunchConfiguration configuration,
IEnvironment scriptEnvironment) throws CoreException {
final ITestingEngine engine = getTestingEngine(configuration);
final String mainScript = engine.getMainScriptPath(configuration,
scriptEnvironment);
if (mainScript != null) {
return mainScript;
}
return super.getScriptLaunchPath(configuration, scriptEnvironment);
}
@Override
protected IPath getDefaultWorkingDirectory(
ILaunchConfiguration configuration) throws CoreException {
if (isContainerMode(configuration)) {
return new Path(getProjectLocation(configuration));
} else {
return super.getDefaultWorkingDirectory(configuration);
}
}
@Override
protected void runRunner(ILaunchConfiguration configuration,
IInterpreterRunner runner, InterpreterConfig config,
ILaunch launch, IProgressMonitor monitor) throws CoreException {
// initialize testing model
DLTKTestingPlugin.getModel().start();
final ITestingEngine engine = getTestingEngine(configuration);
engine.configureLaunch(config, configuration, launch);
super.runRunner(configuration, runner, config, launch, monitor);
}
private ITestingEngine getTestingEngine(ILaunchConfiguration configuration)
throws CoreException {
return TestingEngineManager.getEngine(configuration.getAttribute(
DLTKTestingConstants.ATTR_ENGINE_ID, (String) null));
}
}