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 }