package hudson.plugins.cigame.rules.unittesting;
import hudson.model.AbstractBuild;
import hudson.model.Result;
import hudson.plugins.cigame.model.Rule;
import hudson.plugins.cigame.model.RuleResult;
import hudson.tasks.test.AbstractTestResultAction;
import java.util.List;
/**
* Rule for giving points if a new test is added and fails.
*/
public class IncreasingFailedTestsRule implements Rule {
private double pointsForEachNewFailure;
public IncreasingFailedTestsRule() {
this(-1);
}
public IncreasingFailedTestsRule(int points) {
pointsForEachNewFailure = points;
}
public String getName() {
return Messages.UnitTestingRuleSet_IncreasingFailedRule_Name(); //$NON-NLS-1$
}
@SuppressWarnings("unchecked")
public RuleResult evaluate(AbstractBuild<?, ?> build) {
List<AbstractTestResultAction> actions = build.getActions(AbstractTestResultAction.class);
for (AbstractTestResultAction action : actions) {
if ((action != null) && (action.getPreviousResult() != null)) {
return evaluate(build.getResult(),
build.getPreviousBuild().getResult(),
action.getFailCount(),
action.getPreviousResult().getFailCount());
}
}
return null;
}
RuleResult evaluate(Result currentResult, Result previousResult,
int currentFailCount, int previousFailCount) {
if ((previousResult.isBetterThan(Result.FAILURE))
&& (currentResult.isBetterOrEqualTo(Result.UNSTABLE))) {
int failingTestDiff = currentFailCount - previousFailCount;
if (failingTestDiff > 0) {
return new RuleResult(failingTestDiff * pointsForEachNewFailure,
Messages.UnitTestingRuleSet_IncreasingFailedRule_Count(failingTestDiff)); //$NON-NLS-1$
}
}
return null;
}
}