package net.jsunit.action;
import net.jsunit.InvalidBrowserIdException;
import net.jsunit.TestRunManager;
import net.jsunit.XmlRenderable;
import net.jsunit.utility.StringUtility;
public class TestRunnerAction extends JsUnitBrowserTestRunnerAction implements RequestSourceAware {
private TestRunManager manager;
private String url;
private String remoteAddress;
private String remoteHost;
private String browserId;
private boolean badBrowserId = false;
public String execute() throws Exception {
runner.logStatus(requestReceivedMessage());
//noinspection SynchronizeOnNonFinalField
synchronized (runner) {
manager = new TestRunManager(runner, url);
if (!StringUtility.isEmpty(browserId)) {
try {
manager.limitToBrowserWithId(Integer.parseInt(browserId));
} catch (InvalidBrowserIdException e) {
badBrowserId = true;
return ERROR;
} catch (NumberFormatException e) {
badBrowserId = true;
return ERROR;
}
}
manager.runTests();
}
runner.logStatus("Done running tests");
return SUCCESS;
}
private String requestReceivedMessage() {
String message = "Received request to run tests";
if (!StringUtility.isEmpty(remoteAddress) || !StringUtility.isEmpty(remoteHost)) {
message += " from ";
if (!StringUtility.isEmpty(remoteHost)) {
message += remoteHost;
if (!StringUtility.isEmpty(remoteAddress) && !remoteAddress.equals(remoteHost))
message += " (" + remoteAddress + ")";
} else {
message += remoteAddress;
}
}
return message;
}
public XmlRenderable getXmlRenderable() {
if (badBrowserId) {
return new ErrorXmlRenderable("Invalid browser ID: " + browserId);
}
return manager.getTestRunResult();
}
public void setUrl(String url) {
this.url = url;
}
public void setRequestIPAddress(String ipAddress) {
remoteAddress = ipAddress;
}
public void setRequestHost(String host) {
remoteHost = host;
}
public void setBrowserId(String browserId) {
this.browserId = browserId;
}
}