import tests: store run configuration settings to xml so further rerun is possible

This commit is contained in:
Anna Kozlova
2015-06-23 12:05:10 +03:00
parent 570743049a
commit fbdf220601
3 changed files with 73 additions and 5 deletions
@@ -120,7 +120,11 @@ public class UnknownRunConfiguration implements RunConfiguration {
@Override
public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException {
return null;
String factoryName = "";
if (myStoredElement != null) {
factoryName = myStoredElement.getAttributeValue("type");
}
throw new ExecutionException("Unknown run configuration type" + (factoryName.isEmpty() ? "" : " " + factoryName));
}
@Override
@@ -17,8 +17,11 @@ package com.intellij.execution.testframework.sm.runner.ui.actions;
import com.intellij.execution.ExecutionException;
import com.intellij.execution.Executor;
import com.intellij.execution.RunManager;
import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.configurations.RunProfileState;
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.testframework.history.ImportedTestRunnableState;
@@ -33,12 +36,18 @@ import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
import com.intellij.openapi.fileTypes.StdFileTypes;
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.vfs.VfsUtilCore;
import com.intellij.openapi.vfs.VirtualFile;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.IOException;
public class ImportTestsAction extends AnAction {
private static final Logger LOG = Logger.getInstance("#" + ImportTestsAction.class.getName());
@@ -63,7 +72,7 @@ public class ImportTestsAction extends AnAction {
final VirtualFile file = FileChooser.chooseFile(xmlDescriptor, project, null);
if (file != null) {
try {
ExecutionEnvironmentBuilder.create(project, myProperties.getExecutor(), new ImportRunProfile(file)).buildAndExecute();
ExecutionEnvironmentBuilder.create(project, myProperties.getExecutor(), new ImportRunProfile(file, project)).buildAndExecute();
}
catch (ExecutionException e1) {
Messages.showErrorDialog(project, e1.getMessage(), "Import Failed");
@@ -73,20 +82,44 @@ public class ImportTestsAction extends AnAction {
private class ImportRunProfile implements RunProfile {
private final VirtualFile myFile;
private RunnerAndConfigurationSettingsImpl mySettings;
private boolean myImported;
public ImportRunProfile(VirtualFile file) {
public ImportRunProfile(VirtualFile file, Project project) {
myFile = file;
try {
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);
}
catch (InvalidDataException e) {
LOG.error(e);
}
}
}
catch (Exception ignore) {
}
}
@Nullable
@Override
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) throws ExecutionException {
return new ImportedTestRunnableState(myProperties, VfsUtilCore.virtualToIoFile(myFile));
if (!myImported) {
myImported = true;
return new ImportedTestRunnableState(myProperties, VfsUtilCore.virtualToIoFile(myFile));
}
if (mySettings != null) {
return mySettings.getConfiguration().getState(executor, environment);
}
throw new ExecutionException("Unable to run the configuration");
}
@Override
public String getName() {
return myFile.getNameWithoutExtension();
return myImported && mySettings != null ? mySettings.getName() : myFile.getNameWithoutExtension();
}
@Nullable
@@ -16,8 +16,11 @@
package com.intellij.execution.testframework.export;
import com.intellij.execution.ExecutionBundle;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.filters.*;
import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.execution.testframework.Printable;
import com.intellij.execution.testframework.Printer;
@@ -25,8 +28,12 @@ import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.openapi.util.text.StringUtil;
import org.jdom.Attribute;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -108,6 +115,17 @@ public class TestResultsXmlFormatter {
endElement(ELEM_COUNT);
}
final RunnerAndConfigurationSettingsImpl settings =
(RunnerAndConfigurationSettingsImpl)RunManagerImpl.getInstanceImpl(myRuntimeConfiguration.getProject()).getSettings(myRuntimeConfiguration);
if (settings != null) {
final Element config = new Element("config");
try {
settings.writeExternal(config);
}
catch (WriteExternalException ignore) {}
processJDomElement(config);
}
CompositeFilter f = new CompositeFilter(myRuntimeConfiguration.getProject());
for (ConsoleFilterProvider eachProvider : Extensions.getExtensions(ConsoleFilterProvider.FILTER_PROVIDERS)) {
Filter[] filters = eachProvider.getDefaultFilters(myRuntimeConfiguration.getProject());
@@ -129,6 +147,19 @@ public class TestResultsXmlFormatter {
myResultHandler.endDocument();
}
private void processJDomElement(Element config) throws SAXException {
final String name = config.getName();
final LinkedHashMap<String, String> attributes = new LinkedHashMap<String, String>();
for (Attribute attribute : config.getAttributes()) {
attributes.put(attribute.getName(), attribute.getValue());
}
startElement(name, attributes);
for (Element child : config.getChildren()) {
processJDomElement(child);
}
endElement(name);
}
private static void increment(Map<String, Integer> counts, String status) {
Integer count = counts.get(status);
counts.put(status, count != null ? count + 1 : 1);