    001    package org.junit.experimental.theories;
    002
    003    import java.util.List;
    004
    005    /**
    006     * Abstract parent class for suppliers of input data points for theories. Extend this class to customize how {@link
    007     * org.junit.experimental.theories.Theories Theories} runner
    008     * finds accepted data points. Then use your class together with <b>&#064;ParametersSuppliedBy</b> on input
    009     * parameters for theories.
    010     *
    011     * <p>
    012     * For example, here is a supplier for values between two integers, and an annotation that references it:
    013     *
    014     * <pre>
    015     *     &#064;Retention(RetentionPolicy.RUNTIME)
    016     *     <b>&#064;ParametersSuppliedBy</b>(BetweenSupplier.class)
    017     *     public @interface Between {
    018     *         int first();
    019     *
    020     *         int last();
    021     *     }
    022     *
    023     *     public static class BetweenSupplier extends <b>ParameterSupplier</b> {
    024     *         &#064;Override
    025     *         public List&lt;<b>PotentialAssignment</b>&gt; getValueSources(<b>ParameterSignature</b> sig) {
    026     *             List&lt;<b>PotentialAssignment</b>&gt; list = new ArrayList&lt;PotentialAssignment&gt;();
    027     *             Between annotation = (Between) sig.getSupplierAnnotation();
    028     *
    029     *             for (int i = annotation.first(); i &lt;= annotation.last(); i++)
    030     *                 list.add(<b>PotentialAssignment</b>.forValue("ints", i));
    031     *             return list;
    032     *         }
    033     *     }
    034     * </pre>
    035     * </p>
    036     *
    037     * @see org.junit.experimental.theories.ParametersSuppliedBy
    038     * @see org.junit.experimental.theories.Theories
    039     * @see org.junit.experimental.theories.FromDataPoints
    040     */
    041    public abstract class ParameterSupplier {
    042        public abstract List<PotentialAssignment> getValueSources(ParameterSignature sig) throws Throwable;
    043    }