/*
* Copyright 2015-2017 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.junit.platform.console.options;
import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
import static org.junit.platform.commons.meta.API.Usage.Internal;
import static org.junit.platform.engine.discovery.ClassNameFilter.STANDARD_INCLUDE_PATTERN;
import java.net.URI;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
import org.junit.platform.commons.meta.API;
/**
* @since 1.0
*/
@API(Internal)
public class CommandLineOptions {
static final Details DEFAULT_DETAILS = Details.TREE;
static final Theme DEFAULT_THEME = Theme.valueOf(Charset.defaultCharset());
private boolean displayHelp;
private boolean ansiColorOutputDisabled;
private Details details = DEFAULT_DETAILS;
private Theme theme = DEFAULT_THEME;
private boolean scanClasspath;
private List<Path> selectedClasspathEntries = emptyList();
private List<URI> selectedUris = emptyList();
private List<String> selectedFiles = emptyList();
private List<String> selectedDirectories = emptyList();
private List<String> selectedPackages = emptyList();
private List<String> selectedClasses = emptyList();
private List<String> selectedMethods = emptyList();
private List<String> selectedClasspathResources = emptyList();
private List<String> includedClassNamePatterns = singletonList(STANDARD_INCLUDE_PATTERN);
private List<String> excludedClassNamePatterns = emptyList();
private List<String> includedPackages = emptyList();
private List<String> excludedPackages = emptyList();
private List<String> includedEngines = emptyList();
private List<String> excludedEngines = emptyList();
private List<String> includedTags = emptyList();
private List<String> excludedTags = emptyList();
private List<Path> additionalClasspathEntries = emptyList();
private Path reportsDir;
public boolean isDisplayHelp() {
return this.displayHelp;
}
public void setDisplayHelp(boolean displayHelp) {
this.displayHelp = displayHelp;
}
public boolean isAnsiColorOutputDisabled() {
return this.ansiColorOutputDisabled;
}
public void setAnsiColorOutputDisabled(boolean ansiColorOutputDisabled) {
this.ansiColorOutputDisabled = ansiColorOutputDisabled;
}
public boolean isScanClasspath() {
return this.scanClasspath;
}
public void setScanClasspath(boolean scanClasspath) {
this.scanClasspath = scanClasspath;
}
public Details getDetails() {
return details;
}
public void setDetails(Details details) {
this.details = details;
}
public Theme getTheme() {
return theme;
}
public void setTheme(Theme theme) {
this.theme = theme;
}
public List<URI> getSelectedUris() {
return selectedUris;
}
public void setSelectedUris(List<URI> selectedUris) {
this.selectedUris = selectedUris;
}
public List<String> getSelectedFiles() {
return selectedFiles;
}
public void setSelectedFiles(List<String> selectedFiles) {
this.selectedFiles = selectedFiles;
}
public List<String> getSelectedDirectories() {
return selectedDirectories;
}
public void setSelectedDirectories(List<String> selectedDirectories) {
this.selectedDirectories = selectedDirectories;
}
public List<String> getSelectedPackages() {
return selectedPackages;
}
public void setSelectedPackages(List<String> selectedPackages) {
this.selectedPackages = selectedPackages;
}
public List<String> getSelectedClasses() {
return selectedClasses;
}
public void setSelectedClasses(List<String> selectedClasses) {
this.selectedClasses = selectedClasses;
}
public List<String> getSelectedMethods() {
return selectedMethods;
}
public void setSelectedMethods(List<String> selectedMethods) {
this.selectedMethods = selectedMethods;
}
public List<String> getSelectedClasspathResources() {
return selectedClasspathResources;
}
public void setSelectedClasspathResources(List<String> selectedClasspathResources) {
this.selectedClasspathResources = selectedClasspathResources;
}
public boolean hasExplicitSelectors() {
return Stream.of(selectedUris, selectedFiles, selectedDirectories, selectedPackages, selectedClasses,
selectedMethods, selectedClasspathResources).anyMatch(selectors -> !selectors.isEmpty());
}
public List<String> getIncludedClassNamePatterns() {
return includedClassNamePatterns;
}
public void setIncludedClassNamePatterns(List<String> includedClassNamePatterns) {
this.includedClassNamePatterns = includedClassNamePatterns;
}
public List<String> getExcludedClassNamePatterns() {
return excludedClassNamePatterns;
}
public void setExcludedClassNamePatterns(List<String> excludedClassNamePatterns) {
this.excludedClassNamePatterns = excludedClassNamePatterns;
}
public List<String> getIncludedPackages() {
return this.includedPackages;
}
public void setIncludedPackages(List<String> includedPackages) {
this.includedPackages = includedPackages;
}
public List<String> getExcludedPackages() {
return this.excludedPackages;
}
public void setExcludedPackages(List<String> excludedPackages) {
this.excludedPackages = excludedPackages;
}
public List<String> getIncludedEngines() {
return this.includedEngines;
}
public void setIncludedEngines(List<String> includedEngines) {
this.includedEngines = includedEngines;
}
public List<String> getExcludedEngines() {
return this.excludedEngines;
}
public void setExcludedEngines(List<String> excludedEngines) {
this.excludedEngines = excludedEngines;
}
public List<String> getIncludedTags() {
return this.includedTags;
}
public void setIncludedTags(List<String> includedTags) {
this.includedTags = includedTags;
}
public List<String> getExcludedTags() {
return this.excludedTags;
}
public void setExcludedTags(List<String> excludedTags) {
this.excludedTags = excludedTags;
}
public List<Path> getAdditionalClasspathEntries() {
return this.additionalClasspathEntries;
}
public void setAdditionalClasspathEntries(List<Path> additionalClasspathEntries) {
// Create a modifiable copy
this.additionalClasspathEntries = new ArrayList<>(additionalClasspathEntries);
this.additionalClasspathEntries.removeIf(path -> !Files.exists(path));
}
public Optional<Path> getReportsDir() {
return Optional.ofNullable(this.reportsDir);
}
public void setReportsDir(Path reportsDir) {
this.reportsDir = reportsDir;
}
public List<Path> getSelectedClasspathEntries() {
return this.selectedClasspathEntries;
}
public void setSelectedClasspathEntries(List<Path> selectedClasspathEntries) {
this.selectedClasspathEntries = selectedClasspathEntries;
}
}