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.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertFalse;
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.io.IOException;
25 import java.io.Reader;
26 import java.io.StringReader;
27 import java.util.UUID;
28
29 import org.apache.commons.io.TaggedIOException;
30 import org.junit.jupiter.api.Test;
31
32
33
34
35 public class TaggedReaderTest {
36
37 @Test
38 public void testBrokenReader() {
39 final IOException exception = new IOException("test exception");
40 final TaggedReader reader = new TaggedReader(new BrokenReader(exception));
41
42
43 final IOException readyException = assertThrows(IOException.class, reader::ready);
44 assertTrue(reader.isCauseOf(readyException));
45 final IOException rethrownReadyException = assertThrows(IOException.class, () -> reader.throwIfCauseOf(readyException));
46 assertEquals(exception, rethrownReadyException);
47
48
49 final IOException readException = assertThrows(IOException.class, reader::read);
50 assertTrue(reader.isCauseOf(readException));
51 final IOException rethrownReadException = assertThrows(IOException.class, () -> reader.throwIfCauseOf(readException));
52 assertEquals(exception, rethrownReadException);
53
54
55 final IOException closeException = assertThrows(IOException.class, reader::close);
56 assertTrue(reader.isCauseOf(closeException));
57 final IOException rethrownCloseException = assertThrows(IOException.class, () -> reader.throwIfCauseOf(closeException));
58 assertEquals(exception, rethrownCloseException);
59 }
60
61 @Test
62 public void testEmptyReader() throws IOException {
63 try (Reader reader = new TaggedReader(ClosedReader.INSTANCE)) {
64 assertFalse(reader.ready());
65 assertEquals(-1, reader.read());
66 assertEquals(-1, reader.read(new char[1]));
67 assertEquals(-1, reader.read(new char[1], 0, 1));
68 }
69 }
70
71 @Test
72 public void testNormalReader() throws IOException {
73 try (Reader reader = new TaggedReader(new StringReader("abc"))) {
74 assertTrue(reader.ready());
75 assertEquals('a', reader.read());
76 final char[] buffer = new char[1];
77 assertEquals(1, reader.read(buffer));
78 assertEquals('b', buffer[0]);
79 assertEquals(1, reader.read(buffer, 0, 1));
80 assertEquals('c', buffer[0]);
81 assertEquals(-1, reader.read());
82 }
83 }
84
85 @Test
86 public void testOtherException() throws Exception {
87 final IOException exception = new IOException("test exception");
88 try (TaggedReader reader = new TaggedReader(ClosedReader.INSTANCE)) {
89
90 assertFalse(reader.isCauseOf(exception));
91 assertFalse(reader.isCauseOf(new TaggedIOException(exception, UUID.randomUUID())));
92
93 reader.throwIfCauseOf(exception);
94
95 reader.throwIfCauseOf(new TaggedIOException(exception, UUID.randomUUID()));
96 }
97 }
98
99 }