package com.google.jstestdriver.browser;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import junit.framework.TestCase;
import com.google.common.collect.Lists;
import com.google.jstestdriver.ProcessFactory;
public class CommandLineBrowserRunnerTest extends TestCase {
public void testStartAndStop() throws Exception {
final String browserPath = "/foo/bar";
final String browserArgs = "--helloWorld";
final String url = "htpp://localhost:42242";
FakeProcessFactory processFactory = new FakeProcessFactory();
CommandLineBrowserRunner runner =
new CommandLineBrowserRunner(browserPath, browserArgs, processFactory, "not os x");
runner.startBrowser(url);
assertEquals(1, processFactory.processStubs.size());
assertEquals(browserPath,
processFactory.processStubs.get(0).commands[0]);
assertEquals(Lists.newArrayList(new String[]{browserPath, browserArgs, url}),
Lists.newArrayList(processFactory.processStubs.get(0).commands));
}
public void testNoArgs() throws Exception {
final String browserPath = "/foo/bar";
final String browserArgs = "";
final String url = "htpp://localhost:42242";
FakeProcessFactory processFactory = new FakeProcessFactory();
CommandLineBrowserRunner runner =
new CommandLineBrowserRunner(browserPath, browserArgs, processFactory, "not os x");
runner.startBrowser(url);
assertEquals(1, processFactory.processStubs.size());
assertEquals(browserPath,
processFactory.processStubs.get(0).commands[0]);
assertEquals(url,
processFactory.processStubs.get(0).commands[1]);
}
public void testUrlParam() throws Exception {
final String browserPath = "/foo/bar";
final String browserArgs = "--app=%s";
final String url = "htpp://localhost:42242";
FakeProcessFactory processFactory = new FakeProcessFactory();
CommandLineBrowserRunner runner =
new CommandLineBrowserRunner(browserPath, browserArgs, processFactory, "not os x");
runner.startBrowser(url);
assertEquals(1, processFactory.processStubs.size());
assertEquals(browserPath,
processFactory.processStubs.get(0).commands[0]);
assertEquals("--app=" + url,
processFactory.processStubs.get(0).commands[1]);
}
private final class FakeProcessFactory implements ProcessFactory {
public List<ProcessStub> processStubs = Lists.newLinkedList();
@SuppressWarnings("unused")
public Process start(String... commands) throws IOException {
ProcessStub processStub = new ProcessStub(commands);
processStubs.add(processStub);
return processStub;
}
}
private final static class ProcessStub extends Process {
public final String[] commands;
public ProcessStub(String[] commands) {
this.commands = commands;
}
@Override
public void destroy() {
}
@Override
public int exitValue() {
return 0;
}
@Override
public InputStream getErrorStream() {
return null;
}
@Override
public InputStream getInputStream() {
return null;
}
@Override
public OutputStream getOutputStream() {
return null;
}
@Override
public int waitFor() {
return 0;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode(commands);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ProcessStub other = (ProcessStub) obj;
if (!Arrays.equals(commands, other.commands))
return false;
return true;
}
@Override
public String toString() {
return String.format("%s(%s)", getClass().getSimpleName(), Arrays.toString(commands));
}
}
}