test history: don't save runner/executor/etc information so rerun failed could be restored (IDEA-142270)

This commit is contained in:
Anna Kozlova
2015-07-06 16:16:32 +03:00
parent a4486fa84f
commit f068cf1448
4 changed files with 38 additions and 52 deletions
@@ -44,4 +44,14 @@ public class ConfigurationTypeUtil {
public static boolean equals(@NotNull ConfigurationType type1, @NotNull ConfigurationType type2) {
return type1.getId().equals(type2.getId());
}
public static ConfigurationType findConfigurationType(String configurationId) {
ConfigurationType[] types = Extensions.getExtensions(ConfigurationType.CONFIGURATION_TYPE_EP);
for (ConfigurationType type : types) {
if (type.getId().equals(configurationId)) {
return type;
}
}
return null;
}
}
@@ -18,9 +18,7 @@ package com.intellij.execution.testframework.sm;
import com.intellij.execution.configurations.ConfigurationType;
import com.intellij.execution.configurations.ConfigurationTypeUtil;
import com.intellij.execution.testframework.sm.runner.history.actions.AbstractImportTestsAction;
import com.intellij.execution.testframework.sm.runner.ui.SMTestRunnerResultsForm;
import com.intellij.openapi.components.*;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.util.xmlb.annotations.Attribute;
import com.intellij.util.xmlb.annotations.MapAnnotation;
@@ -28,7 +26,6 @@ import com.intellij.util.xmlb.annotations.Property;
import com.intellij.util.xmlb.annotations.Tag;
import javax.swing.*;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -86,12 +83,8 @@ public class TestHistoryConfiguration implements PersistentStateComponent<TestHi
public Icon getIcon(String file) {
final ConfigurationBean bean = myState.getHistoryElements().get(file);
if (bean != null) {
ConfigurationType[] types = Extensions.getExtensions(ConfigurationType.CONFIGURATION_TYPE_EP);
for (ConfigurationType type : types) {
if (type.getId().equals(bean.configurationId)) {
return type.getIcon();
}
}
ConfigurationType type = ConfigurationTypeUtil.findConfigurationType(bean.configurationId);
if (type != null) return type.getIcon();
}
return null;
}
@@ -19,20 +19,14 @@ import com.intellij.execution.ExecutionException;
import com.intellij.execution.Executor;
import com.intellij.execution.ExecutorRegistry;
import com.intellij.execution.RunnerRegistry;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.configurations.RunProfileState;
import com.intellij.execution.configurations.*;
import com.intellij.execution.executors.DefaultRunExecutor;
import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
import com.intellij.execution.runners.ProgramRunner;
import com.intellij.execution.testframework.export.TestResultsXmlFormatter;
import com.intellij.execution.testframework.sm.runner.history.ImportedTestRunnableState;
import com.intellij.execution.testframework.sm.runner.SMRunnerConsolePropertiesProvider;
import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties;
import com.intellij.icons.AllIcons;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
@@ -40,9 +34,7 @@ import com.intellij.openapi.application.PathManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.UserDataHolder;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
@@ -153,7 +145,7 @@ public abstract class AbstractImportTestsAction extends AnAction {
public static class ImportRunProfile implements RunProfile {
private final VirtualFile myFile;
private final Project myProject;
private RunnerAndConfigurationSettingsImpl mySettings;
private RunConfiguration myConfiguration;
private boolean myImported;
private SMTRunnerConsoleProperties myProperties;
@@ -164,21 +156,22 @@ public abstract class AbstractImportTestsAction extends AnAction {
final Document document = JDOMUtil.loadDocument(VfsUtilCore.virtualToIoFile(myFile));
final Element config = document.getRootElement().getChild("config");
if (config != null) {
mySettings = new RunnerAndConfigurationSettingsImpl(RunManagerImpl.getInstanceImpl(project));
try {
mySettings.readExternal(config);
final Executor executor = ExecutorRegistry.getInstance().getExecutorById(DefaultRunExecutor.EXECUTOR_ID);
if (executor != null) {
final RunConfiguration configuration = mySettings.getConfiguration();
if (configuration instanceof SMRunnerConsolePropertiesProvider) {
myProperties = ((SMRunnerConsolePropertiesProvider)configuration).createTestConsoleProperties(executor);
String configTypeId = config.getAttributeValue("configId");
if (configTypeId != null) {
final ConfigurationType configurationType = ConfigurationTypeUtil.findConfigurationType(configTypeId);
if (configurationType != null) {
myConfiguration = configurationType.getConfigurationFactories()[0].createTemplateConfiguration(project);
myConfiguration.setName(config.getAttributeValue("name"));
myConfiguration.readExternal(config);
final Executor executor = ExecutorRegistry.getInstance().getExecutorById(DefaultRunExecutor.EXECUTOR_ID);
if (executor != null) {
if (myConfiguration instanceof SMRunnerConsolePropertiesProvider) {
myProperties = ((SMRunnerConsolePropertiesProvider)myConfiguration).createTestConsoleProperties(executor);
}
}
}
}
catch (InvalidDataException e) {
LOG.info(e);
mySettings = null;
}
}
}
catch (Exception ignore) {
@@ -192,13 +185,9 @@ public abstract class AbstractImportTestsAction extends AnAction {
myImported = true;
return new ImportedTestRunnableState(this, VfsUtilCore.virtualToIoFile(myFile));
}
if (mySettings != null) {
if (myConfiguration != null) {
try {
final RunConfiguration configuration = mySettings.getConfiguration();
if (configuration instanceof UserDataHolder) {
((UserDataHolder)configuration).putUserData(TestResultsXmlFormatter.SETTINGS, mySettings);
}
return configuration.getState(executor, environment);
return myConfiguration.getState(executor, environment);
}
catch (Throwable e) {
LOG.info(e);
@@ -210,7 +199,7 @@ public abstract class AbstractImportTestsAction extends AnAction {
@Override
public String getName() {
return myImported && mySettings != null ? mySettings.getName() : myFile.getNameWithoutExtension();
return myImported && myConfiguration != null ? myConfiguration.getName() : myFile.getNameWithoutExtension();
}
@Nullable
@@ -224,7 +213,7 @@ public abstract class AbstractImportTestsAction extends AnAction {
}
public RunConfiguration getInitialConfiguration() {
return mySettings != null ? mySettings.getConfiguration() : null;
return myConfiguration;
}
public Project getProject() {
@@ -66,7 +66,6 @@ public class TestResultsXmlFormatter {
public static final String ROOT_ELEM = "root";
public static final Key<RunnerAndConfigurationSettingsImpl> SETTINGS = Key.create("RUN_CONFIGURATION_SETTINGS");
private final RunConfiguration myRuntimeConfiguration;
private final ContentHandler myResultHandler;
@@ -125,19 +124,14 @@ public class TestResultsXmlFormatter {
endElement(ELEM_COUNT);
}
RunnerAndConfigurationSettingsImpl settings =
(RunnerAndConfigurationSettingsImpl)RunManagerImpl.getInstanceImpl(myRuntimeConfiguration.getProject()).getSettings(myRuntimeConfiguration);
if (settings == null && myRuntimeConfiguration instanceof UserDataHolder) {
settings = ((UserDataHolder)myRuntimeConfiguration).getUserData(SETTINGS);
}
if (settings != null) {
final Element config = new Element("config");
try {
settings.writeExternal(config);
}
catch (WriteExternalException ignore) {}
processJDomElement(config);
final Element config = new Element("config");
try {
myRuntimeConfiguration.writeExternal(config);
config.setAttribute("configId", myRuntimeConfiguration.getType().getId());
config.setAttribute("name", myRuntimeConfiguration.getName());
}
catch (WriteExternalException ignore) {}
processJDomElement(config);
CompositeFilter f = new CompositeFilter(myRuntimeConfiguration.getProject());
for (ConsoleFilterProvider eachProvider : Extensions.getExtensions(ConsoleFilterProvider.FILTER_PROVIDERS)) {