1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.juneau.commons.function;
18
19 import static org.junit.jupiter.api.Assertions.*;
20
21 import java.util.concurrent.atomic.AtomicInteger;
22
23 import org.apache.juneau.*;
24 import org.junit.jupiter.api.*;
25
26 class Consumer5_Test extends TestBase {
27
28
29
30
31 @Test void a01_basic() {
32 var callCount = new AtomicInteger();
33 var receivedA = new StringBuilder();
34 var receivedB = new StringBuilder();
35 var receivedC = new StringBuilder();
36 var receivedD = new StringBuilder();
37 var receivedE = new StringBuilder();
38
39 Consumer5<String,Integer,Boolean,Double,Character> x = (a, b, c, d, e) -> {
40 callCount.incrementAndGet();
41 receivedA.append(a);
42 receivedB.append(b);
43 receivedC.append(c);
44 receivedD.append(d);
45 receivedE.append(e);
46 };
47
48 x.apply("foo", 42, true, 3.14, 'X');
49 assertEquals(1, callCount.get());
50 assertEquals("foo", receivedA.toString());
51 assertEquals("42", receivedB.toString());
52 assertEquals("true", receivedC.toString());
53 assertEquals("3.14", receivedD.toString());
54 assertEquals("X", receivedE.toString());
55 }
56
57 @Test void a02_withNullValues() {
58 var callCount = new AtomicInteger();
59 var receivedA = new Object[1];
60 var receivedB = new Object[1];
61 var receivedC = new Object[1];
62 var receivedD = new Object[1];
63 var receivedE = new Object[1];
64
65 Consumer5<String,Integer,Boolean,Double,Character> x = (a, b, c, d, e) -> {
66 callCount.incrementAndGet();
67 receivedA[0] = a;
68 receivedB[0] = b;
69 receivedC[0] = c;
70 receivedD[0] = d;
71 receivedE[0] = e;
72 };
73
74 x.apply(null, null, null, null, null);
75 assertEquals(1, callCount.get());
76 assertNull(receivedA[0]);
77 assertNull(receivedB[0]);
78 assertNull(receivedC[0]);
79 assertNull(receivedD[0]);
80 assertNull(receivedE[0]);
81 }
82
83
84
85
86 @Test void b01_andThen_bothCalled() {
87 var firstCallCount = new AtomicInteger();
88 var secondCallCount = new AtomicInteger();
89
90 Consumer5<String,Integer,Boolean,Double,Character> first = (a, b, c, d, e) -> firstCallCount.incrementAndGet();
91 Consumer5<String,Integer,Boolean,Double,Character> second = (a, b, c, d, e) -> secondCallCount.incrementAndGet();
92
93 var composed = first.andThen(second);
94 composed.apply("test", 123, false, 2.5, 'Y');
95
96 assertEquals(1, firstCallCount.get());
97 assertEquals(1, secondCallCount.get());
98 }
99
100 @Test void b02_andThen_calledInOrder() {
101 var callOrder = new StringBuilder();
102
103 Consumer5<String,Integer,Boolean,Double,Character> first = (a, b, c, d, e) -> callOrder.append("first");
104 Consumer5<String,Integer,Boolean,Double,Character> second = (a, b, c, d, e) -> callOrder.append("second");
105
106 var composed = first.andThen(second);
107 composed.apply("test", 123, false, 2.5, 'Y');
108
109 assertEquals("firstsecond", callOrder.toString());
110 }
111
112 @Test void b03_andThen_sameArgumentsPassed() {
113 var firstArgs = new Object[5];
114 var secondArgs = new Object[5];
115
116 Consumer5<String,Integer,Boolean,Double,Character> first = (a, b, c, d, e) -> {
117 firstArgs[0] = a;
118 firstArgs[1] = b;
119 firstArgs[2] = c;
120 firstArgs[3] = d;
121 firstArgs[4] = e;
122 };
123 Consumer5<String,Integer,Boolean,Double,Character> second = (a, b, c, d, e) -> {
124 secondArgs[0] = a;
125 secondArgs[1] = b;
126 secondArgs[2] = c;
127 secondArgs[3] = d;
128 secondArgs[4] = e;
129 };
130
131 var composed = first.andThen(second);
132 composed.apply("foo", 42, true, 3.14, 'X');
133
134 assertEquals("foo", firstArgs[0]);
135 assertEquals(42, firstArgs[1]);
136 assertEquals(true, firstArgs[2]);
137 assertEquals(3.14, firstArgs[3]);
138 assertEquals('X', firstArgs[4]);
139 assertEquals("foo", secondArgs[0]);
140 assertEquals(42, secondArgs[1]);
141 assertEquals(true, secondArgs[2]);
142 assertEquals(3.14, secondArgs[3]);
143 assertEquals('X', secondArgs[4]);
144 }
145
146 @Test void b04_andThen_chaining() {
147 var callCount = new AtomicInteger();
148
149 Consumer5<String,Integer,Boolean,Double,Character> first = (a, b, c, d, e) -> callCount.addAndGet(1);
150 Consumer5<String,Integer,Boolean,Double,Character> second = (a, b, c, d, e) -> callCount.addAndGet(10);
151 Consumer5<String,Integer,Boolean,Double,Character> third = (a, b, c, d, e) -> callCount.addAndGet(100);
152
153 var composed = first.andThen(second).andThen(third);
154 composed.apply("test", 123, false, 2.5, 'Y');
155
156 assertEquals(111, callCount.get());
157 }
158 }
159