1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.junit.bct;
18
19 import static org.apache.juneau.junit.bct.BctAssertions.*;
20 import static org.junit.jupiter.api.Assertions.*;
21
22 import java.util.*;
23 import java.util.concurrent.*;
24 import java.util.function.*;
25
26 import org.apache.juneau.*;
27 import org.junit.jupiter.api.*;
28
29
30
31
32 class Swappers_Test extends TestBase {
33
34 @Nested
35 class A_optionalSwapper extends TestBase {
36
37 @Test
38 void a01_swapPresentOptional() {
39 var swapper = Swappers.optionalSwapper();
40 var result = swapper.apply(null, Optional.of("Hello"));
41 assertEquals("Hello", result);
42 }
43
44 @Test
45 void a02_swapEmptyOptional() {
46 var swapper = Swappers.optionalSwapper();
47 var result = swapper.apply(null, Optional.empty());
48 assertNull(result);
49 }
50
51 @Test
52 void a03_swapOptionalWithNull() {
53 var swapper = Swappers.optionalSwapper();
54 var result = swapper.apply(null, Optional.ofNullable(null));
55 assertNull(result);
56 }
57
58 @Test
59 void a04_swapOptionalWithComplexObject() {
60 var swapper = Swappers.optionalSwapper();
61 var list = List.of("a", "b", "c");
62 var result = swapper.apply(null, Optional.of(list));
63 assertSame(list, result);
64 }
65
66 @Test
67 void a05_swapOptionalWithConverter() {
68 var converter = BasicBeanConverter.builder().defaultSettings().build();
69 var swapper = Swappers.optionalSwapper();
70 var result = swapper.apply(converter, Optional.of(42));
71 assertEquals(42, result);
72 }
73 }
74
75 @Nested
76 class B_supplierSwapper extends TestBase {
77
78 @Test
79 void b01_swapSupplierWithValue() {
80 var swapper = Swappers.supplierSwapper();
81 Supplier<String> supplier = () -> "Hello World";
82 var result = swapper.apply(null, supplier);
83 assertEquals("Hello World", result);
84 }
85
86 @Test
87 void b02_swapSupplierWithNull() {
88 var swapper = Swappers.supplierSwapper();
89 Supplier<String> supplier = () -> null;
90 var result = swapper.apply(null, supplier);
91 assertNull(result);
92 }
93
94 @Test
95 void b03_swapSupplierWithComplexObject() {
96 var swapper = Swappers.supplierSwapper();
97 var list = List.of("x", "y", "z");
98 Supplier<List<String>> supplier = () -> list;
99 var result = swapper.apply(null, supplier);
100 assertSame(list, result);
101 }
102
103 @Test
104 void b04_swapSupplierWithConverter() {
105 var converter = BasicBeanConverter.builder().defaultSettings().build();
106 var swapper = Swappers.supplierSwapper();
107 Supplier<Integer> supplier = () -> 123;
108 var result = swapper.apply(converter, supplier);
109 assertEquals(123, result);
110 }
111
112 @Test
113 void b05_swapSupplierWithException() {
114 var swapper = Swappers.supplierSwapper();
115 Supplier<String> supplier = () -> {
116 throw new RuntimeException("Test exception");
117 };
118 assertThrows(RuntimeException.class, () -> swapper.apply(null, supplier));
119 }
120 }
121
122 @Nested
123 class C_futureSwapper extends TestBase {
124
125 @Test
126 void c01_swapCompletedFuture() {
127 var swapper = Swappers.futureSwapper();
128 var future = CompletableFuture.completedFuture("Result");
129 var result = swapper.apply(null, future);
130 assertEquals("Result", result);
131 }
132
133 @Test
134 void c02_swapPendingFuture() {
135 var swapper = Swappers.futureSwapper();
136 var future = new CompletableFuture<String>();
137 var result = swapper.apply(null, future);
138 assertEquals("<pending>", result);
139 }
140
141 @Test
142 void c03_swapCancelledFuture() {
143 var swapper = Swappers.futureSwapper();
144 var future = new CompletableFuture<String>();
145 future.cancel(true);
146 var result = swapper.apply(null, future);
147 assertEquals("<cancelled>", result);
148 }
149
150 @Test
151 void c04_swapFailedFuture() {
152 var swapper = Swappers.futureSwapper();
153 var future = new CompletableFuture<String>();
154 future.completeExceptionally(new RuntimeException("Test error"));
155 var result = swapper.apply(null, future);
156 assertEquals("<error: java.lang.RuntimeException: Test error>", result);
157 }
158
159 @Test
160 void c05_swapCompletedFutureWithNull() {
161 var swapper = Swappers.futureSwapper();
162 var future = CompletableFuture.completedFuture(null);
163 var result = swapper.apply(null, future);
164 assertNull(result);
165 }
166
167 @Test
168 void c06_swapFutureWithComplexObject() {
169 var swapper = Swappers.futureSwapper();
170 var list = List.of("a", "b", "c");
171 var future = CompletableFuture.completedFuture(list);
172 var result = swapper.apply(null, future);
173 assertSame(list, result);
174 }
175
176 @Test
177 void c07_swapFutureWithConverter() {
178 var converter = BasicBeanConverter.builder().defaultSettings().build();
179 var swapper = Swappers.futureSwapper();
180 var future = CompletableFuture.completedFuture(999);
181 var result = swapper.apply(converter, future);
182 assertEquals(999, result);
183 }
184
185 @Test
186 void c08_swapFutureWithNestedCause() {
187 var swapper = Swappers.futureSwapper();
188 var future = new CompletableFuture<String>();
189 var rootCause = new IllegalArgumentException("Root cause");
190 var wrappedException = new RuntimeException("Wrapper", rootCause);
191 future.completeExceptionally(wrappedException);
192 var result = swapper.apply(null, future);
193 assertEquals("<error: java.lang.RuntimeException: Wrapper>", result);
194 }
195 }
196
197 @Nested
198 class D_integration extends TestBase {
199
200 @Test
201 void d01_useInBasicBeanConverter() {
202
203 assertBean(Optional.of("test"), "<self>", "test");
204 assertBean(Optional.empty(), "<self>", "<null>");
205
206
207 Supplier<String> supplier = () -> "supplied";
208 assertBean(supplier, "<self>", "supplied");
209
210
211 var future = CompletableFuture.completedFuture("future-result");
212 assertBean(future, "<self>", "future-result");
213 }
214
215 @Test
216 void d02_customSwapperRegistration() {
217
218 assertBean(Optional.of("custom"), "<self>", "custom");
219 }
220
221 @Test
222 void d03_nestedSwapping() {
223
224 Supplier<Optional<String>> nestedSupplier = () -> Optional.of("nested");
225 assertBean(nestedSupplier, "<self>", "nested");
226
227
228 Supplier<String> supplier = () -> "inner";
229 assertBean(Optional.of(supplier), "<self>", "inner");
230 }
231 }
232 }