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.input;
19  
20  import static org.junit.jupiter.api.Assertions.assertEquals;
21  import static org.junit.jupiter.api.Assertions.assertThrows;
22  
23  import java.io.BufferedInputStream;
24  import java.io.IOException;
25  import java.io.InputStream;
26  import java.io.UncheckedIOException;
27  
28  import org.apache.commons.io.IOUtils;
29  import org.junit.jupiter.api.BeforeEach;
30  import org.junit.jupiter.api.Test;
31  
32  /**
33   * Tests {@link UncheckedFilterInputStream}.
34   */
35  public class UncheckedFilterInputStreamTest {
36  
37      private UncheckedFilterInputStream stringInputStream;
38      private UncheckedFilterInputStream brokenInputStream;
39      private IOException exception = new IOException("test exception");
40  
41      @SuppressWarnings("resource")
42      @BeforeEach
43      public void beforeEach() {
44          stringInputStream = UncheckedFilterInputStream.builder()
45                  .setInputStream(new BufferedInputStream(CharSequenceInputStream.builder().setCharSequence("01").get())).get();
46          exception = new IOException("test exception");
47          brokenInputStream = UncheckedFilterInputStream.builder().setInputStream(new BrokenInputStream(exception)).get();
48      }
49  
50      @Test
51      public void testClose() {
52          stringInputStream.close();
53          assertThrows(UncheckedIOException.class, () -> brokenInputStream.read());
54      }
55  
56      @Test
57      public void testCloseThrows() {
58          assertEquals(exception, assertThrows(UncheckedIOException.class, () -> brokenInputStream.close()).getCause());
59      }
60  
61      @Test
62      public void testMarkReset() {
63          stringInputStream.mark(10);
64          final int c = stringInputStream.read();
65          stringInputStream.reset();
66          assertEquals(c, stringInputStream.read());
67      }
68  
69      @Test
70      public void testRead() {
71          final InputStream inputStream = stringInputStream;
72          try (UncheckedFilterInputStream uncheckedReader = UncheckedFilterInputStream.builder().setInputStream(inputStream).get()) {
73              assertEquals('0', uncheckedReader.read());
74              assertEquals('1', uncheckedReader.read());
75              assertEquals(IOUtils.EOF, uncheckedReader.read());
76              assertEquals(IOUtils.EOF, uncheckedReader.read());
77          }
78      }
79  
80      @Test
81      public void testReadByteArray() {
82          final InputStream inputStream = stringInputStream;
83          try (UncheckedFilterInputStream uncheckedReader = UncheckedFilterInputStream.builder().setInputStream(inputStream).get()) {
84              final byte[] array = new byte[1];
85              assertEquals(1, uncheckedReader.read(array));
86              assertEquals('0', array[0]);
87              array[0] = 0;
88              assertEquals(1, uncheckedReader.read(array));
89              assertEquals('1', array[0]);
90              array[0] = 0;
91              assertEquals(IOUtils.EOF, uncheckedReader.read(array));
92              assertEquals(0, array[0]);
93              assertEquals(IOUtils.EOF, uncheckedReader.read(array));
94              assertEquals(0, array[0]);
95          }
96      }
97  
98      @Test
99      public void testReadByteArrayIndexed() {
100         final InputStream inputStream = stringInputStream;
101         try (UncheckedFilterInputStream uncheckedReader = UncheckedFilterInputStream.builder().setInputStream(inputStream).get()) {
102             final byte[] array = new byte[1];
103             assertEquals(1, uncheckedReader.read(array, 0, 1));
104             assertEquals('0', array[0]);
105             array[0] = 0;
106             assertEquals(1, uncheckedReader.read(array, 0, 1));
107             assertEquals('1', array[0]);
108             array[0] = 0;
109             assertEquals(IOUtils.EOF, uncheckedReader.read(array, 0, 1));
110             assertEquals(0, array[0]);
111             assertEquals(IOUtils.EOF, uncheckedReader.read(array, 0, 1));
112             assertEquals(0, array[0]);
113         }
114     }
115 
116     @Test
117     public void testReadByteArrayIndexedThrows() {
118         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> brokenInputStream.read(new byte[1], 0, 1)).getCause());
119     }
120 
121     @Test
122     public void testReadByteArrayThrows() {
123         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> brokenInputStream.read(new byte[1])).getCause());
124     }
125 
126     @Test
127     public void testReadThrows() {
128         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> brokenInputStream.read()).getCause());
129     }
130 
131     @Test
132     public void testResetThrows() {
133         try (UncheckedFilterInputStream closedReader = UncheckedFilterInputStream.builder().setInputStream(ClosedInputStream.INSTANCE).get()) {
134             closedReader.close();
135             assertThrows(UncheckedIOException.class, () -> brokenInputStream.reset());
136         }
137     }
138 
139     @Test
140     public void testSkip() {
141         assertEquals(1, stringInputStream.skip(1));
142     }
143 
144     @Test
145     public void testSkipThrows() {
146         assertEquals(exception, assertThrows(UncheckedIOException.class, () -> brokenInputStream.skip(1)).getCause());
147     }
148 
149 }