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    }