1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io.input;
18
19 import static org.apache.commons.io.IOUtils.EOF;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively;
22
23 import java.io.IOException;
24 import java.io.StringReader;
25 import java.time.Duration;
26 import java.util.HashSet;
27 import java.util.Set;
28
29 import org.apache.commons.io.output.StringBuilderWriter;
30 import org.junit.jupiter.api.Test;
31
32 public class CharacterSetFilterReaderTest {
33
34 private static final String STRING_FIXTURE = "ab";
35
36 @Test
37 public void testInputSize0FilterSize0() throws IOException {
38 final StringReader input = new StringReader("");
39 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, new HashSet<>(0))) {
40 assertEquals(-1, reader.read());
41 }
42 }
43
44 @Test
45 public void testInputSize0FilterSize1() throws IOException {
46 final StringReader input = new StringReader("");
47 final HashSet<Integer> codePoints = new HashSet<>();
48 codePoints.add(Integer.valueOf('a'));
49 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
50 assertEquals(-1, reader.read());
51 }
52 }
53
54 @Test
55 public void testInputSize0NullFilter() throws IOException {
56 final StringReader input = new StringReader("");
57 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, (Set<Integer>) null)) {
58 assertEquals(-1, reader.read());
59 }
60 }
61
62 @Test
63 public void testInputSize1FilterSize1() throws IOException {
64 try (StringReader input = new StringReader("a")) {
65 final HashSet<Integer> codePoints = new HashSet<>();
66 codePoints.add(Integer.valueOf('a'));
67 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
68 assertEquals(-1, reader.read());
69 }
70 }
71 }
72
73 @Test
74 public void testInputSize2FilterSize1FilterAll() throws IOException {
75 final StringReader input = new StringReader("aa");
76 final HashSet<Integer> codePoints = new HashSet<>();
77 codePoints.add(Integer.valueOf('a'));
78 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
79 assertEquals(-1, reader.read());
80 }
81 }
82
83 @Test
84 public void testInputSize2FilterSize1FilterFirst() throws IOException {
85 final StringReader input = new StringReader(STRING_FIXTURE);
86 final HashSet<Integer> codePoints = new HashSet<>();
87 codePoints.add(Integer.valueOf('a'));
88 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
89 assertEquals('b', reader.read());
90 assertEquals(-1, reader.read());
91 }
92 }
93
94 @Test
95 public void testInputSize2FilterSize1FilterLast() throws IOException {
96 final StringReader input = new StringReader(STRING_FIXTURE);
97 final HashSet<Integer> codePoints = new HashSet<>();
98 codePoints.add(Integer.valueOf('b'));
99 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
100 assertEquals('a', reader.read());
101 assertEquals(-1, reader.read());
102 }
103 }
104
105 @Test
106 public void testInputSize2FilterSize2FilterFirst() throws IOException {
107 final StringReader input = new StringReader(STRING_FIXTURE);
108 final HashSet<Integer> codePoints = new HashSet<>();
109 codePoints.add(Integer.valueOf('a'));
110 codePoints.add(Integer.valueOf('y'));
111 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
112 assertEquals('b', reader.read());
113 assertEquals(-1, reader.read());
114 }
115 }
116
117 @Test
118 public void testInputSize2FilterSize2FilterLast() throws IOException {
119 final StringReader input = new StringReader(STRING_FIXTURE);
120 final HashSet<Integer> codePoints = new HashSet<>();
121 codePoints.add(Integer.valueOf('x'));
122 codePoints.add(Integer.valueOf('b'));
123 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
124 assertEquals('a', reader.read());
125 assertEquals(-1, reader.read());
126 }
127 }
128
129 @Test
130 public void testInputSize2FilterSize2FilterNone() throws IOException {
131 final StringReader input = new StringReader(STRING_FIXTURE);
132 final HashSet<Integer> codePoints = new HashSet<>();
133 codePoints.add(Integer.valueOf('x'));
134 codePoints.add(Integer.valueOf('y'));
135 try (CharacterSetFilterReader reader = new CharacterSetFilterReader(input, codePoints)) {
136 assertEquals('a', reader.read());
137 assertEquals('b', reader.read());
138 }
139 }
140
141 @Test
142 public void testReadFilteringEOF() {
143 final StringReader input = new StringReader(STRING_FIXTURE);
144 assertTimeoutPreemptively(Duration.ofMillis(500), () -> {
145 try (StringBuilderWriter output = new StringBuilderWriter();
146 CharacterSetFilterReader reader = new CharacterSetFilterReader(input, EOF)) {
147 int c;
148 while ((c = reader.read()) != EOF) {
149 output.write(c);
150 }
151 assertEquals(STRING_FIXTURE, output.toString());
152 }
153 });
154 }
155 }