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.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertThrows;
25
26 import java.io.IOException;
27
28 import org.apache.commons.lang3.AbstractLangTest;
29 import org.junit.jupiter.api.Test;
30
31
32
33
34 class FailableBiFunctionTest extends AbstractLangTest {
35
36 @Test
37 void testAndThen_composesCorrectly() throws IOException {
38 final FailableBiFunction<Integer, Integer, Integer, IOException> sum = (a, b) -> a + b;
39 final FailableFunction<Integer, String, IOException> toStr = i -> "result:" + i;
40 assertEquals("result:3", sum.andThen(toStr).apply(1, 2));
41 }
42
43 @Test
44 void testAndThen_firstThrows_secondNotInvoked() {
45 final IOException expected = new IOException("first");
46 final FailableBiFunction<String, String, String, IOException> f = (a, b) -> {
47 throw expected;
48 };
49 final FailableFunction<String, String, IOException> after = s -> s + "!";
50 final IOException thrown = assertThrows(IOException.class, () -> f.andThen(after).apply("a", "b"));
51 assertEquals(expected, thrown);
52 }
53
54 @Test
55 void testAndThen_nullAfter_throwsNullPointerException() throws Throwable {
56 final FailableBiFunction<String, String, String, IOException> f = (a, b) -> a + b;
57 assertNullPointerException(() -> f.andThen(null));
58 }
59
60 @Test
61 void testApply_returnsResult() throws IOException {
62 final FailableBiFunction<String, String, String, IOException> f = (a, b) -> a + b;
63 assertEquals("ab", f.apply("a", "b"));
64 }
65
66 @Test
67 void testApply_throwsException() {
68 final IOException expected = new IOException("fail");
69 final FailableBiFunction<String, String, String, IOException> f = (a, b) -> {
70 throw expected;
71 };
72 final IOException thrown = assertThrows(IOException.class, () -> f.apply("a", "b"));
73 assertEquals(expected, thrown);
74 }
75
76 @Test
77 void testNop_applyReturnsNull() throws Throwable {
78 assertNull(FailableBiFunction.nop().apply("a", "b"));
79 }
80
81 @Test
82 void testNop_returnsNonNull() {
83 assertNotNull(FailableBiFunction.nop());
84 }
85 }