mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
import tests: store run configuration settings to xml so further rerun is possible
This commit is contained in:
+5
-1
@@ -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
|
||||
|
||||
+37
-4
@@ -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
|
||||
|
||||
+31
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user