View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
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   * Tests {@link IOPredicate}.
40   */
41  public class IOPredicateTest {
42  
43      /** Files::isHidden throws IOException. */
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      };
54  
55      private static final Predicate<Object> THROWING_UNCHECKED_PREDICATE = TestConstants.THROWING_IO_PREDICATE.asPredicate();
56  
57      private void assertThrowsChecked(final Executable executable) {
58          assertThrows(IOException.class, executable);
59      }
60  
61      private void assertThrowsUnchecked(final Executable executable) {
62          assertThrows(UncheckedIOException.class, executable);
63      }
64  
65      @Test
66      public void testAndChecked() throws IOException {
67          assertFalse(IS_HIDDEN.and(IS_HIDDEN).test(PATH_FIXTURE));
68          assertTrue(IOPredicate.alwaysTrue().and(IOPredicate.alwaysTrue()).test(PATH_FIXTURE));
69          assertFalse(IOPredicate.alwaysFalse().and(IOPredicate.alwaysTrue()).test(PATH_FIXTURE));
70          assertFalse(IOPredicate.alwaysTrue().and(IOPredicate.alwaysFalse()).test(PATH_FIXTURE));
71          assertFalse(IOPredicate.alwaysFalse().and(IOPredicate.alwaysFalse()).test(PATH_FIXTURE));
72      }
73  
74      @Test
75      public void testAndUnchecked() {
76          assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.and(THROWING_UNCHECKED_PREDICATE).test(PATH_FIXTURE));
77      }
78  
79      @Test
80      public void testAsPredicate() throws IOException {
81          new ArrayList<>().removeIf(THROWING_UNCHECKED_PREDICATE);
82          final List<String> list = new ArrayList<>();
83          list.add("A");
84          list.add("B");
85          list.removeIf(Predicate.isEqual("A"));
86          assertFalse(list.contains("A"));
87          list.removeIf(IOPredicate.isEqual("B").asPredicate());
88          assertFalse(list.contains("B"));
89          assertFalse(IS_HIDDEN.test(PATH_FIXTURE));
90      }
91  
92      @Test
93      public void testFalse() throws IOException {
94          assertFalse(Constants.IO_PREDICATE_FALSE.test("A"));
95          // Make sure we keep the argument type
96          final IOPredicate<String> alwaysFalse = IOPredicate.alwaysFalse();
97          assertFalse(alwaysFalse.test("A"));
98          assertEquals(IOPredicate.alwaysFalse(), IOPredicate.alwaysFalse());
99          assertSame(IOPredicate.alwaysFalse(), IOPredicate.alwaysFalse());
100     }
101 
102     @Test
103     public void testIsEqualChecked() throws IOException {
104         assertThrowsChecked(() -> IOPredicate.isEqual(THROWING_EQUALS).test("B"));
105         assertFalse(IOPredicate.isEqual(null).test("A"));
106         assertTrue(IOPredicate.isEqual("B").test("B"));
107         assertFalse(IOPredicate.isEqual("A").test("B"));
108         assertFalse(IOPredicate.isEqual("B").test("A"));
109     }
110 
111     @Test
112     public void testIsEqualUnchecked() {
113         assertThrowsUnchecked(() -> IOPredicate.isEqual(THROWING_EQUALS).asPredicate().test("B"));
114         assertFalse(IOPredicate.isEqual(null).asPredicate().test("A"));
115         assertTrue(IOPredicate.isEqual("B").asPredicate().test("B"));
116         assertFalse(IOPredicate.isEqual("A").asPredicate().test("B"));
117         assertFalse(IOPredicate.isEqual("B").asPredicate().test("A"));
118     }
119 
120     @Test
121     public void testNegateChecked() throws IOException {
122         assertTrue(IS_HIDDEN.negate().test(PATH_FIXTURE));
123         assertFalse(IOPredicate.alwaysTrue().negate().test(PATH_FIXTURE));
124     }
125 
126     @Test
127     public void testNegateUnchecked() {
128         assertTrue(IS_HIDDEN.negate().asPredicate().test(PATH_FIXTURE));
129         assertTrue(IS_HIDDEN.asPredicate().negate().test(PATH_FIXTURE));
130         assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.negate().test(PATH_FIXTURE));
131     }
132 
133     @Test
134     public void testOrChecked() throws IOException {
135         assertFalse(IS_HIDDEN.or(IS_HIDDEN).test(PATH_FIXTURE));
136         assertTrue(IOPredicate.alwaysTrue().or(IOPredicate.alwaysFalse()).test(PATH_FIXTURE));
137         assertTrue(IOPredicate.alwaysFalse().or(IOPredicate.alwaysTrue()).test(PATH_FIXTURE));
138     }
139 
140     @Test
141     public void testOrUnchecked() {
142         assertFalse(IS_HIDDEN.asPredicate().or(e -> false).test(PATH_FIXTURE));
143         assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.or(THROWING_UNCHECKED_PREDICATE).test(PATH_FIXTURE));
144     }
145 
146     @Test
147     public void testTestChecked() throws IOException {
148         assertThrowsChecked(() -> TestConstants.THROWING_IO_PREDICATE.test(null));
149         assertTrue(Constants.IO_PREDICATE_TRUE.test("A"));
150     }
151 
152     @Test
153     public void testTestUnchecked() {
154         assertThrowsUnchecked(() -> THROWING_UNCHECKED_PREDICATE.test(null));
155         assertTrue(Constants.IO_PREDICATE_TRUE.asPredicate().test("A"));
156     }
157 
158     @Test
159     public void testTrue() throws IOException {
160         assertTrue(Constants.IO_PREDICATE_TRUE.test("A"));
161         // Make sure we keep the argument type
162         final IOPredicate<String> alwaysTrue = IOPredicate.alwaysTrue();
163         assertTrue(alwaysTrue.test("A"));
164         assertEquals(IOPredicate.alwaysTrue(), IOPredicate.alwaysTrue());
165         assertSame(IOPredicate.alwaysTrue(), IOPredicate.alwaysTrue());
166     }
167 
168 }