1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.io.function;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertFalse;
22 import static org.junit.jupiter.api.Assertions.assertSame;
23 import static org.junit.jupiter.api.Assertions.assertThrows;
24 import static org.junit.jupiter.api.Assertions.assertTrue;
25
26 import java.io.IOException;
27 import java.io.UncheckedIOException;
28 import java.nio.file.Files;
29 import java.nio.file.Path;
30 import java.nio.file.Paths;
31 import java.util.ArrayList;
32 import java.util.List;
33 import java.util.function.Predicate;
34
35 import org.junit.jupiter.api.Test;
36 import org.junit.jupiter.api.function.Executable;
37
38
39
40
41 class IOPredicateTest {
42
43
44 private static final IOPredicate<Path> IS_HIDDEN = Files::isHidden;
45
46 private static final Path PATH_FIXTURE = Paths.get("src/test/resources/org/apache/commons/io/abitmorethan16k.txt");
47
48 private static final Object THROWING_EQUALS = new Object() {
49 @Override
50 public boolean equals(final Object obj) {
51 throw Erase.rethrow(new IOException("Expected"));
52 }
53 @Override
54 public int hashCode() {
55
56 return super.hashCode();
57 }
58 };
59
60 private static final Predicate<Object> THROWING_UNCHECKED_PREDICATE = TestConstants.THROWING_IO_PREDICATE.asPredicate();
61
62 private void assertThrowsChecked(final Executable executable) {
63 assertThrows(IOException.class, executable);
64 }
65
66 private void assertThrowsUnchecked(final Executable executable) {
67 assertThrows(UncheckedIOException.class, executable);
68 }
69
70 @Test
71 void testAndChecked() throws IOException {
72 assertFalse(IS_HIDDEN.and(IS_HIDDEN).test(PATH_FIXTURE));
73 assertTrue(IOPredicate.alwaysTrue().and(IOPredicate.alwaysTrue()).test(PATH_FIXTURE));
74 assertFalse(IOPredicate.alwaysFalse().and(IOPredicate.alwaysTrue()).test(PATH_FIXTURE));
75 assertFalse(IOPredicate.alwaysTrue().and(IOPredicate.alwaysFalse()).test(PATH_FIXTURE));
76 assertFalse(IOPredicate.alwaysFalse().and(IOPredicate.alwaysFalse()).test(PATH_FIXTURE));
77 }
78
79 @Test
80 void testAndUnchecked() {
81 assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.and(THROWING_UNCHECKED_PREDICATE).test(PATH_FIXTURE));
82 }
83
84 @Test
85 void testAsPredicate() throws IOException {
86 new ArrayList<>().removeIf(THROWING_UNCHECKED_PREDICATE);
87 final List<String> list = new ArrayList<>();
88 list.add("A");
89 list.add("B");
90 list.removeIf(Predicate.isEqual("A"));
91 assertFalse(list.contains("A"));
92 list.removeIf(IOPredicate.isEqual("B").asPredicate());
93 assertFalse(list.contains("B"));
94 assertFalse(IS_HIDDEN.test(PATH_FIXTURE));
95 }
96
97 @Test
98 void testFalse() throws IOException {
99 assertFalse(Constants.IO_PREDICATE_FALSE.test("A"));
100
101 final IOPredicate<String> alwaysFalse = IOPredicate.alwaysFalse();
102 assertFalse(alwaysFalse.test("A"));
103 assertEquals(IOPredicate.alwaysFalse(), IOPredicate.alwaysFalse());
104 assertSame(IOPredicate.alwaysFalse(), IOPredicate.alwaysFalse());
105 }
106
107 @Test
108 void testIsEqualChecked() throws IOException {
109 assertThrowsChecked(() -> IOPredicate.isEqual(THROWING_EQUALS).test("B"));
110 assertFalse(IOPredicate.isEqual(null).test("A"));
111 assertTrue(IOPredicate.isEqual("B").test("B"));
112 assertFalse(IOPredicate.isEqual("A").test("B"));
113 assertFalse(IOPredicate.isEqual("B").test("A"));
114 }
115
116 @Test
117 void testIsEqualUnchecked() {
118 assertThrowsUnchecked(() -> IOPredicate.isEqual(THROWING_EQUALS).asPredicate().test("B"));
119 assertFalse(IOPredicate.isEqual(null).asPredicate().test("A"));
120 assertTrue(IOPredicate.isEqual("B").asPredicate().test("B"));
121 assertFalse(IOPredicate.isEqual("A").asPredicate().test("B"));
122 assertFalse(IOPredicate.isEqual("B").asPredicate().test("A"));
123 }
124
125 @Test
126 void testNegateChecked() throws IOException {
127 assertTrue(IS_HIDDEN.negate().test(PATH_FIXTURE));
128 assertFalse(IOPredicate.alwaysTrue().negate().test(PATH_FIXTURE));
129 }
130
131 @Test
132 void testNegateUnchecked() {
133 assertTrue(IS_HIDDEN.negate().asPredicate().test(PATH_FIXTURE));
134 assertTrue(IS_HIDDEN.asPredicate().negate().test(PATH_FIXTURE));
135 assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.negate().test(PATH_FIXTURE));
136 }
137
138 @Test
139 void testOrChecked() throws IOException {
140 assertFalse(IS_HIDDEN.or(IS_HIDDEN).test(PATH_FIXTURE));
141 assertTrue(IOPredicate.alwaysTrue().or(IOPredicate.alwaysFalse()).test(PATH_FIXTURE));
142 assertTrue(IOPredicate.alwaysFalse().or(IOPredicate.alwaysTrue()).test(PATH_FIXTURE));
143 }
144
145 @Test
146 void testOrUnchecked() {
147 assertFalse(IS_HIDDEN.asPredicate().or(e -> false).test(PATH_FIXTURE));
148 assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.or(THROWING_UNCHECKED_PREDICATE).test(PATH_FIXTURE));
149 }
150
151 @Test
152 void testTestChecked() throws IOException {
153 assertThrowsChecked(() -> TestConstants.THROWING_IO_PREDICATE.test(null));
154 assertTrue(Constants.IO_PREDICATE_TRUE.test("A"));
155 }
156
157 @Test
158 void testTestUnchecked() {
159 assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.test(null));
160 assertTrue(Constants.IO_PREDICATE_TRUE.asPredicate().test("A"));
161 }
162
163 @Test
164 void testTrue() throws IOException {
165 assertTrue(Constants.IO_PREDICATE_TRUE.test("A"));
166
167 final IOPredicate<String> alwaysTrue = IOPredicate.alwaysTrue();
168 assertTrue(alwaysTrue.test("A"));
169 assertEquals(IOPredicate.alwaysTrue(), IOPredicate.alwaysTrue());
170 assertSame(IOPredicate.alwaysTrue(), IOPredicate.alwaysTrue());
171 }
172
173 }