1+ package org .cryptomator .integrations .common ;
2+
3+ import org .junit .jupiter .api .Assertions ;
4+ import org .junit .jupiter .api .DisplayName ;
5+ import org .junit .jupiter .api .Nested ;
6+ import org .junit .jupiter .api .Test ;
7+
8+ public class IntegrationsLoaderTest {
9+
10+ @ Nested
11+ @ DisplayName ("@CheckAvailability on static methods" )
12+ public class StaticAvailabilityChecks {
13+
14+ @ CheckAvailability
15+ private static class StaticTrue {
16+ @ CheckAvailability
17+ public static boolean test () {
18+ return true ;
19+ }
20+ }
21+
22+ @ CheckAvailability
23+ private static class StaticFalse {
24+ @ CheckAvailability
25+ public static boolean test () {
26+ return false ;
27+ }
28+ }
29+
30+ @ Test
31+ @ DisplayName ("no @CheckAvailability will always pass" )
32+ public void testPassesAvailabilityCheck0 () {
33+ // @formatter:off
34+ class C1 {}
35+ @ CheckAvailability class C2 {}
36+ class C3 {
37+ @ CheckAvailability public static boolean test () { return false ; }
38+ }
39+ // @formatter:on
40+
41+ Assertions .assertTrue (IntegrationsLoader .passesStaticAvailabilityCheck (C1 .class ));
42+ Assertions .assertTrue (IntegrationsLoader .passesStaticAvailabilityCheck (C2 .class ));
43+ Assertions .assertTrue (IntegrationsLoader .passesStaticAvailabilityCheck (C3 .class ));
44+ }
45+
46+ @ Test
47+ @ DisplayName ("@CheckAvailability on non-conforming methods will be skipped" )
48+ public void testPassesAvailabilityCheck1 () {
49+ // @formatter:off
50+ @ CheckAvailability class C1 {
51+ @ CheckAvailability private static boolean test1 () { return false ; }
52+ @ CheckAvailability public static boolean test2 (String foo ) { return false ; }
53+ @ CheckAvailability public static String test3 () { return "false" ; }
54+ }
55+ // @formatter:on
56+
57+ Assertions .assertTrue (IntegrationsLoader .passesStaticAvailabilityCheck (C1 .class ));
58+ }
59+
60+ @ Test
61+ @ DisplayName ("@CheckAvailability on static method" )
62+ public void testPassesAvailabilityCheck2 () {
63+ Assertions .assertTrue (IntegrationsLoader .passesStaticAvailabilityCheck (StaticTrue .class ));
64+ Assertions .assertFalse (IntegrationsLoader .passesStaticAvailabilityCheck (StaticFalse .class ));
65+ }
66+
67+ @ Test
68+ @ DisplayName ("@CheckAvailability on inherited static method" )
69+ public void testPassesAvailabilityCheck3 () {
70+ // @formatter:off
71+ class C1 extends StaticTrue {}
72+ class C2 extends StaticFalse {}
73+ // @formatter:on
74+
75+ Assertions .assertTrue (IntegrationsLoader .passesStaticAvailabilityCheck (C1 .class ));
76+ Assertions .assertFalse (IntegrationsLoader .passesStaticAvailabilityCheck (C2 .class ));
77+ }
78+
79+ @ Test
80+ @ DisplayName ("multiple @CheckAvailability methods" )
81+ public void testPassesAvailabilityCheck4 () {
82+ // @formatter:off
83+ class C1 extends StaticTrue {
84+ @ CheckAvailability public static boolean test1 () { return false ; }
85+ }
86+ class C2 extends StaticFalse {
87+ @ CheckAvailability public static boolean test1 () { return true ; }
88+ }
89+ @ CheckAvailability class C3 {
90+ @ CheckAvailability public static boolean test1 () { return true ; }
91+ @ CheckAvailability public static boolean test2 () { return false ; }
92+ }
93+ // @formatter:on
94+
95+ Assertions .assertFalse (IntegrationsLoader .passesStaticAvailabilityCheck (C1 .class ));
96+ Assertions .assertFalse (IntegrationsLoader .passesStaticAvailabilityCheck (C2 .class ));
97+ Assertions .assertFalse (IntegrationsLoader .passesStaticAvailabilityCheck (C3 .class ));
98+ }
99+
100+
101+ }
102+
103+ @ Nested
104+ @ DisplayName ("@CheckAvailability on instance methods" )
105+ public class InstanceAvailabilityChecks {
106+
107+ @ CheckAvailability
108+ private static class InstanceTrue {
109+ @ CheckAvailability
110+ public boolean test () {
111+ return true ;
112+ }
113+ }
114+
115+ @ CheckAvailability
116+ private static class InstanceFalse {
117+ @ CheckAvailability
118+ public boolean test () {
119+ return false ;
120+ }
121+ }
122+
123+ @ Test
124+ @ DisplayName ("no @CheckAvailability will always pass" )
125+ public void testPassesAvailabilityCheck0 () {
126+ // @formatter:off
127+ class C1 {}
128+ @ CheckAvailability class C2 {}
129+ class C3 {
130+ @ CheckAvailability public boolean test () { return false ; }
131+ }
132+ // @formatter:on
133+
134+ Assertions .assertTrue (IntegrationsLoader .passesInstanceAvailabilityCheck (new C1 ()));
135+ Assertions .assertTrue (IntegrationsLoader .passesInstanceAvailabilityCheck (new C2 ()));
136+ Assertions .assertTrue (IntegrationsLoader .passesInstanceAvailabilityCheck (new C3 ()));
137+ }
138+
139+ @ Test
140+ @ DisplayName ("@CheckAvailability on non-conforming instance methods will be skipped" )
141+ public void testPassesAvailabilityCheck1 () {
142+ // @formatter:off
143+ @ CheckAvailability class C1 {
144+ @ CheckAvailability private boolean test1 () { return false ; }
145+ @ CheckAvailability public boolean test2 (String foo ) { return false ; }
146+ @ CheckAvailability public String test3 () { return "false" ; }
147+ }
148+ // @formatter:on
149+
150+ Assertions .assertTrue (IntegrationsLoader .passesInstanceAvailabilityCheck (C1 .class ));
151+ }
152+
153+ @ Test
154+ @ DisplayName ("@CheckAvailability on instance method" )
155+ public void testPassesAvailabilityCheck2 () {
156+ Assertions .assertTrue (IntegrationsLoader .passesInstanceAvailabilityCheck (new InstanceTrue ()));
157+ Assertions .assertFalse (IntegrationsLoader .passesInstanceAvailabilityCheck (new InstanceFalse ()));
158+ }
159+
160+ @ Test
161+ @ DisplayName ("@CheckAvailability on inherited instance method" )
162+ public void testPassesAvailabilityCheck3 () {
163+ // @formatter:off
164+ class C1 extends InstanceTrue {}
165+ class C2 extends InstanceFalse {}
166+ // @formatter:on
167+
168+ Assertions .assertTrue (IntegrationsLoader .passesInstanceAvailabilityCheck (new C1 ()));
169+ Assertions .assertFalse (IntegrationsLoader .passesInstanceAvailabilityCheck (new C2 ()));
170+ }
171+
172+ @ Test
173+ @ DisplayName ("multiple @CheckAvailability methods" )
174+ public void testPassesAvailabilityCheck4 () {
175+ // @formatter:off
176+ class C1 extends InstanceTrue {
177+ @ CheckAvailability public boolean test1 () { return false ; }
178+ }
179+ class C2 extends InstanceFalse {
180+ @ CheckAvailability public boolean test1 () { return true ; }
181+ }
182+ @ CheckAvailability class C3 {
183+ @ CheckAvailability public boolean test1 () { return true ; }
184+ @ CheckAvailability public boolean test2 () { return false ; }
185+ }
186+ // @formatter:on
187+
188+ Assertions .assertFalse (IntegrationsLoader .passesInstanceAvailabilityCheck (new C1 ()));
189+ Assertions .assertFalse (IntegrationsLoader .passesInstanceAvailabilityCheck (new C2 ()));
190+ Assertions .assertFalse (IntegrationsLoader .passesInstanceAvailabilityCheck (new C3 ()));
191+ }
192+
193+ }
194+
195+ }
0 commit comments