/* Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.harmony.tests.java.lang; import junit.framework.TestCase; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; public class ProcessBuilderTest extends TestCase { public void testProcessBuilderStringArray() { } public void testProcessBuilderListOfString() { try { new ProcessBuilder((List<String>) null); fail("no null pointer exception"); } catch (NullPointerException e) { } } public void testCommand() { ProcessBuilder pb = new ProcessBuilder("command"); assertEquals(1, pb.command().size()); assertEquals("command", pb.command().get(0)); // Regression for HARMONY-2675 pb = new ProcessBuilder("AAA"); pb.command("BBB", "CCC"); List<String> list = pb.command(); list.add("DDD"); String[] command = new String[3]; list.toArray(command); assertTrue(Arrays.equals(new String[] { "BBB", "CCC", "DDD" }, command)); } public void testCommandStringArray() { ProcessBuilder pb = new ProcessBuilder("command"); ProcessBuilder pbReturn = pb.command("cmd"); assertSame(pb, pbReturn); assertEquals(1, pb.command().size()); assertEquals("cmd", pb.command().get(0)); } public void testCommandListOfString() { ProcessBuilder pb = new ProcessBuilder("command"); List<String> newCmd = new ArrayList<String>(); newCmd.add("cmd"); ProcessBuilder pbReturn = pb.command(newCmd); assertSame(pb, pbReturn); assertEquals(1, pb.command().size()); assertEquals("cmd", pb.command().get(0)); newCmd.add("arg"); assertEquals(2, pb.command().size()); assertEquals("cmd", pb.command().get(0)); assertEquals("arg", pb.command().get(1)); } public void testDirectory() { ProcessBuilder pb = new ProcessBuilder("command"); assertNull(pb.directory()); } public void testDirectoryFile() { ProcessBuilder pb = new ProcessBuilder("command"); File dir = new File(System.getProperty("java.io.tmpdir")); ProcessBuilder pbReturn = pb.directory(dir); assertSame(pb, pbReturn); assertEquals(dir, pb.directory()); pbReturn = pb.directory(null); assertSame(pb, pbReturn); assertNull(pb.directory()); } public void testEnvironment() { ProcessBuilder pb = new ProcessBuilder("command"); Map<String, String> env = pb.environment(); assertEquals(System.getenv(), env); env.clear(); env = pb.environment(); assertTrue(env.isEmpty()); try { env.put(null, ""); fail("should throw NPE."); } catch (NullPointerException e) { // expected; } try { env.put("", null); fail("should throw NPE."); } catch (NullPointerException e) { // expected; } try { env.get(null); fail("should throw NPE."); } catch (NullPointerException e) { // expected; } try { assertNull(env.get(new Object())); // Android's get doesn't throw (because it's just a regular HashMap). // fail("should throw ClassCastException."); } catch (ClassCastException thrownByRi) { } } public void testRedirectErrorStream() { ProcessBuilder pb = new ProcessBuilder("command"); assertFalse(pb.redirectErrorStream()); } public void testRedirectErrorStreamBoolean() { ProcessBuilder pb = new ProcessBuilder("command"); ProcessBuilder pbReturn = pb.redirectErrorStream(true); assertSame(pb, pbReturn); assertTrue(pb.redirectErrorStream()); } /** * @throws IOException * {@link java.lang.ProcessBuilder#start()} */ @SuppressWarnings("nls") public void testStart() throws IOException { ProcessBuilder pb = new ProcessBuilder("ls", "-al"); // Call the test target Process process = pb.start(); InputStream in = process.getInputStream(); InputStream err = process.getErrorStream(); while (true) { try { process.waitFor(); break; } catch (InterruptedException e) { // Ignored } } byte[] buf = new byte[1024]; if (in.available() > 0) { assertTrue(in.read(buf) > 0); } else { assertTrue(err.read(buf) > 0); } } }