001 package org.junit.experimental.theories; 002 003 import java.lang.annotation.ElementType; 004 import java.lang.annotation.Retention; 005 import java.lang.annotation.RetentionPolicy; 006 import java.lang.annotation.Target; 007 008 import org.junit.experimental.theories.internal.SpecificDataPointsSupplier; 009 010 /** 011 * Annotating a parameter of a {@link org.junit.experimental.theories.Theory 012 * @Theory} method with <code>@FromDataPoints</code> will limit the 013 * datapoints considered as potential values for that parameter to just the 014 * {@link org.junit.experimental.theories.DataPoints DataPoints} with the given 015 * name. DataPoint names can be given as the value parameter of the 016 * @DataPoints annotation. 017 * <p> 018 * DataPoints without names will not be considered as values for any parameters 019 * annotated with @FromDataPoints. 020 * <pre> 021 * @DataPoints 022 * public static String[] unnamed = new String[] { ... }; 023 * 024 * @DataPoints("regexes") 025 * public static String[] regexStrings = new String[] { ... }; 026 * 027 * @DataPoints({"forMatching", "alphanumeric"}) 028 * public static String[] testStrings = new String[] { ... }; 029 * 030 * @Theory 031 * public void stringTheory(String param) { 032 * // This will be called with every value in 'regexStrings', 033 * // 'testStrings' and 'unnamed'. 034 * } 035 * 036 * @Theory 037 * public void regexTheory(@FromDataPoints("regexes") String regex, 038 * @FromDataPoints("forMatching") String value) { 039 * // This will be called with only the values in 'regexStrings' as 040 * // regex, only the values in 'testStrings' as value, and none 041 * // of the values in 'unnamed'. 042 * } 043 * </pre> 044 * 045 * @see org.junit.experimental.theories.Theory 046 * @see org.junit.experimental.theories.DataPoint 047 * @see org.junit.experimental.theories.DataPoints 048 */ 049 @Retention(RetentionPolicy.RUNTIME) 050 @Target(ElementType.PARAMETER) 051 @ParametersSuppliedBy(SpecificDataPointsSupplier.class) 052 public @interface FromDataPoints { 053 String value(); 054 }