IDEA-171368: execution: (test) Add RunnerMediatedCommandLineTest

This runs the common GeneralCommandLine test suite with a command line
being wrapped with the `runnerw.exe` mediator.

Note that arguments passing is actually broken now, these tests just
reveal that, so failures are expected.
This commit is contained in:
Eldar Abusalimov
2017-04-13 23:42:25 +03:00
parent 990a4127ae
commit cc3e1a155b
2 changed files with 66 additions and 13 deletions
@@ -138,6 +138,11 @@ public class GeneralCommandLineTest {
return new GeneralCommandLine(command);
}
@NotNull
protected GeneralCommandLine postProcessCommandLine(@NotNull GeneralCommandLine commandLine) {
return commandLine;
}
protected void assumeCanTestWindowsShell() {
assumeTrue("Windows-only test", SystemInfo.isWindows);
}
@@ -423,16 +428,15 @@ public class GeneralCommandLineTest {
checkEnvPassing(command, env, expected, false);
}
private static String execAndGetOutput(GeneralCommandLine commandLine) throws ExecutionException {
ProcessOutput output = ExecUtil.execAndGetOutput(commandLine);
@NotNull
private String execAndGetOutput(@NotNull GeneralCommandLine commandLine) throws ExecutionException {
ProcessOutput output = ExecUtil.execAndGetOutput(postProcessCommandLine(commandLine));
int ec = output.getExitCode();
if (ec != 0) {
if (ec != 0 || !output.getStderr().isEmpty()) {
fail("Command:\n" + commandLine.getPreparedCommandLine() +
"\nStdOut:\n" + output.getStdout() +
"\nStdErr:\n" + output.getStderr());
}
assertTrue(output.getStderr(), output.getStderr().isEmpty());
return output.getStdout();
}
@@ -476,7 +480,7 @@ public class GeneralCommandLineTest {
return pair(commandLine, out);
}
private static String execHelper(Pair<GeneralCommandLine, File> pair) throws IOException, ExecutionException {
private String execHelper(Pair<GeneralCommandLine, File> pair) throws IOException, ExecutionException {
try {
execAndGetOutput(pair.first);
return FileUtil.loadFile(pair.second, CommandTestHelper.ENC);
@@ -490,16 +494,16 @@ public class GeneralCommandLineTest {
assertEquals(StringUtil.join(expected, "\n") + "\n", StringUtil.convertLineSeparators(output));
}
private static void checkEnvPassing(Pair<GeneralCommandLine, File> command,
Map<String, String> testEnv,
boolean passParentEnv) throws ExecutionException, IOException {
private void checkEnvPassing(Pair<GeneralCommandLine, File> command,
Map<String, String> testEnv,
boolean passParentEnv) throws ExecutionException, IOException {
checkEnvPassing(command, testEnv, testEnv, passParentEnv);
}
private static void checkEnvPassing(Pair<GeneralCommandLine, File> command,
Map<String, String> testEnv,
Map<String, String> expectedOutputEnv,
boolean passParentEnv) throws ExecutionException, IOException {
private void checkEnvPassing(Pair<GeneralCommandLine, File> command,
Map<String, String> testEnv,
Map<String, String> expectedOutputEnv,
boolean passParentEnv) throws ExecutionException, IOException {
command.first.withEnvironment(testEnv);
command.first.withParentEnvironmentType(passParentEnv ? ParentEnvironmentType.SYSTEM : ParentEnvironmentType.NONE);
String output = execHelper(command);
@@ -0,0 +1,49 @@
/*
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.execution.process;
import com.intellij.execution.GeneralCommandLineTest;
import com.intellij.execution.configurations.GeneralCommandLine;
import com.intellij.openapi.util.SystemInfo;
import org.jetbrains.annotations.NotNull;
import static org.junit.Assume.assumeTrue;
public class RunnerMediatedCommandLineTest extends GeneralCommandLineTest {
@Override
protected GeneralCommandLine createCommandLine(String... command) {
assumeTrue(SystemInfo.isWindows);
return super.createCommandLine(command);
}
@NotNull
@Override
protected GeneralCommandLine postProcessCommandLine(@NotNull GeneralCommandLine commandLine) {
boolean injected = RunnerMediator.injectRunnerCommand(super.postProcessCommandLine(commandLine));
assumeTrue("runner mediator not found", injected);
return commandLine;
}
@Override
protected void assumeCanTestWindowsShell() {
assumeTrue(false);
}
@Override
public void printCommandLine() {
assumeTrue(false);
}
}