1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3.function;
19
20 import static org.apache.commons.lang3.LangAssertions.assertNullPointerException;
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertNotNull;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24
25 import java.io.IOException;
26 import java.util.concurrent.atomic.AtomicReference;
27
28 import org.apache.commons.lang3.AbstractLangTest;
29 import org.junit.jupiter.api.Test;
30
31
32
33
34 class FailableDoubleConsumerTest extends AbstractLangTest {
35
36 @Test
37 void testAccept_invokesConsumer() throws IOException {
38 final AtomicReference<Double> ref = new AtomicReference<>();
39 final FailableDoubleConsumer<IOException> consumer = ref::set;
40 consumer.accept(3.14);
41 assertEquals(3.14, ref.get());
42 }
43
44 @Test
45 void testAccept_throwsException() {
46 final IOException expected = new IOException("fail");
47 final FailableDoubleConsumer<IOException> consumer = v -> {
48 throw expected;
49 };
50 final IOException thrown = assertThrows(IOException.class, () -> consumer.accept(1.0));
51 assertEquals(expected, thrown);
52 }
53
54 @Test
55 void testAndThen_bothInvoked() throws IOException {
56 final AtomicReference<Double> ref1 = new AtomicReference<>();
57 final AtomicReference<Double> ref2 = new AtomicReference<>();
58 final FailableDoubleConsumer<IOException> first = ref1::set;
59 final FailableDoubleConsumer<IOException> second = ref2::set;
60 first.andThen(second).accept(2.5);
61 assertEquals(2.5, ref1.get());
62 assertEquals(2.5, ref2.get());
63 }
64
65 @Test
66 void testAndThen_firstThrows_secondNotInvoked() {
67 final IOException expected = new IOException("first");
68 final AtomicReference<Double> ref = new AtomicReference<>();
69 final FailableDoubleConsumer<IOException> throwing = v -> {
70 throw expected;
71 };
72 final FailableDoubleConsumer<IOException> second = ref::set;
73 final IOException thrown = assertThrows(IOException.class, () -> throwing.andThen(second).accept(1.0));
74 assertEquals(expected, thrown);
75 assertEquals(null, ref.get());
76 }
77
78 @Test
79 void testAndThen_nullAfter_throwsNullPointerException() throws Throwable {
80 final FailableDoubleConsumer<IOException> consumer = v -> {
81 };
82 assertNullPointerException(() -> consumer.andThen(null));
83 }
84
85 @Test
86 void testNop_acceptDoesNothing() throws Throwable {
87 FailableDoubleConsumer.nop().accept(1.0);
88 }
89
90 @Test
91 void testNop_returnsNonNull() {
92 assertNotNull(FailableDoubleConsumer.nop());
93 }
94 }