package com.jetbrains.lang.dart.ide.runner.test;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.Executor;
import com.intellij.execution.configurations.ConfigurationFactory;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
import com.intellij.util.PathUtil;
import com.jetbrains.lang.dart.DartBundle;
import com.jetbrains.lang.dart.ide.runner.base.DartRunConfigurationBase;
import com.jetbrains.lang.dart.ide.runner.test.ui.DartTestConfigurationEditorForm;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class DartTestRunConfiguration extends DartRunConfigurationBase {
private @NotNull DartTestRunnerParameters myRunnerParameters = new DartTestRunnerParameters();
protected DartTestRunConfiguration(final Project project, final ConfigurationFactory factory, final String name) {
super(project, factory, name);
}
@NotNull
public DartTestRunnerParameters getRunnerParameters() {
return myRunnerParameters;
}
@NotNull
@Override
public SettingsEditor<? extends RunConfiguration> getConfigurationEditor() {
return new DartTestConfigurationEditorForm(getProject());
}
@Nullable
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException {
return new DartTestRunningState(env);
}
@Nullable
public String suggestedName() {
final String path = myRunnerParameters.getFilePath();
final String groupOrTestName = myRunnerParameters.getTestName();
if (path == null) return null;
final String fileOrDirName = PathUtil.getFileName(path);
switch (myRunnerParameters.getScope()) {
case GROUP_OR_TEST_BY_NAME:
if (groupOrTestName != null) {
return DartBundle.message("test.0.in.1", groupOrTestName, fileOrDirName);
}
// fall through
case FILE:
return DartBundle.message("all.tests.in.0", fileOrDirName);
case FOLDER:
final String dirName;
if ("test".equals(fileOrDirName)) {
final String parentPath = PathUtil.getParentPath(path);
final String parentDirName = PathUtil.getFileName(parentPath);
dirName = parentDirName.isEmpty() ? fileOrDirName : parentDirName + "/" + fileOrDirName;
}
else {
dirName = fileOrDirName;
}
return DartBundle.message("all.tests.in.0", dirName);
default:
return null;
}
}
public RunConfiguration clone() {
final DartTestRunConfiguration clone = (DartTestRunConfiguration)super.clone();
clone.myRunnerParameters = myRunnerParameters.clone();
return clone;
}
}