package com.intellij.execution.impl;
import com.intellij.ProjectTopics;
-import com.intellij.execution.ExecutionException;
-import com.intellij.execution.Executor;
-import com.intellij.execution.RunnerAndConfigurationSettings;
+import com.intellij.execution.*;
+import com.intellij.execution.configuration.EmptyRunProfileState;
import com.intellij.execution.configurations.*;
+import com.intellij.execution.executors.DefaultRunExecutor;
+import com.intellij.execution.process.ProcessHandler;
import com.intellij.execution.runners.ExecutionEnvironment;
+import com.intellij.execution.runners.ExecutionEnvironmentBuilder;
+import com.intellij.execution.runners.GenericProgramRunner;
+import com.intellij.execution.runners.RunContentBuilder;
+import com.intellij.execution.ui.RunContentDescriptor;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Disposer;
import com.intellij.testFramework.LightPlatformTestCase;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.messages.MessageBus;
import org.jmock.Mockery;
import javax.swing.*;
+import java.io.OutputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
assertSameElements("one run config should be removed", myRemovedSettings, Collections.singleton(mySettings));
}
+ public void testSuppressToolwindowActivation() throws Exception {
+ RunnerAndConfigurationSettings settings = new RunnerAndConfigurationSettingsImpl(
+ new MyRunManagerImpl(), new MyModuleBasedConfiguration("my-name", getProject(), getModule()), false
+ );
+ settings.setActivateToolWindowBeforeRun(true);
+ MockProgramRunner programRunner = new MockProgramRunner();
+ ExecutionEnvironment env = new ExecutionEnvironmentBuilder(getProject(), DefaultRunExecutor.getRunExecutorInstance())
+ .runnerAndSettings(programRunner, settings)
+ .build();
+ RunContentDescriptor descriptorToReuse = new RunContentDescriptor(null, null, new JPanel(), "name");
+ descriptorToReuse.setActivateToolWindowWhenAdded(false);
+ descriptorToReuse.setReuseToolWindowActivation(true);
+ env.setContentToReuse(descriptorToReuse);
+ env.getRunner().execute(env);
+ RunContentDescriptor lastDescriptor = programRunner.getLastDescriptor();
+ assertNotNull(lastDescriptor);
+ assertFalse(lastDescriptor.isActivateToolWindowWhenAdded());
+ Disposer.dispose(descriptorToReuse);
+ }
+
private static final class MyRunConfigurationModule extends RunConfigurationModule {
private final Module myModule;
public MyRunConfigurationModule(@NotNull final Project project, @NotNull final Module module) {
@Nullable
@Override
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException {
- return null;
+ return EmptyRunProfileState.INSTANCE;
}
}
return new ConfigurationFactory[0];
}
}
+
+ private static class MockProgramRunner extends GenericProgramRunner {
+ private RunContentDescriptor myLastDescriptor;
+
+ @NotNull
+ @Override
+ public String getRunnerId() {
+ return "MockProgramRunner";
+ }
+
+ @Override
+ protected RunContentDescriptor doExecute(@NotNull RunProfileState state, @NotNull ExecutionEnvironment env) throws ExecutionException {
+ ExecutionResult executionResult = new DefaultExecutionResult(null, new NopProcessHandler());
+ myLastDescriptor = new RunContentBuilder(executionResult, env).showRunContent(env.getContentToReuse());
+ return myLastDescriptor;
+ }
+
+ @Override
+ public boolean canRun(@NotNull String executorId, @NotNull RunProfile profile) {
+ return true;
+ }
+
+ public RunContentDescriptor getLastDescriptor() {
+ return myLastDescriptor;
+ }
+ }
+
+ public static class NopProcessHandler extends ProcessHandler {
+ @Override
+ protected void destroyProcessImpl() {
+ notifyProcessTerminated(0);
+ }
+
+ @Override
+ protected void detachProcessImpl() {
+ }
+
+ @Override
+ public boolean detachIsDefault() {
+ return false;
+ }
+
+ @Nullable
+ @Override
+ public OutputStream getProcessInput() {
+ return null;
+ }
+ }
}