diff --git a/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java b/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java index aa2082e8ed84..926c284e205b 100644 --- a/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java +++ b/platform/lang-api/src/com/intellij/execution/configurations/UnknownRunConfiguration.java @@ -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 diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/actions/ImportTestsAction.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/actions/ImportTestsAction.java index cc78c104526a..c13ec45e0d7d 100644 --- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/actions/ImportTestsAction.java +++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/ui/actions/ImportTestsAction.java @@ -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 diff --git a/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java b/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java index 9893e299807a..cedadab94e15 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java @@ -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 attributes = new LinkedHashMap(); + 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 counts, String status) { Integer count = counts.get(status); counts.put(status, count != null ? count + 1 : 1);