From cc3e1a155b24356ce80bacaf3947c7091e7cb95b Mon Sep 17 00:00:00 2001 From: Eldar Abusalimov Date: Thu, 13 Apr 2017 23:24:33 +0300 Subject: [PATCH] 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. --- .../execution/GeneralCommandLineTest.java | 30 +++++++----- .../RunnerMediatedCommandLineTest.java | 49 +++++++++++++++++++ 2 files changed, 66 insertions(+), 13 deletions(-) create mode 100644 platform/platform-tests/testSrc/com/intellij/execution/process/RunnerMediatedCommandLineTest.java diff --git a/platform/platform-tests/testSrc/com/intellij/execution/GeneralCommandLineTest.java b/platform/platform-tests/testSrc/com/intellij/execution/GeneralCommandLineTest.java index 6e2d53794443..8d6f264a1b78 100644 --- a/platform/platform-tests/testSrc/com/intellij/execution/GeneralCommandLineTest.java +++ b/platform/platform-tests/testSrc/com/intellij/execution/GeneralCommandLineTest.java @@ -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 pair) throws IOException, ExecutionException { + private String execHelper(Pair 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 command, - Map testEnv, - boolean passParentEnv) throws ExecutionException, IOException { + private void checkEnvPassing(Pair command, + Map testEnv, + boolean passParentEnv) throws ExecutionException, IOException { checkEnvPassing(command, testEnv, testEnv, passParentEnv); } - private static void checkEnvPassing(Pair command, - Map testEnv, - Map expectedOutputEnv, - boolean passParentEnv) throws ExecutionException, IOException { + private void checkEnvPassing(Pair command, + Map testEnv, + Map expectedOutputEnv, + boolean passParentEnv) throws ExecutionException, IOException { command.first.withEnvironment(testEnv); command.first.withParentEnvironmentType(passParentEnv ? ParentEnvironmentType.SYSTEM : ParentEnvironmentType.NONE); String output = execHelper(command); diff --git a/platform/platform-tests/testSrc/com/intellij/execution/process/RunnerMediatedCommandLineTest.java b/platform/platform-tests/testSrc/com/intellij/execution/process/RunnerMediatedCommandLineTest.java new file mode 100644 index 000000000000..439e378646db --- /dev/null +++ b/platform/platform-tests/testSrc/com/intellij/execution/process/RunnerMediatedCommandLineTest.java @@ -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); + } +}