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 { static class ReguessableDecorator extends ReguessableValue { private final PotentialAssignment delegate; public ReguessableDecorator(PotentialAssignment delegate) { this.delegate= delegate; } @Override public List 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 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; } }