package jReto.util; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class Condition { private String name; private boolean isConfirmed; private boolean verbose; private boolean singleConfirmationOnly; public Condition(String name) { this(name, false, true); } public Condition(String name, boolean verbose, boolean singleConfirmationOnly) { this.name = name; this.isConfirmed = false; this.verbose = verbose; this.singleConfirmationOnly = singleConfirmationOnly; } public void confirm() { if (this.isConfirmed && this.singleConfirmationOnly) throw new IllegalStateException("Trying to confirm a condition that was previously confirmed: "+this.name); this.isConfirmed = true; if (this.verbose) System.out.println("Confirmed: "+this.name); } public boolean isConfirmed() { return this.isConfirmed; } public String getName() { return this.name; } public void verify() { assertTrue("Condition \""+this.name+"\" was not met.", this.isConfirmed); } public static void verifyAll(Condition... conditions) { verifyAll(Arrays.asList(conditions)); } public static void verifyAll(Collection<Condition> conditions) { ArrayList<String> results = new ArrayList<String>(); for (Condition condition : conditions) { if (!condition.isConfirmed()) results.add(condition.getName()); } assertTrue("The following conditions were not met: "+results, results.size() == 0); } }