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