From e3fa46a9c7fe673cad97bc9c2eab81cd62367280 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Thu, 18 Aug 2016 01:47:23 +0200 Subject: [PATCH 1/2] Added Java Process unit test --- .../java/shell/JavaProcessUnitTest.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java diff --git a/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java b/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java new file mode 100644 index 0000000000..b3ef686d0a --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java @@ -0,0 +1,67 @@ +package org.baeldung.java.shell; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.*; +import java.util.concurrent.Executors; +import java.util.function.Consumer; + +public class JavaProcessUnitTest { + private static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase().startsWith("windows"); + + private static class StreamGobbler implements Runnable { + private InputStream inputStream; + private Consumer consumer; + + public StreamGobbler(InputStream inputStream, Consumer consumer) { + this.inputStream = inputStream; + this.consumer = consumer; + } + + @Override + public void run() { + new BufferedReader(new InputStreamReader(inputStream)).lines().forEach(consumer); + } + } + + private Consumer consumer = new Consumer() { + @Override + public void accept(String s) { + Assert.assertNotNull(s); + } + }; + + private String homeDirectory = System.getProperty("user.home"); + + @Test + public void givenProcess_whenCreatingViaRuntime_shouldSucceed() throws Exception { + Process process; + if (IS_WINDOWS) { + process = Runtime.getRuntime().exec(String.format("cmd.exe /c dir %s", homeDirectory)); + } else { + process = Runtime.getRuntime().exec(String.format("sh -c ls %s", homeDirectory)); + } + StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(), consumer); + Executors.newSingleThreadExecutor().submit(streamGobbler); + int exitCode = process.waitFor(); + Assert.assertEquals(0, exitCode); + } + + @Test + public void givenProcess_whenCreatingViaProcessBuilder_shouldSucceed() throws Exception { + ProcessBuilder builder = new ProcessBuilder(); + if (IS_WINDOWS) { + builder.command("cmd.exe", "/c", "dir"); + builder.inheritIO(); + } else { + builder.command("sh", "-c", "ls"); + } + builder.directory(new File(homeDirectory)); + Process process = builder.start(); + StreamGobbler streamGobbler = new StreamGobbler(process.getInputStream(), consumer); + Executors.newSingleThreadExecutor().submit(streamGobbler); + int exitCode = process.waitFor(); + Assert.assertEquals(0, exitCode); + } +} From 2745a8f6a028eeb92b11b5a473b1b3017d21b911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Thu, 18 Aug 2016 04:21:06 +0200 Subject: [PATCH 2/2] Removed a line about inherited I/O with ProcessBuilder. --- .../test/java/org/baeldung/java/shell/JavaProcessUnitTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java b/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java index b3ef686d0a..2c330c513d 100644 --- a/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java +++ b/core-java/src/test/java/org/baeldung/java/shell/JavaProcessUnitTest.java @@ -53,7 +53,6 @@ public class JavaProcessUnitTest { ProcessBuilder builder = new ProcessBuilder(); if (IS_WINDOWS) { builder.command("cmd.exe", "/c", "dir"); - builder.inheritIO(); } else { builder.command("sh", "-c", "ls"); }