package org.junit.tests.experimental.theories.extendingwithstubs; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.experimental.theories.PotentialAssignment; import org.junit.internal.AssumptionViolatedException; public class GuesserQueue extends ArrayList<ReguessableValue> { static class ReguessableDecorator extends ReguessableValue { private final PotentialAssignment delegate; public ReguessableDecorator(PotentialAssignment delegate) { this.delegate = delegate; } @Override public List<ReguessableValue> reguesses(AssumptionViolatedException e) { return Collections.emptyList(); } @Override public Object getValue() throws CouldNotGenerateValueException { return delegate.getValue(); } @Override public String getDescription() throws CouldNotGenerateValueException { return delegate.getDescription(); } } static GuesserQueue forSingleValues( List<PotentialAssignment> potentials) { GuesserQueue returnThis = new GuesserQueue(); for (PotentialAssignment potentialParameterValue : potentials) { returnThis .add(new GuesserQueue.ReguessableDecorator(potentialParameterValue)); } return returnThis; } private static final long serialVersionUID = 1L; private ReguessableValue lastRemoved; public void update(AssumptionViolatedException e) { if (lastRemoved != null) { addAll(lastRemoved.reguesses(e)); } } @Override public ReguessableValue remove(int index) { lastRemoved = super.remove(index); return lastRemoved; } }