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  package org.apache.commons.io.input;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  import static org.junit.jupiter.api.Assertions.assertThrows;
21  import static org.junit.jupiter.api.Assertions.assertTrue;
22  
23  import java.io.IOException;
24  import java.io.Reader;
25  import java.io.StringReader;
26  import java.io.UncheckedIOException;
27  import java.nio.CharBuffer;
28  
29  import org.apache.commons.io.IOUtils;
30  import org.junit.jupiter.api.BeforeEach;
31  import org.junit.jupiter.api.Test;
32  
33  /**
34   * Tests {@link UncheckedFilterReader}.
35   */
36  public class UncheckedFilterReaderTest {
37  
38      private UncheckedFilterReader ucStringReader;
39      private UncheckedFilterReader ucBrokenReader;
40      private IOException exception = new IOException("test exception");
41  
42      @SuppressWarnings("resource")
43      @BeforeEach
44      public void beforeEach() {
45          ucStringReader = UncheckedFilterReader.builder().setReader(new StringReader("01")).get();
46          exception = new IOException("test exception");
47          ucBrokenReader = UncheckedFilterReader.builder().setReader(new BrokenReader(exception)).get();
48      }
49  
50      @Test
51      public void testClose() {
52          ucStringReader.close();
53          assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read());
54      }
55  
56      @Test
57      public void testCloseThrows() {
58          assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.close()).getCause());
59      }
60  
61      @Test
62      public void testMarkReset() {
63          ucStringReader.mark(10);
64          final int c = ucStringReader.read();
65          ucStringReader.reset();
66          assertEquals(c, ucStringReader.read());
67      }
68  
69      @Test
70      public void testMarkThrows() {
71          try (UncheckedFilterReader closedReader = UncheckedFilterReader.builder().setReader(ClosedReader.INSTANCE).get()) {
72              closedReader.close();
73              assertThrows(UncheckedIOException.class, () -> closedReader.mark(1));
74          }
75      }
76  
77      @Test
78      public void testRead() {
79          final Reader reader = ucStringReader;
80          try (UncheckedFilterReader uncheckedReader = UncheckedFilterReader.builder().setReader(reader).get()) {
81              assertEquals('0', uncheckedReader.read());
82              assertEquals('1', uncheckedReader.read());
83              assertEquals(IOUtils.EOF, uncheckedReader.read());
84              assertEquals(IOUtils.EOF, uncheckedReader.read());
85          }
86      }
87  
88      @Test
89      public void testReadCharArray() {
90          final Reader reader = ucStringReader;
91          try (UncheckedFilterReader uncheckedReader = UncheckedFilterReader.builder().setReader(reader).get()) {
92              final char[] array = new char[1];
93              assertEquals(1, uncheckedReader.read(array));
94              assertEquals('0', array[0]);
95              array[0] = 0;
96              assertEquals(1, uncheckedReader.read(array));
97              assertEquals('1', array[0]);
98              array[0] = 0;
99              assertEquals(IOUtils.EOF, uncheckedReader.read(array));
100             assertEquals(0, array[0]);
101             assertEquals(IOUtils.EOF, uncheckedReader.read(array));
102             assertEquals(0, array[0]);
103         }
104     }
105 
106     @Test
107     public void testReadCharArrayIndexed() {
108         final Reader reader = ucStringReader;
109         try (UncheckedFilterReader uncheckedReader = UncheckedFilterReader.builder().setReader(reader).get()) {
110             final char[] array = new char[1];
111             assertEquals(1, uncheckedReader.read(array, 0, 1));
112             assertEquals('0', array[0]);
113             array[0] = 0;
114             assertEquals(1, uncheckedReader.read(array, 0, 1));
115             assertEquals('1', array[0]);
116             array[0] = 0;
117             assertEquals(IOUtils.EOF, uncheckedReader.read(array, 0, 1));
118             assertEquals(0, array[0]);
119             assertEquals(IOUtils.EOF, uncheckedReader.read(array, 0, 1));
120             assertEquals(0, array[0]);
121         }
122     }
123 
124     @Test
125     public void testReadCharArrayIndexedThrows() {
126         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read(new char[1], 0, 1)).getCause());
127     }
128 
129     @Test
130     public void testReadCharArrayThrows() {
131         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read(new char[1])).getCause());
132     }
133 
134     @Test
135     public void testReadCharBuffer() {
136         final Reader reader = ucStringReader;
137         try (UncheckedFilterReader uncheckedReader = UncheckedFilterReader.builder().setReader(reader).get()) {
138             final CharBuffer buffer = CharBuffer.wrap(new char[1]);
139             assertEquals(1, uncheckedReader.read(buffer));
140             buffer.flip();
141             assertEquals('0', buffer.charAt(0));
142             buffer.put(0, (char) 0);
143             assertEquals(1, uncheckedReader.read(buffer));
144             buffer.flip();
145             assertEquals('1', buffer.charAt(0));
146             buffer.put(0, (char) 0);
147             assertEquals(IOUtils.EOF, uncheckedReader.read(buffer));
148             buffer.flip();
149             assertEquals(0, buffer.length());
150             assertEquals(0, uncheckedReader.read(buffer));
151             buffer.flip();
152             assertEquals(0, buffer.length());
153         }
154     }
155 
156     @Test
157     public void testReadCharBufferThrows() {
158         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read(CharBuffer.wrap(new char[1]))).getCause());
159     }
160 
161     @Test
162     public void testReadThrows() {
163         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read()).getCause());
164     }
165 
166     @Test
167     public void testReady() {
168         assertTrue(ucStringReader.ready());
169     }
170 
171     @Test
172     public void testReadyThrows() {
173         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.ready()).getCause());
174     }
175 
176     @Test
177     public void testResetThrows() {
178         try (UncheckedFilterReader closedReader = UncheckedFilterReader.builder().setReader(ClosedReader.INSTANCE).get()) {
179             closedReader.close();
180             assertThrows(UncheckedIOException.class, () -> ucBrokenReader.reset());
181         }
182     }
183 
184     @Test
185     public void testSkip() {
186         assertEquals(1, ucStringReader.skip(1));
187     }
188 
189     @Test
190     public void testSkipThrows() {
191         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.skip(1)).getCause());
192     }
193 
194 }