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.apache.commons.io.input.ReversedLinesFileReaderParamBlockSizeTest.assertEqualsAndNoLineBreaks;
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21 import static org.junit.jupiter.api.Assertions.assertThrows;
22 import static org.junit.jupiter.api.Assertions.assertTrue;
23
24 import java.io.File;
25 import java.io.IOException;
26 import java.io.UnsupportedEncodingException;
27 import java.net.URISyntaxException;
28 import java.nio.charset.StandardCharsets;
29 import java.util.List;
30
31 import org.apache.commons.io.IOUtils;
32 import org.apache.commons.io.TestResources;
33 import org.junit.jupiter.api.Test;
34 import org.junit.jupiter.params.ParameterizedTest;
35 import org.junit.jupiter.params.provider.MethodSource;
36
37 class ReversedLinesFileReaderSimpleTest {
38
39
40
41
42 @ParameterizedTest
43 @MethodSource("org.apache.commons.io.input.ReversedLinesFileReaderParamBlockSizeTest#blockSizes")
44 void testEmptyFirstLine(final int blockSize) throws Exception {
45 final File testFileEmptyFirstLine = TestResources.getFile("/empty-first-line.bin");
46 try (ReversedLinesFileReader reversedLinesFileReader = new ReversedLinesFileReader(testFileEmptyFirstLine,
47 blockSize, StandardCharsets.US_ASCII.name())) {
48 assertEqualsAndNoLineBreaks("test2", reversedLinesFileReader.readLine());
49 assertEqualsAndNoLineBreaks("", reversedLinesFileReader.readLine());
50 assertEqualsAndNoLineBreaks("test1", reversedLinesFileReader.readLine());
51 assertEqualsAndNoLineBreaks("", reversedLinesFileReader.readLine());
52 }
53 }
54
55 @ParameterizedTest
56 @MethodSource("org.apache.commons.io.input.ReversedLinesFileReaderParamBlockSizeTest#blockSizes")
57 void testFileSizeIsExactMultipleOfBlockSize(final int blockSize) throws URISyntaxException, IOException {
58 final File testFile20Bytes = TestResources.getFile("/test-file-20byteslength.bin");
59 try (ReversedLinesFileReader reversedLinesFileReader = new ReversedLinesFileReader(testFile20Bytes, blockSize,
60 StandardCharsets.ISO_8859_1.name())) {
61 assertEqualsAndNoLineBreaks("987654321", reversedLinesFileReader.readLine());
62 assertEqualsAndNoLineBreaks("123456789", reversedLinesFileReader.readLine());
63 }
64 }
65
66 @ParameterizedTest
67 @MethodSource("org.apache.commons.io.input.ReversedLinesFileReaderParamBlockSizeTest#blockSizes")
68 void testLineCount(final int blockSize) throws URISyntaxException, IOException {
69 final File testFile20Bytes = TestResources.getFile("/test-file-20byteslength.bin");
70 try (ReversedLinesFileReader reversedLinesFileReader = new ReversedLinesFileReader(testFile20Bytes, blockSize,
71 StandardCharsets.ISO_8859_1.name())) {
72 assertThrows(IllegalArgumentException.class, () -> reversedLinesFileReader.readLines(-1));
73 assertTrue(reversedLinesFileReader.readLines(0).isEmpty());
74 final List<String> lines = reversedLinesFileReader.readLines(2);
75 assertEqualsAndNoLineBreaks("987654321", lines.get(0));
76 assertEqualsAndNoLineBreaks("123456789", lines.get(1));
77 assertTrue(reversedLinesFileReader.readLines(0).isEmpty());
78 assertTrue(reversedLinesFileReader.readLines(10000).isEmpty());
79 }
80 }
81
82 @ParameterizedTest
83 @MethodSource("org.apache.commons.io.input.ReversedLinesFileReaderParamBlockSizeTest#blockSizes")
84 void testToString(final int blockSize) throws URISyntaxException, IOException {
85 final File testFile20Bytes = TestResources.getFile("/test-file-20byteslength.bin");
86 try (ReversedLinesFileReader reversedLinesFileReader = new ReversedLinesFileReader(testFile20Bytes, blockSize,
87 StandardCharsets.ISO_8859_1.name())) {
88 assertThrows(IllegalArgumentException.class, () -> reversedLinesFileReader.toString(-1));
89 assertTrue(reversedLinesFileReader.readLines(0).isEmpty());
90 final String lines = reversedLinesFileReader.toString(2);
91 assertEquals("123456789" + System.lineSeparator() + "987654321" + System.lineSeparator(), lines);
92 assertTrue(reversedLinesFileReader.toString(0).isEmpty());
93 assertTrue(reversedLinesFileReader.toString(10000).isEmpty());
94 }
95 }
96
97 @Test
98 void testUnsupportedEncodingBig5() throws URISyntaxException {
99 final File testFileEncodingBig5 = TestResources.getFile("/test-file-empty.bin");
100 assertThrows(UnsupportedEncodingException.class,
101 () -> new ReversedLinesFileReader(testFileEncodingBig5, IOUtils.DEFAULT_BUFFER_SIZE, "Big5").close());
102 }
103
104 @Test
105 void testUnsupportedEncodingUTF16() throws URISyntaxException {
106 final File testFileEmpty = TestResources.getFile("/test-file-empty.bin");
107 assertThrows(UnsupportedEncodingException.class,
108 () -> new ReversedLinesFileReader(testFileEmpty, IOUtils.DEFAULT_BUFFER_SIZE, StandardCharsets.UTF_16.name()).close());
109 }
110 }