package net.jsunit.action;
import net.jsunit.TestRunManager;
import net.jsunit.XmlRenderable;
import net.jsunit.configuration.ServerConfiguration;
import net.jsunit.model.Browser;
import java.util.List;
public class TestRunnerAction
extends JsUnitBrowserTestRunnerAction
implements RequestSourceAware, TestPageURLAware, BrowserSelectionAware, InvalidTestRunAttemptAware {
private TestRunManager manager;
private String url;
private String remoteIpAddress;
private String remoteHost;
private String errorMessage;
private List<Browser> selectedBrowsers;
private String referrer;
public String execute() throws Exception {
if (errorMessage == null) {
long startTime = System.currentTimeMillis();
logger.info(requestReceivedMessage());
//noinspection SynchronizeOnNonFinalField
synchronized (runner) {
manager = new TestRunManager(runner, url);
if (selectedBrowsers != null)
manager.limitToBrowsers(selectedBrowsers);
manager.runTests();
}
logger.info("Done running tests (" + ((System.currentTimeMillis() - startTime) / 1000d) + ") seconds)");
}
return SUCCESS;
}
private String requestReceivedMessage() {
return new RequestReceivedMessage(remoteHost, remoteIpAddress, url).generateMessage();
}
public XmlRenderable getXmlRenderable() {
if (errorMessage != null)
return new ErrorXmlRenderable(errorMessage);
return manager.getTestRunResult();
}
public void setUrl(String url) {
this.url = url.trim();
}
public ServerConfiguration getConfiguration() {
return runner.getConfiguration();
}
public void setRequestIPAddress(String ipAddress) {
remoteIpAddress = ipAddress;
}
public void setRequestHost(String host) {
remoteHost = host;
}
public void setSelectedBrowsers(List<Browser> browsers) {
this.selectedBrowsers = browsers;
}
public String getUrl() {
return url;
}
public String getRequestIpAddress() {
return this.remoteIpAddress;
}
public String getReferrer() {
return referrer;
}
public void setReferrer(String referrer) {
this.referrer = referrer;
}
public Browser getBrowserById(int id) {
return getConfiguration().getBrowserById(id);
}
public List<Browser> getAllBrowsers() {
return getConfiguration().getAllBrowsers();
}
public void setErrorMessage(String errorMessage) {
this.errorMessage = errorMessage;
}
}