View Javadoc
1   package org.junit.tests.description;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertTrue;
5   
6   import java.lang.annotation.Annotation;
7   import java.lang.annotation.Retention;
8   import java.lang.annotation.RetentionPolicy;
9   
10  import org.junit.Ignore;
11  import org.junit.Test;
12  import org.junit.runner.Description;
13  import org.junit.runner.Request;
14  
15  public class AnnotatedDescriptionTest {
16      @Retention(RetentionPolicy.RUNTIME)
17      public @interface MyOwnAnnotation {
18  
19      }
20  
21      @MyOwnAnnotation
22      public static class AnnotatedClass {
23          @Test
24          public void a() {
25          }
26      }
27  
28      @Test
29      public void annotationsExistOnDescriptionsOfClasses() {
30          assertTrue((describe(AnnotatedClass.class).getAnnotation(
31                  MyOwnAnnotation.class) != null));
32      }
33  
34      @Test
35      public void getAnnotationsReturnsAllAnnotations() {
36          assertEquals(1, describe(ValueAnnotatedClass.class).getAnnotations()
37                  .size());
38      }
39  
40      @Ignore
41      public static class IgnoredClass {
42          @Test
43          public void a() {
44          }
45      }
46  
47      @Test
48      public void annotationsExistOnDescriptionsOfIgnoredClass() {
49          assertTrue((describe(IgnoredClass.class).getAnnotation(Ignore.class) != null));
50      }
51  
52      @Retention(RetentionPolicy.RUNTIME)
53      public @interface ValuedAnnotation {
54          String value();
55      }
56  
57      @ValuedAnnotation("hello")
58      public static class ValueAnnotatedClass {
59          @Test
60          public void a() {
61          }
62      }
63  
64      @Test
65      public void descriptionOfTestClassHasValuedAnnotation() {
66          Description description = describe(ValueAnnotatedClass.class);
67          assertEquals("hello", description.getAnnotation(ValuedAnnotation.class)
68                  .value());
69      }
70  
71      @Test
72      public void childlessCopyOfDescriptionStillHasAnnotations() {
73          Description description = describe(ValueAnnotatedClass.class);
74          assertEquals("hello", description.childlessCopy().getAnnotation(ValuedAnnotation.class)
75                  .value());
76      }
77  
78      @Test
79      public void characterizeCreatingMyOwnAnnotation() {
80          Annotation annotation = new Ignore() {
81              public String value() {
82                  return "message";
83              }
84  
85              public Class<? extends Annotation> annotationType() {
86                  return Ignore.class;
87              }
88          };
89  
90          assertEquals(Ignore.class, annotation.annotationType());
91      }
92  
93      private Description describe(Class<?> testClass) {
94          return Request.aClass(testClass).getRunner().getDescription();
95      }
96  }