package org.junit.experimental.theories; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.junit.experimental.theories.internal.SpecificDataPointsSupplier; /** * Annotating a parameter of a {@link org.junit.experimental.theories.Theory * @Theory} method with <code>@FromDataPoints</code> will limit the * datapoints considered as potential values for that parameter to just the * {@link org.junit.experimental.theories.DataPoints DataPoints} with the given * name. DataPoint names can be given as the value parameter of the * @DataPoints annotation. * <p> * DataPoints without names will not be considered as values for any parameters * annotated with @FromDataPoints. * <pre> * @DataPoints * public static String[] unnamed = new String[] { ... }; * * @DataPoints("regexes") * public static String[] regexStrings = new String[] { ... }; * * @DataPoints({"forMatching", "alphanumeric"}) * public static String[] testStrings = new String[] { ... }; * * @Theory * public void stringTheory(String param) { * // This will be called with every value in 'regexStrings', * // 'testStrings' and 'unnamed'. * } * * @Theory * public void regexTheory(@FromDataPoints("regexes") String regex, * @FromDataPoints("forMatching") String value) { * // This will be called with only the values in 'regexStrings' as * // regex, only the values in 'testStrings' as value, and none * // of the values in 'unnamed'. * } * </pre> * * @see org.junit.experimental.theories.Theory * @see org.junit.experimental.theories.DataPoint * @see org.junit.experimental.theories.DataPoints */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) @ParametersSuppliedBy(SpecificDataPointsSupplier.class) public @interface FromDataPoints { String value(); }