/*
* Copyright 2009 Google Inc.
*
* Licensed 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 com.google.jstestdriver;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
import com.google.common.collect.Sets;
import com.google.jstestdriver.browser.BrowserRunner;
import com.google.jstestdriver.browser.CommandLineBrowserRunner;
import com.google.jstestdriver.runner.RunnerMode;
/**
* FlagsParser for the JsTestDriver.
* @author jeremiele@google.com (Jeremie Lenfant-Engelmann)
*/
public class FlagsImpl implements Flags {
private Integer port = -1;
private String server;
private String testOutput = "";
private Set<BrowserRunner> browser = Sets.newHashSet();
private boolean reset;
private long browserTimeout = SlaveBrowser.TIMEOUT;
private String config = "jsTestDriver.conf";
private List<String> tests = new ArrayList<String>();
private boolean displayHelp = false;
private boolean verbose = false;
private boolean captureConsole = false;
private boolean preloadFiles = false;
private List<String> dryRunFor = new ArrayList<String>();
@Argument
private List<String> arguments = new ArrayList<String>();
private RunnerMode runnerMode = RunnerMode.QUIET;
private HashSet<String> requiredBrowsers;
@Option(name="--port", usage="The port on which to start the JsTestDriver server")
public void setPort(Integer port) {
this.port = port;
}
public Integer getPort() {
return port;
}
@Option(name="--server", usage="The server to which to send the command")
public void setServer(String server) {
this.server = server;
}
public String getServer() {
return server;
}
public List<String> getArguments() {
return arguments;
}
@Option(name="--testOutput", usage="A directory to which serialize the results of the tests as" +
" XML")
public void setTestOutput(String testOutput) {
this.testOutput = testOutput;
}
public String getTestOutput() {
return testOutput;
}
@Option(name="--browser", usage="The path to the browser executable")
public void setBrowser(List<String> browsers) {
for (String browser : browsers) {
this.browser.add(
new CommandLineBrowserRunner(browser, new SimpleProcessFactory()));
}
}
public Set<BrowserRunner> getBrowser() {
return browser;
}
@Option(name="--reset", usage="Resets the runner")
public void setReset(boolean reset) {
this.reset = reset;
}
public boolean getReset() {
return reset;
}
@Option(name="--config", usage="Loads the configuration file")
public void setConfig(String config) {
this.config = config;
}
public String getConfig() {
return config;
}
@Option(name="--tests",
usage="Run the tests specified in the form testCase.testName")
public void setTests(List<String> tests) {
this.tests = tests;
}
public List<String> getTests() {
return tests;
}
@Option(name="--help", usage="Help")
public void setDisplayHelp(boolean displayHelp) {
this.displayHelp = displayHelp;
}
public boolean getDisplayHelp() {
return displayHelp;
}
@Option(name="--verbose", usage="Displays more information during a run")
public void setVerbose(boolean verbose) {
this.verbose = verbose;
}
public boolean getVerbose() {
return verbose;
}
@Option(name="--captureConsole", usage="Capture the console (if possible) from the browser")
public void setCaptureConsole(boolean captureConsole) {
this.captureConsole = captureConsole;
}
public boolean getCaptureConsole() {
return captureConsole;
}
@Option(name="--preloadFiles", usage="Preload the js files")
public void setPreloadFiles(boolean preloadFiles) {
this.preloadFiles = preloadFiles;
}
public boolean getPreloadFiles() {
return preloadFiles;
}
@Option(name="--dryRunFor", usage="Outputs the number of tests that are going to be run as well" +
" as their names for a set of expressions or all to see all the tests")
public void setDryRunFor(List<String> dryRunFor) {
this.dryRunFor = dryRunFor;
}
public List<String> getDryRunFor() {
return dryRunFor;
}
public RunnerMode getRunnerMode() {
return runnerMode;
}
@Option(name="--browserTimeout", usage="The ms before a browser is declared dead.")
public void setBrowserTimeout(Long browserTimeout) {
this.browserTimeout = browserTimeout;
}
public long getBrowserTimeout() {
return browserTimeout;
}
@Option(name="--requiredBrowsers",
usage="Browsers that all actions must be run on.")
public void setRequiredBrowsers(List<String> requiredBrowsers) {
this.requiredBrowsers = Sets.newHashSet(requiredBrowsers);
}
public Set<String> getRequiredBrowsers() {
return requiredBrowsers;
}
}