/*
* Copyright 2011 Henry Coles
*
* 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 org.pitest.mutationtest.config;
import java.io.Serializable;
import org.pitest.mutationtest.build.PercentAndConstantTimeoutStrategy;
public enum ConfigOption {
/**
* The directory to write report sot
*/
REPORT_DIR("reportDir"),
/**
* Filter defining classes to mutate
*/
TARGET_CLASSES("targetClasses"),
/**
* Directories to examine to find source files to annotate when generating
* report
*/
SOURCE_DIR("sourceDirs"),
/**
* Mutation operations to use
*/
MUTATIONS("mutators"),
/**
* Maximum number of hops from a mutable class to a test
*/
DEPENDENCY_DISTANCE("dependencyDistance", -1),
/**
* Arguments to launch child processes with
*/
CHILD_JVM("jvmArgs"),
/**
* Do/don't mutate static initializers (slow as new ClassLoader required for
* each mutant)
*/
MUTATE_STATIC_INITIALIZERS("mutateStaticInits", false),
/**
* Do/don't create timestamped folders for reports
*/
TIME_STAMPED_REPORTS("timestampedReports", true),
/**
* Number of threads to use
*/
THREADS("threads", 1),
/**
* Multiple of normal runtime to allow before considering a mutation to have
* timed out
*/
TIMEOUT_FACTOR("timeoutFactor",
PercentAndConstantTimeoutStrategy.DEFAULT_FACTOR),
/**
* Consant addiotnal period of time to allow before considering a mutation to
* have timed out
*/
TIMEOUT_CONST("timeoutConst",
PercentAndConstantTimeoutStrategy.DEFAULT_CONSTANT),
/**
* Filter limiting tests to be considered
*/
TEST_FILTER("targetTests"),
/**
* List of classes no to mutate lines of calls that contain call to
*/
AVOID_CALLS("avoidCallsTo"),
/**
* Filter of methods not to be mutated
*/
EXCLUDED_METHOD("excludedMethods"),
/**
* Maximum number of mutations to allow per class
*/
MAX_MUTATIONS_PER_CLASS("maxMutationsPerClass", 0),
/**
* Flag to indicate if verbose logging should be enabled
*/
VERBOSE("verbose", false),
/**
* Filter defining classes to exclude (both tests and mutees)
*/
EXCLUDED_CLASSES("excludedClasses"),
/**
* Formats in which to output results
*/
OUTPUT_FORMATS("outputFormats"),
/**
* Classpath entries to analyse. Although classes on the launch classpath will
* also be analysed, this is the preferred place to specify the code to
* analyse
*/
CLASSPATH("classPath"),
/**
* Same as classPath above, but in a file. The file should contain paths to the jars
* to be added to the classpath. one path per line.
* This is usually only needed if you are running on windows and have a huge classpath
*/
CLASSPATH_FILE("classPathFile"),
/**
* Flag to indicate if an error should be thrown if no mutations found
*/
FAIL_WHEN_NOT_MUTATIONS("failWhenNoMutations", true),
/**
* Filter defining paths that should be treated as containing mutable code
*/
CODE_PATHS("mutableCodePaths"),
/**
* TestNG groups/JUnit categories to include
*/
INCLUDED_GROUPS("includedGroups"),
/**
* TestNG groupsJUnit categories to exclude
*/
EXCLUDED_GROUPS("excludedGroups"),
/**
* Maximum number of mutations to include within a single unit of analysis.
*/
MUTATION_UNIT_SIZE("mutationUnitSize", 0),
/**
* Do/don't attempt to detect inlined code from finally blocks
*/
USE_INLINED_CODE_DETECTION("detectInlinedCode", true),
/**
* Location to read history from for incremental analysis
*/
HISTORY_INPUT_LOCATION("historyInputLocation"),
/**
* Location to write history to for incremental analysis
*/
HISTORY_OUTPUT_LOCATION("historyOutputLocation"),
/**
* Mutation score below which to throw an error
*/
MUTATION_THRESHOLD("mutationThreshold", 0),
/**
* Number of surviving mutants at which to throw an error
*/
MAX_SURVIVING("maxSurviving", -1),
/**
* Line coverage score below which to throw an error
*/
COVERAGE_THRESHOLD("coverageThreshold", 0),
/**
* Mutation engine to use
*/
MUTATION_ENGINE("mutationEngine", "gregor"),
/**
* Dump per test line coverage to disk
*/
EXPORT_LINE_COVERAGE("exportLineCoverage", false),
/**
* Include launch classpath in analysis
*/
INCLUDE_LAUNCH_CLASSPATH("includeLaunchClasspath", true),
/**
* Path to executable with which to run tests
*/
JVM_PATH("jvmPath"),
/**
* Custom properties for plugins
*/
PLUGIN_CONFIGURATION("pluginConfiguration");
private final String text;
private final Serializable defaultValue;
ConfigOption(final String text) {
this(text, null);
}
ConfigOption(final String text, final Serializable defaultValue) {
this.text = text;
this.defaultValue = defaultValue;
}
public String getParamName() {
return this.text;
}
@SuppressWarnings("unchecked")
public <T> T getDefault(final Class<T> type) {
// so much for type safety
return (T) this.defaultValue;
}
@Override
public String toString() {
return this.text;
}
}