View Javadoc
1   package org.junit.validator;
2   
3   import static java.util.Arrays.asList;
4   import static org.hamcrest.CoreMatchers.is;
5   import static org.junit.Assert.assertThat;
6   
7   import java.lang.annotation.Inherited;
8   import java.lang.annotation.Retention;
9   import java.lang.annotation.RetentionPolicy;
10  import java.util.Collection;
11  import java.util.List;
12  
13  import org.junit.Test;
14  import org.junit.runners.model.FrameworkField;
15  import org.junit.runners.model.FrameworkMethod;
16  import org.junit.runners.model.TestClass;
17  
18  public class AnnotationsValidatorTest {
19      public static class ExampleAnnotationValidator extends AnnotationValidator {
20          private static final String ANNOTATED_METHOD_CALLED= "annotated method called";
21  
22          private static final String ANNOTATED_FIELD_CALLED= "annotated field called";
23  
24          private static final String ANNOTATED_CLASS_CALLED= "annotated class called";
25  
26          @Override
27          public List<Exception> validateAnnotatedClass(TestClass testClass) {
28              return asList(new Exception(ANNOTATED_CLASS_CALLED));
29          }
30  
31          @Override
32          public List<Exception> validateAnnotatedField(FrameworkField field) {
33              return asList(new Exception(ANNOTATED_FIELD_CALLED));
34          }
35  
36          @Override
37          public List<Exception> validateAnnotatedMethod(FrameworkMethod method) {
38              return asList(new Exception(ANNOTATED_METHOD_CALLED));
39          }
40      }
41  
42      @Retention(RetentionPolicy.RUNTIME)
43      @Inherited
44      @ValidateWith(ExampleAnnotationValidator.class)
45      public @interface ExampleAnnotationWithValidator {
46      }
47  
48      public static class AnnotationValidatorMethodTest {
49          @ExampleAnnotationWithValidator
50          @Test
51          public void test() {
52          }
53      }
54  
55      public static class AnnotationValidatorFieldTest {
56          @ExampleAnnotationWithValidator
57          private String field;
58  
59          @Test
60          public void test() {
61          }
62      }
63  
64      @ExampleAnnotationWithValidator
65      public static class AnnotationValidatorClassTest {
66          @Test
67          public void test() {
68          }
69      }
70  
71      @Test
72      public void validatorIsCalledForAClass() {
73          assertClassHasFailureMessage(AnnotationValidatorClassTest.class,
74                  ExampleAnnotationValidator.ANNOTATED_CLASS_CALLED);
75      }
76  
77      @Test
78      public void validatorIsCalledForAMethod() {
79          assertClassHasFailureMessage(AnnotationValidatorMethodTest.class,
80                  ExampleAnnotationValidator.ANNOTATED_METHOD_CALLED);
81      }
82  
83      @Test
84      public void validatorIsCalledForAField() {
85          assertClassHasFailureMessage(AnnotationValidatorFieldTest.class,
86                  ExampleAnnotationValidator.ANNOTATED_FIELD_CALLED);
87      }
88  
89      private void assertClassHasFailureMessage(Class<?> klass,
90              String expectedFailure) {
91          AnnotationsValidator validator= new AnnotationsValidator();
92          Collection<Exception> errors= validator
93                  .validateTestClass(new TestClass(klass));
94          assertThat(errors.size(), is(1));
95          assertThat(errors.iterator().next().getMessage(),
96                  is(expectedFailure));
97      }
98  }