    001    package org.junit.experimental.categories;
    002
    003    import java.lang.annotation.Inherited;
    004    import java.lang.annotation.Retention;
    005    import java.lang.annotation.RetentionPolicy;
    006
    007    import org.junit.validator.ValidateWith;
    008
    009    /**
    010     * Marks a test class or test method as belonging to one or more categories of tests.
    011     * The value is an array of arbitrary classes.
    012     *
    013     * This annotation is only interpreted by the Categories runner (at present).
    014     *
    015     * For example:
    016     * <pre>
    017     * public interface FastTests {}
    018     * public interface SlowTests {}
    019     *
    020     * public static class A {
    021     * &#064;Test
    022     * public void a() {
    023     * fail();
    024     * }
    025     *
    026     * &#064;Category(SlowTests.class)
    027     * &#064;Test
    028     * public void b() {
    029     * }
    030     * }
    031     *
    032     * &#064;Category({SlowTests.class, FastTests.class})
    033     * public static class B {
    034     * &#064;Test
    035     * public void c() {
    036     *
    037     * }
    038     * }
    039     * </pre>
    040     *
    041     * For more usage, see code example on {@link Categories}.
    042     */
    043    @Retention(RetentionPolicy.RUNTIME)
    044    @Inherited
    045    @ValidateWith(CategoryValidator.class)
    046    public @interface Category {
    047        Class<?>[] value();
    048    }