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 UncheckedBufferedReaderTest {
37  
38      private UncheckedBufferedReader ucStringReader;
39      private UncheckedBufferedReader ucBrokenReader;
40      private IOException exception = new IOException("test exception");
41  
42      @SuppressWarnings("resource")
43      @BeforeEach
44      public void beforeEach() {
45          ucStringReader = UncheckedBufferedReader.builder().setReader(new StringReader("01")).get();
46          exception = new IOException("test exception");
47          ucBrokenReader = UncheckedBufferedReader.builder().setReader(new BrokenReader(exception)).get();
48      }
49  
50      @Test
51      public void testBufferSize() {
52          try (UncheckedBufferedReader uncheckedReader = UncheckedBufferedReader.builder().setReader(new StringReader("0123456789")).setBufferSize(2).get()) {
53              assertEquals('0', uncheckedReader.read());
54          }
55      }
56  
57      @Test
58      public void testClose() {
59          ucStringReader.close();
60          assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read());
61      }
62  
63      @Test
64      public void testCloseThrows() {
65          assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.close()).getCause());
66      }
67  
68      @Test
69      public void testMarkReset() {
70          ucStringReader.mark(10);
71          final int c = ucStringReader.read();
72          ucStringReader.reset();
73          assertEquals(c, ucStringReader.read());
74      }
75  
76      @Test
77      public void testMarkThrows() {
78          try (UncheckedBufferedReader closedReader = UncheckedBufferedReader.builder().setReader(ClosedReader.INSTANCE).get()) {
79              closedReader.close();
80              assertThrows(UncheckedIOException.class, () -> closedReader.mark(1));
81          }
82      }
83  
84      @Test
85      public void testRead() {
86          final Reader reader = ucStringReader;
87          try (UncheckedBufferedReader uncheckedReader = UncheckedBufferedReader.builder().setReader(reader).get()) {
88              assertEquals('0', uncheckedReader.read());
89              assertEquals('1', uncheckedReader.read());
90              assertEquals(IOUtils.EOF, uncheckedReader.read());
91              assertEquals(IOUtils.EOF, uncheckedReader.read());
92          }
93      }
94  
95      @Test
96      public void testReadCharArray() {
97          final Reader reader = ucStringReader;
98          try (UncheckedBufferedReader uncheckedReader = UncheckedBufferedReader.builder().setReader(reader).get()) {
99              final char[] array = new char[1];
100             assertEquals(1, uncheckedReader.read(array));
101             assertEquals('0', array[0]);
102             array[0] = 0;
103             assertEquals(1, uncheckedReader.read(array));
104             assertEquals('1', array[0]);
105             array[0] = 0;
106             assertEquals(IOUtils.EOF, uncheckedReader.read(array));
107             assertEquals(0, array[0]);
108             assertEquals(IOUtils.EOF, uncheckedReader.read(array));
109             assertEquals(0, array[0]);
110         }
111     }
112 
113     @Test
114     public void testReadCharArrayIndexed() {
115         final Reader reader = ucStringReader;
116         try (UncheckedBufferedReader uncheckedReader = UncheckedBufferedReader.builder().setReader(reader).get()) {
117             final char[] array = new char[1];
118             assertEquals(1, uncheckedReader.read(array, 0, 1));
119             assertEquals('0', array[0]);
120             array[0] = 0;
121             assertEquals(1, uncheckedReader.read(array, 0, 1));
122             assertEquals('1', array[0]);
123             array[0] = 0;
124             assertEquals(IOUtils.EOF, uncheckedReader.read(array, 0, 1));
125             assertEquals(0, array[0]);
126             assertEquals(IOUtils.EOF, uncheckedReader.read(array, 0, 1));
127             assertEquals(0, array[0]);
128         }
129     }
130 
131     @Test
132     public void testReadCharArrayIndexedThrows() {
133         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read(new char[1], 0, 1)).getCause());
134     }
135 
136     @Test
137     public void testReadCharArrayThrows() {
138         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read(new char[1])).getCause());
139     }
140 
141     @Test
142     public void testReadCharBuffer() {
143         final Reader reader = ucStringReader;
144         try (UncheckedBufferedReader uncheckedReader = UncheckedBufferedReader.builder().setReader(reader).get()) {
145             final CharBuffer buffer = CharBuffer.wrap(new char[1]);
146             assertEquals(1, uncheckedReader.read(buffer));
147             buffer.flip();
148             assertEquals('0', buffer.charAt(0));
149             buffer.put(0, (char) 0);
150             assertEquals(1, uncheckedReader.read(buffer));
151             buffer.flip();
152             assertEquals('1', buffer.charAt(0));
153             buffer.put(0, (char) 0);
154             assertEquals(IOUtils.EOF, uncheckedReader.read(buffer));
155             buffer.flip();
156             assertEquals(0, buffer.length());
157             assertEquals(0, uncheckedReader.read(buffer));
158             buffer.flip();
159             assertEquals(0, buffer.length());
160         }
161     }
162 
163     @Test
164     public void testReadCharBufferThrows() {
165         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read(CharBuffer.wrap(new char[1]))).getCause());
166     }
167 
168     @Test
169     public void testReadLine() {
170         final Reader reader = ucStringReader;
171         try (UncheckedBufferedReader uncheckedReader = UncheckedBufferedReader.builder().setReader(reader).get()) {
172             assertEquals("01", uncheckedReader.readLine());
173             assertEquals(IOUtils.EOF, uncheckedReader.read());
174             assertEquals(IOUtils.EOF, uncheckedReader.read());
175         }
176     }
177 
178     @Test
179     public void testReadLineThrows() {
180         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.readLine()).getCause());
181     }
182 
183     @Test
184     public void testReadThrows() {
185         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.read()).getCause());
186     }
187 
188     @Test
189     public void testReady() {
190         assertTrue(ucStringReader.ready());
191     }
192 
193     @Test
194     public void testReadyThrows() {
195         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.ready()).getCause());
196     }
197 
198     @Test
199     public void testResetThrows() {
200         try (UncheckedBufferedReader closedReader = UncheckedBufferedReader.builder().setReader(ClosedReader.INSTANCE).get()) {
201             closedReader.close();
202             assertThrows(UncheckedIOException.class, () -> ucBrokenReader.reset());
203         }
204     }
205 
206     @Test
207     public void testSkip() {
208         assertEquals(1, ucStringReader.skip(1));
209     }
210 
211     @Test
212     public void testSkipThrows() {
213         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> ucBrokenReader.skip(1)).getCause());
214     }
215 
216 }