run manager: test for toolwindow activation suppression

This commit is contained in:
Sergey Simonchik
2015-08-14 15:40:55 +03:00
parent 66a0e59ca9
commit 232d795f68
@@ -16,15 +16,21 @@
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;
@@ -36,6 +42,7 @@ import org.jmock.Expectations;
import org.jmock.Mockery;
import javax.swing.*;
import java.io.OutputStream;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -114,6 +121,26 @@ public class ModuleRunConfigurationManagerTest extends LightPlatformTestCase {
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) {
@@ -170,7 +197,7 @@ public class ModuleRunConfigurationManagerTest extends LightPlatformTestCase {
@Nullable
@Override
public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment env) throws ExecutionException {
return null;
return EmptyRunProfileState.INSTANCE;
}
}
@@ -213,4 +240,52 @@ public class ModuleRunConfigurationManagerTest extends LightPlatformTestCase {
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;
}
}
}