001 package org.junit.experimental.theories;
002
003 import static java.lang.annotation.ElementType.FIELD;
004 import static java.lang.annotation.ElementType.METHOD;
005
006 import java.lang.annotation.Retention;
007 import java.lang.annotation.RetentionPolicy;
008 import java.lang.annotation.Target;
009
010 /**
011 * Annotating an field or method with @DataPoint will cause the field value
012 * or the value returned by the method to be used as a potential parameter for
013 * theories in that class, when run with the
014 * {@link org.junit.experimental.theories.Theories Theories} runner.
015 * <p>
016 * A DataPoint is only considered as a potential value for parameters for
017 * which its type is assignable. When multiple {@code DataPoint}s exist
018 * with overlapping types more control can be obtained by naming each DataPoint
019 * using the value of this annotation, e.g. with
020 * <code>@DataPoint({"dataset1", "dataset2"})</code>, and then specifying
021 * which named set to consider as potential values for each parameter using the
022 * {@link org.junit.experimental.theories.FromDataPoints @FromDataPoints}
023 * annotation.
024 * <p>
025 * Parameters with no specified source (i.e. without @FromDataPoints or
026 * other {@link org.junit.experimental.theories.ParametersSuppliedBy
027 * @ParameterSuppliedBy} annotations) will use all {@code DataPoint}s that are
028 * assignable to the parameter type as potential values, including named sets of
029 * {@code DataPoint}s.
030 *
031 * <pre>
032 * @DataPoint
033 * public static String dataPoint = "value";
034 *
035 * @DataPoint("generated")
036 * public static String generatedDataPoint() {
037 * return "generated value";
038 * }
039 *
040 * @Theory
041 * public void theoryMethod(String param) {
042 * ...
043 * }
044 * </pre>
045 *
046 * @see org.junit.experimental.theories.Theories
047 * @see org.junit.experimental.theories.Theory
048 * @see org.junit.experimental.theories.DataPoint
049 * @see org.junit.experimental.theories.FromDataPoints
050 */
051 @Retention(RetentionPolicy.RUNTIME)
052 @Target({FIELD, METHOD})
053 public @interface DataPoint {
054 String[] value() default {};
055 Class<? extends Throwable>[] ignoredExceptions() default {};
056 }