package net.jsunit;
import junit.framework.TestCase;
import net.jsunit.configuration.ConfigurationException;
import net.jsunit.configuration.DummyConfigurationSource;
import net.jsunit.configuration.ServerConfiguration;
import net.jsunit.model.Browser;
import net.jsunit.model.BrowserLaunchSpecification;
import net.jsunit.model.BrowserResult;
import net.jsunit.model.DummyBrowserResult;
public class JsUnitServerTest extends TestCase {
private JsUnitServer server;
public void setUp() throws Exception {
super.setUp();
server = new JsUnitServer(new ServerConfiguration(new DummyConfigurationSource()), new MockBrowserResultRepository());
}
public void testStartTestRun() throws Exception {
server.setProcessStarter(new MockProcessStarter());
MockTestRunListener listener = new MockTestRunListener();
server.addTestRunListener(listener);
Thread thread = new Thread() {
public void run() {
try {
server.startTestRun();
} catch (Exception e) {
fail(e.toString());
}
}
};
thread.start();
Thread.sleep(500);
assertTrue(thread.isAlive());
listener.isReady = true;
thread.join();
}
public void testLaunchingBrowser() {
MockProcessStarter starter = new MockProcessStarter();
server.setProcessStarter(starter);
MockTestRunListener listener = new MockTestRunListener();
server.addTestRunListener(listener);
server.launchBrowserTestRun(new BrowserLaunchSpecification(new Browser(DummyConfigurationSource.BROWSER_FILE_NAME, 0)));
assertTrue(listener.browserTestRunStartedCalled);
assertEquals(2, starter.commandPassed.length);
assertEquals("iexplore.exe", starter.commandPassed[0]);
assertEquals(DummyConfigurationSource.DUMMY_URL + "&browserId=0", starter.commandPassed[1]);
assertFalse(listener.testRunFinishedCalled);
server.accept(new DummyBrowserResult(true, 0, 0));
assertTrue(listener.browserTestRunFinishedCalled);
}
public void testLaunchingBrowserCrashes() throws InterruptedException {
BlowingUpProcessStarter starter = new BlowingUpProcessStarter();
server.setProcessStarter(starter);
MockTestRunListener listener = new MockTestRunListener();
server.addTestRunListener(listener);
Browser browser = new Browser(DummyConfigurationSource.BROWSER_FILE_NAME, 0);
server.launchBrowserTestRun(new BrowserLaunchSpecification(browser));
assertTrue(listener.browserTestRunStartedCalled);
assertTrue(listener.browserTestRunFinishedCalled);
assertTrue(listener.result.failedToLaunch());
assertFalse(server.isWaitingForBrowser(browser));
assertEquals(new Browser("iexplore.exe", 0), listener.browser);
assertEquals("iexplore.exe", listener.result.getBrowser().getStartCommand());
assertSame(listener.result, server.lastResult());
server.setProcessStarter(new MockProcessStarter());
listener.reset();
browser = new Browser("mybrowser2.exe", 1);
server.launchBrowserTestRun(new BrowserLaunchSpecification(browser));
assertTrue(server.isWaitingForBrowser(browser));
assertTrue(listener.browserTestRunStartedCalled);
assertFalse(listener.browserTestRunFinishedCalled);
assertEquals(browser, listener.browser);
}
public void testStartEnd() {
server.setProcessStarter(new MockProcessStarter());
MockTestRunListener listener = new MockTestRunListener();
listener.isReady = true;
server.addTestRunListener(listener);
server.startTestRun();
assertTrue(listener.testRunStartedCalled);
server.finishTestRun();
assertTrue(listener.testRunFinishedCalled);
}
public void testAcceptResult() {
server.setProcessStarter(new MockProcessStarter());
Browser browser = new Browser("mybrowser.exe", 0);
server.launchBrowserTestRun(new BrowserLaunchSpecification(browser));
BrowserResult result = new BrowserResult();
result.setBrowser(browser);
server.accept(result);
assertEquals("mybrowser.exe", result.getBrowser().getStartCommand());
}
public void testOverrideUrl() {
MockProcessStarter starter = new MockProcessStarter();
server.setProcessStarter(starter);
MockTestRunListener listener = new MockTestRunListener();
server.addTestRunListener(listener);
String overrideUrl = "http://my.example.com:8080?submitResults=true&autoRun=true&browserId=0";
server.launchBrowserTestRun(new BrowserLaunchSpecification(new Browser("mybrowser.exe", 0), overrideUrl));
assertEquals(2, starter.commandPassed.length);
assertEquals("mybrowser.exe", starter.commandPassed[0]);
assertEquals(overrideUrl, starter.commandPassed[1]);
}
public void testAddingSubmitResultsAndAutoRunParameters() throws Exception {
MockProcessStarter starter = new MockProcessStarter();
server.setProcessStarter(starter);
MockTestRunListener listener = new MockTestRunListener();
server.addTestRunListener(listener);
String overrideUrlWithoutSubmitResults = "http://my.example.com:8080?param=value";
server.launchBrowserTestRun(new BrowserLaunchSpecification(new Browser("mybrowser.exe", 0), overrideUrlWithoutSubmitResults));
assertEquals(2, starter.commandPassed.length);
assertEquals("mybrowser.exe", starter.commandPassed[0]);
assertEquals(
overrideUrlWithoutSubmitResults + "&autoRun=true&browserId=0&submitResults=localhost:" + DummyConfigurationSource.PORT + "/jsunit/acceptor",
starter.commandPassed[1]
);
}
public void testNoURLSpecified() throws Exception {
server = new JsUnitServer(new ServerConfiguration(new DummyConfigurationSource() {
public String url() {
return "";
}
}), new MockBrowserResultRepository());
MockProcessStarter starter = new MockProcessStarter();
server.setProcessStarter(starter);
server.launchBrowserTestRun(new BrowserLaunchSpecification(new Browser("mybrowser.exe", 0)));
assertFalse(server.lastResult().wasSuccessful());
assertTrue(server.lastResult().getServerSideExceptionStackTrace().indexOf(NoUrlSpecifiedException.class.getName()) != -1);
}
public void testInvalidConfiguration() {
try {
server = new JsUnitServer(new ServerConfiguration(new InvalidConfigurationSource()));
fail();
} catch (ConfigurationException e) {
}
}
static class InvalidConfigurationSource extends DummyConfigurationSource {
public String url() {
return "invalid url";
}
}
}