< prev index next >

test/jdk/tools/jpackage/helpers/jdk/jpackage/test/Executor.java

Print this page

        

*** 29,39 **** --- 29,42 ---- import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; + import java.util.regex.Matcher; + import java.util.regex.Pattern; import java.util.spi.ToolProvider; + import java.util.stream.Collectors; import java.util.stream.Stream; public final class Executor extends CommandArguments<Executor> { public Executor() {
*** 73,90 **** public Executor saveFirstLineOfOutput() { saveOutputType = SaveOutputType.FIRST_LINE; return this; } public class Result { Result(int exitCode) { this.exitCode = exitCode; } public String getFirstLineOfOutput() { ! return output.get(0).trim(); } public List<String> getOutput() { return output; } --- 76,98 ---- public Executor saveFirstLineOfOutput() { saveOutputType = SaveOutputType.FIRST_LINE; return this; } + public Executor dumpOtput() { + saveOutputType = SaveOutputType.DUMP; + return this; + } + public class Result { Result(int exitCode) { this.exitCode = exitCode; } public String getFirstLineOfOutput() { ! return output.get(0); } public List<String> getOutput() { return output; }
*** 124,146 **** } throw new IllegalStateException("No command to execute"); } private Result runExecutable() throws IOException, InterruptedException { List<String> command = new ArrayList<>(); command.add(executable); command.addAll(args); Path outputFile = null; ProcessBuilder builder = new ProcessBuilder(command); StringBuilder sb = new StringBuilder(getPrintableCommandLine()); if (saveOutputType != SaveOutputType.NONE) { - outputFile = Test.createTempFile(".out"); builder.redirectErrorStream(true); builder.redirectOutput(outputFile.toFile()); sb.append(String.format("; redirect output to [%s]", outputFile)); } if (directory != null) { builder.directory(directory.toFile()); sb.append(String.format("; in directory [%s]", directory)); } --- 132,168 ---- } throw new IllegalStateException("No command to execute"); } + public String executeAndGetFirstLineOfOutput() { + return saveFirstLineOfOutput().execute().assertExitCodeIsZero().getFirstLineOfOutput(); + } + + public List<String> executeAndGetOutput() { + return saveOutput().execute().assertExitCodeIsZero().getOutput(); + } + private Result runExecutable() throws IOException, InterruptedException { List<String> command = new ArrayList<>(); command.add(executable); command.addAll(args); Path outputFile = null; ProcessBuilder builder = new ProcessBuilder(command); StringBuilder sb = new StringBuilder(getPrintableCommandLine()); if (saveOutputType != SaveOutputType.NONE) { builder.redirectErrorStream(true); + + if (saveOutputType == SaveOutputType.DUMP) { + builder.inheritIO(); + sb.append("; redirect output to stdout"); + } else { + outputFile = Test.createTempFile(".out"); builder.redirectOutput(outputFile.toFile()); sb.append(String.format("; redirect output to [%s]", outputFile)); } + } if (directory != null) { builder.directory(directory.toFile()); sb.append(String.format("; in directory [%s]", directory)); }
*** 148,159 **** Test.trace("Execute " + sb.toString() + "..."); Process process = builder.start(); Result reply = new Result(process.waitFor()); Test.trace("Done. Exit code: " + reply.exitCode); if (saveOutputType == SaveOutputType.FIRST_LINE) { reply.output = Arrays.asList( ! Files.readAllLines(outputFile).stream().findFirst().get()); } else if (saveOutputType == SaveOutputType.FULL) { reply.output = Collections.unmodifiableList(Files.readAllLines( outputFile)); } return reply; --- 170,183 ---- Test.trace("Execute " + sb.toString() + "..."); Process process = builder.start(); Result reply = new Result(process.waitFor()); Test.trace("Done. Exit code: " + reply.exitCode); if (saveOutputType == SaveOutputType.FIRST_LINE) { + // If the command produced no ouput, save null in 'result.output' list. reply.output = Arrays.asList( ! Files.readAllLines(outputFile).stream().findFirst().orElse( ! null)); } else if (saveOutputType == SaveOutputType.FULL) { reply.output = Collections.unmodifiableList(Files.readAllLines( outputFile)); } return reply;
*** 182,209 **** } return reply; } public String getPrintableCommandLine() { ! String argsStr = String.format("; args(%d)=%s", args.size(), ! Arrays.toString(args.toArray())); ! if (toolProvider == null && executable == null) { ! return "[null]; " + argsStr; ! } ! ! if (toolProvider != null) { ! return String.format("tool provider=[%s]; ", toolProvider.name()) + argsStr; ! } ! ! return String.format("[%s]; ", executable) + argsStr; } private ToolProvider toolProvider; private String executable; private SaveOutputType saveOutputType; private Path directory; private static enum SaveOutputType { ! NONE, FULL, FIRST_LINE }; } --- 206,243 ---- } return reply; } public String getPrintableCommandLine() { ! final String exec; ! String format = "[%s](%d)"; if (toolProvider == null && executable == null) { ! exec = "<null>"; ! } else if (toolProvider != null) { ! format = "tool provider " + format; ! exec = toolProvider.name(); ! } else { ! exec = executable; ! } ! ! return String.format(format, printCommandLine(exec, args), ! args.size() + 1); ! } ! ! private static String printCommandLine(String executable, List<String> args) { ! // Want command line printed in a way it can be easily copy/pasted ! // to be executed manally ! Pattern regex = Pattern.compile("\\s"); ! return Stream.concat(Stream.of(executable), args.stream()).map( ! v -> (v.isEmpty() || regex.matcher(v).find()) ? "\"" + v + "\"" : v).collect( ! Collectors.joining(" ")); } private ToolProvider toolProvider; private String executable; private SaveOutputType saveOutputType; private Path directory; private static enum SaveOutputType { ! NONE, FULL, FIRST_LINE, DUMP }; }
< prev index next >