1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.collections4.functors;
18
19 import static org.junit.jupiter.api.Assertions.assertThrows;
20 import static org.junit.jupiter.api.Assertions.assertTrue;
21 import static org.junit.jupiter.api.DynamicTest.dynamicTest;
22
23 import java.io.IOException;
24 import java.util.Arrays;
25 import java.util.Collection;
26
27 import org.apache.commons.collections4.Closure;
28 import org.apache.commons.collections4.FunctorException;
29 import org.junit.jupiter.api.DynamicTest;
30 import org.junit.jupiter.api.TestFactory;
31
32 public class CatchAndRethrowClosureTest extends AbstractClosureTest {
33
34 private static <T> Closure<T> generateIOExceptionClosure() {
35 return new CatchAndRethrowClosure<T>() {
36
37 @Override
38 protected void executeAndThrow(final T input) throws IOException {
39 throw new IOException();
40 }
41 };
42 }
43
44 private static <T> Closure<T> generateNoExceptionClosure() {
45 return new CatchAndRethrowClosure<T>() {
46
47 @Override
48 protected void executeAndThrow(final T input) {
49 }
50 };
51 }
52
53 private static <T> Closure<T> generateNullPointerExceptionClosure() {
54 return new CatchAndRethrowClosure<T>() {
55
56 @Override
57 protected void executeAndThrow(final T input) {
58 throw new NullPointerException();
59 }
60 };
61 }
62
63 @Override
64 protected <T> Closure<T> generateClosure() {
65 return generateNoExceptionClosure();
66 }
67
68 @TestFactory
69 public Collection<DynamicTest> testThrowingClosure() {
70
71 return Arrays.asList(
72
73 dynamicTest("Closure NoException", () -> {
74 final Closure<Integer> closure = generateNoExceptionClosure();
75 closure.execute(Integer.valueOf(0));
76 }),
77 dynamicTest("Closure IOException", () -> {
78 final Closure<Integer> closure = generateIOExceptionClosure();
79 final FunctorException thrown = assertThrows(FunctorException.class, () -> closure.execute(Integer.valueOf(0)));
80 assertTrue(thrown.getCause() instanceof IOException);
81 }),
82 dynamicTest("Closure NullPointerException", () -> {
83 final Closure<Integer> closure = generateNullPointerExceptionClosure();
84 assertThrows(NullPointerException.class, () -> closure.execute(Integer.valueOf(0)));
85 })
86
87 );
88 }
89
90 }