1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.annotation;
18
19 import static org.apache.juneau.TestUtils.*;
20 import static org.junit.jupiter.api.Assertions.*;
21
22 import org.apache.juneau.*;
23 import org.junit.jupiter.api.*;
24
25 class ExampleAnnotation_Test extends TestBase {
26
27 private static final String CNAME = ExampleAnnotation_Test.class.getName();
28
29 private static class X1 {}
30
31
32
33
34
35 Example a1 = ExampleAnnotation.create()
36 .description("a")
37 .on("b")
38 .onClass(X1.class)
39 .value("c")
40 .build();
41
42 Example a2 = ExampleAnnotation.create()
43 .description("a")
44 .on("b")
45 .onClass(X1.class)
46 .value("c")
47 .build();
48
49 @Test void a01_basic() {
50 assertBean(a1, "description,on,onClass,value", "[a],[b],[X1],c");
51 }
52
53 @Test void a02_testEquivalency() {
54 assertEquals(a2, a1);
55 assertNotEqualsAny(a1.hashCode(), 0, -1);
56 assertEquals(a1.hashCode(), a2.hashCode());
57 }
58
59
60
61
62
63 @Test void b01_testEquivalencyInPropertyStores() {
64 var bc1 = BeanContext.create().annotations(a1).build();
65 var bc2 = BeanContext.create().annotations(a2).build();
66 assertSame(bc1, bc2);
67 }
68
69
70
71
72
73 public static class C1 {
74 public int f1;
75 public void m1() {}
76 }
77 public static class C2 {
78 public int f2;
79 public void m2() {}
80 }
81
82 @Test void c01_otherMethods() throws Exception {
83 var c1 = ExampleAnnotation.create(C1.class).on(C2.class).build();
84 var c2 = ExampleAnnotation.create("a").on("b").build();
85 var c3 = ExampleAnnotation.create().on(C1.class.getField("f1")).on(C2.class.getField("f2")).build();
86 var c4 = ExampleAnnotation.create().on(C1.class.getMethod("m1")).on(C2.class.getMethod("m2")).build();
87
88 assertBean(c1, "on", "["+CNAME+"$C1,"+CNAME+"$C2]");
89 assertBean(c2, "on", "[a,b]");
90 assertBean(c3, "on", "["+CNAME+"$C1.f1,"+CNAME+"$C2.f2]");
91 assertBean(c4, "on", "["+CNAME+"$C1.m1(),"+CNAME+"$C2.m2()]");
92 }
93
94
95
96
97
98 @Example(
99 description={ "a" },
100 on="b",
101 onClass=X1.class,
102 value="c"
103 )
104 public static class D1 {}
105 Example d1 = D1.class.getAnnotationsByType(Example.class)[0];
106
107 @Example(
108 description={ "a" },
109 on="b",
110 onClass=X1.class,
111 value="c"
112 )
113 public static class D2 {}
114 Example d2 = D2.class.getAnnotationsByType(Example.class)[0];
115
116 @Test void d01_comparisonWithDeclarativeAnnotations() {
117 assertEqualsAll(a1, d1, d2);
118 assertNotEqualsAny(a1.hashCode(), 0, -1);
119 assertEqualsAll(a1.hashCode(), d1.hashCode(), d2.hashCode());
120 }
121 }