|
22 | 22 | import static org.junit.Assert.assertTrue; |
23 | 23 |
|
24 | 24 | import java.io.BufferedReader; |
| 25 | +import java.io.File; |
| 26 | +import java.io.FileReader; |
25 | 27 | import java.io.IOException; |
| 28 | +import java.io.LineNumberReader; |
26 | 29 | import java.io.Reader; |
27 | 30 | import java.io.StringReader; |
| 31 | +import java.nio.charset.StandardCharsets; |
| 32 | +import java.nio.file.Files; |
| 33 | +import java.nio.file.Path; |
28 | 34 | import java.util.concurrent.atomic.AtomicBoolean; |
29 | 35 |
|
| 36 | +import org.apache.commons.io.FileUtils; |
30 | 37 | import org.junit.Test; |
31 | 38 |
|
32 | | -public class BoundedReaderTest |
33 | | -{ |
34 | | - private final Reader sr = new BufferedReader( new StringReader( "01234567890" ) ); |
| 39 | +public class BoundedReaderTest { |
| 40 | + private static final String STRING_END_NO_EOL = "0\n1\n2"; |
35 | 41 |
|
36 | | - private final Reader shortReader = new BufferedReader( new StringReader( "01" ) ); |
| 42 | + private static final String STRING_END_EOL = "0\n1\n2\n"; |
| 43 | + |
| 44 | + private final Reader sr = new BufferedReader(new StringReader("01234567890")); |
| 45 | + |
| 46 | + private final Reader shortReader = new BufferedReader(new StringReader("01")); |
37 | 47 |
|
38 | 48 | @Test |
39 | 49 | public void readTillEnd() throws IOException { |
@@ -101,7 +111,6 @@ public void markReset() throws IOException { |
101 | 111 | } |
102 | 112 | } |
103 | 113 |
|
104 | | - |
105 | 114 | @Test |
106 | 115 | public void markResetWithMarkOutsideBoundedReaderMax() throws IOException { |
107 | 116 | try (final BoundedReader mr = new BoundedReader(sr, 3)) { |
@@ -181,12 +190,54 @@ public void close() throws IOException { |
181 | 190 | assertTrue(closed.get()); |
182 | 191 | } |
183 | 192 |
|
| 193 | + private void testLineNumberReader(final Reader source) throws IOException { |
| 194 | + try (LineNumberReader reader = new LineNumberReader(new BoundedReader(source, 10_000_000))) { |
| 195 | + while (reader.readLine() != null) { |
| 196 | + // noop |
| 197 | + } |
| 198 | + } |
| 199 | + } |
| 200 | + |
| 201 | + @Test(timeout = 5000) |
| 202 | + public void testLineNumberReaderAndStringReaderLastLineEolNo() throws IOException { |
| 203 | + testLineNumberReader(new StringReader(STRING_END_NO_EOL)); |
| 204 | + } |
| 205 | + |
| 206 | + @Test(timeout = 5000) |
| 207 | + public void testLineNumberReaderAndStringReaderLastLineEolYes() throws IOException { |
| 208 | + testLineNumberReader(new StringReader(STRING_END_EOL)); |
| 209 | + } |
| 210 | + |
| 211 | + @Test(timeout = 5000) |
| 212 | + public void testLineNumberReaderAndFileReaderLastLineEolNo() throws IOException { |
| 213 | + testLineNumberReaderAndFileReaderLastLine(STRING_END_NO_EOL); |
| 214 | + } |
| 215 | + |
| 216 | + @Test(timeout = 5000) |
| 217 | + public void testLineNumberReaderAndFileReaderLastLineEolYes() throws IOException { |
| 218 | + testLineNumberReaderAndFileReaderLastLine(STRING_END_EOL); |
| 219 | + } |
| 220 | + |
| 221 | + public void testLineNumberReaderAndFileReaderLastLine(final String data) throws IOException { |
| 222 | + final Path path = Files.createTempFile(getClass().getSimpleName(), ".txt"); |
| 223 | + try { |
| 224 | + final File file = path.toFile(); |
| 225 | + FileUtils.write(file, data, StandardCharsets.ISO_8859_1); |
| 226 | + try (FileReader source = new FileReader(file)) { |
| 227 | + testLineNumberReader(source); |
| 228 | + } |
| 229 | + } finally { |
| 230 | + Files.delete(path); |
| 231 | + } |
| 232 | + } |
| 233 | + |
184 | 234 | @Test(timeout = 5000) |
185 | 235 | public void testReadBytesEOF() throws IOException { |
186 | | - final BoundedReader mr = new BoundedReader( sr, 3 ); |
187 | | - try ( BufferedReader br = new BufferedReader( mr ) ) { |
| 236 | + final BoundedReader mr = new BoundedReader(sr, 3); |
| 237 | + try (BufferedReader br = new BufferedReader(mr)) { |
188 | 238 | br.readLine(); |
189 | 239 | br.readLine(); |
190 | 240 | } |
191 | 241 | } |
| 242 | + |
192 | 243 | } |
0 commit comments