package com.google.jstestdriver.idea.execution.settings;
import com.google.common.collect.ImmutableList;
import com.intellij.ide.browsers.BrowserFamily;
import com.intellij.ide.browsers.WebBrowser;
import com.intellij.ide.browsers.WebBrowserManager;
import net.jcip.annotations.Immutable;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@Immutable
public class JstdRunSettings {
private final TestType myTestType;
private final String myConfigFile;
private final String myDirectory;
private final String myJSFilePath;
private final ServerType myServerType;
private final String myServerAddress;
private final String myTestCaseName;
private final String myTestMethodName;
private final ImmutableList<String> myFilesExcludedFromCoverage;
private final WebBrowser myPreferredDebugBrowser;
public JstdRunSettings(
@NotNull TestType testType,
@NotNull String configFile,
@NotNull String directory,
@NotNull String jsFilePath,
@NotNull String serverAddress,
@NotNull ServerType serverType,
@NotNull String testCaseName,
@NotNull String testMethodName,
@NotNull ImmutableList<String> filesExcludedFromCoverage,
@NotNull WebBrowser preferredDebugBrowser) {
myTestType = testType;
myConfigFile = configFile;
myDirectory = directory;
myJSFilePath = jsFilePath;
myServerAddress = serverAddress;
myServerType = serverType;
myTestCaseName = testCaseName;
myTestMethodName = testMethodName;
myFilesExcludedFromCoverage = filesExcludedFromCoverage;
myPreferredDebugBrowser = preferredDebugBrowser;
}
@NotNull
public TestType getTestType() {
return myTestType;
}
@NotNull
public String getConfigFile() {
return myConfigFile;
}
@NotNull
public String getDirectory() {
return myDirectory;
}
@NotNull
public String getJsFilePath() {
return myJSFilePath;
}
@NotNull
public String getServerAddress() {
return myServerAddress;
}
@NotNull
public ServerType getServerType() {
return myServerType;
}
public boolean isExternalServerType() {
return myServerType == ServerType.EXTERNAL;
}
@NotNull
public String getTestCaseName() {
return myTestCaseName;
}
@NotNull
public String getTestMethodName() {
return myTestMethodName;
}
@NotNull
public ImmutableList<String> getFilesExcludedFromCoverage() {
return myFilesExcludedFromCoverage;
}
@NotNull
public WebBrowser getPreferredDebugBrowser() {
return myPreferredDebugBrowser;
}
public static class Builder {
private TestType myTestType = TestType.CONFIG_FILE;
private String myConfigFile = "";
private String myDirectory = "";
private String myJSFilePath = "";
private String myServerAddress = "";
private ServerType myServerType = ServerType.INTERNAL;
private String myTestCaseName = "";
private String myTestMethodName = "";
private ImmutableList<String> myFilesExcludedFromCoverage = ImmutableList.of();
private WebBrowser myPreferredDebugBrowser = WebBrowserManager.getInstance().getFirstBrowser(BrowserFamily.CHROME);
public Builder() {
}
public Builder(JstdRunSettings runSettings) {
myTestType = runSettings.getTestType();
myConfigFile = runSettings.getConfigFile();
myDirectory = runSettings.getDirectory();
myJSFilePath = runSettings.getJsFilePath();
myServerAddress = runSettings.getServerAddress();
myServerType = runSettings.getServerType();
myTestCaseName = runSettings.getTestCaseName();
myTestMethodName = runSettings.getTestMethodName();
}
public Builder setTestType(@NotNull TestType testType) {
myTestType = testType;
return this;
}
public Builder setConfigFile(@NotNull String configFile) {
myConfigFile = configFile;
return this;
}
public Builder setDirectory(@NotNull String directory) {
myDirectory = directory;
return this;
}
public Builder setJSFilePath(@NotNull String jsFilePath) {
myJSFilePath = jsFilePath;
return this;
}
public Builder setServerAddress(@NotNull String serverAddress) {
myServerAddress = serverAddress;
return this;
}
public Builder setServerType(@NotNull ServerType serverType) {
myServerType = serverType;
return this;
}
public Builder setTestCaseName(String testCaseName) {
myTestCaseName = testCaseName;
return this;
}
public Builder setTestMethodName(String testMethodName) {
myTestMethodName = testMethodName;
return this;
}
public Builder setFilesExcludedFromCoverage(@NotNull List<String> filesExcludedFromCoverage) {
myFilesExcludedFromCoverage = ImmutableList.copyOf(filesExcludedFromCoverage);
return this;
}
public void setPreferredDebugBrowser(@NotNull WebBrowser preferredDebugBrowser) {
myPreferredDebugBrowser = preferredDebugBrowser;
}
@NotNull
public JstdRunSettings build() {
return new JstdRunSettings(
myTestType,
myConfigFile,
myDirectory,
myJSFilePath,
myServerAddress,
myServerType,
myTestCaseName,
myTestMethodName,
myFilesExcludedFromCoverage,
myPreferredDebugBrowser
);
}
}
}