1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.csv;
19
20 import static org.apache.commons.csv.Constants.END_OF_STREAM;
21 import static org.apache.commons.csv.Constants.UNDEFINED;
22 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertNull;
25
26 import java.io.StringReader;
27
28 import org.junit.jupiter.api.Test;
29
30
31
32
33 public class ExtendedBufferedReaderTest {
34
35 private ExtendedBufferedReader createBufferedReader(final String s) {
36 return new ExtendedBufferedReader(new StringReader(s));
37 }
38
39 @Test
40 public void testEmptyInput() throws Exception {
41 try (final ExtendedBufferedReader br = createBufferedReader("")) {
42 assertEquals(END_OF_STREAM, br.read());
43 assertEquals(END_OF_STREAM, br.lookAhead());
44 assertEquals(END_OF_STREAM, br.getLastChar());
45 assertNull(br.readLine());
46 assertEquals(0, br.read(new char[10], 0, 0));
47 }
48 }
49
50
51
52
53
54 @Test
55 public void testReadChar() throws Exception {
56 final String LF = "\n";
57 final String CR = "\r";
58 final String CRLF = CR + LF;
59 final String LFCR = LF + CR;
60 final String test = "a" + LF + "b" + CR + "c" + LF + LF + "d" + CR + CR + "e" + LFCR + "f " + CRLF;
61
62 final int EOLeolct = 9;
63
64 try (final ExtendedBufferedReader br = createBufferedReader(test)) {
65 assertEquals(0, br.getCurrentLineNumber());
66 while (br.readLine() != null) {
67
68 }
69 assertEquals(EOLeolct, br.getCurrentLineNumber());
70 }
71 try (final ExtendedBufferedReader br = createBufferedReader(test)) {
72 assertEquals(0, br.getCurrentLineNumber());
73 while (br.read() != -1) {
74
75 }
76 assertEquals(EOLeolct, br.getCurrentLineNumber());
77 }
78 try (final ExtendedBufferedReader br = createBufferedReader(test)) {
79 assertEquals(0, br.getCurrentLineNumber());
80 final char[] buff = new char[10];
81 while (br.read(buff, 0, 3) != -1) {
82
83 }
84 assertEquals(EOLeolct, br.getCurrentLineNumber());
85 }
86 }
87
88 @Test
89 public void testReadingInDifferentBuffer() throws Exception {
90 final char[] tmp1 = new char[2], tmp2 = new char[4];
91 try (ExtendedBufferedReader reader = createBufferedReader("1\r\n2\r\n")) {
92 reader.read(tmp1, 0, 2);
93 reader.read(tmp2, 2, 2);
94 assertEquals(2, reader.getCurrentLineNumber());
95 }
96 }
97
98 @Test
99 public void testReadLine() throws Exception {
100 try (final ExtendedBufferedReader br = createBufferedReader("")) {
101 assertNull(br.readLine());
102 }
103 try (final ExtendedBufferedReader br = createBufferedReader("\n")) {
104 assertEquals("", br.readLine());
105 assertNull(br.readLine());
106 }
107 try (final ExtendedBufferedReader br = createBufferedReader("foo\n\nhello")) {
108 assertEquals(0, br.getCurrentLineNumber());
109 assertEquals("foo", br.readLine());
110 assertEquals(1, br.getCurrentLineNumber());
111 assertEquals("", br.readLine());
112 assertEquals(2, br.getCurrentLineNumber());
113 assertEquals("hello", br.readLine());
114 assertEquals(3, br.getCurrentLineNumber());
115 assertNull(br.readLine());
116 assertEquals(3, br.getCurrentLineNumber());
117 }
118 try (final ExtendedBufferedReader br = createBufferedReader("foo\n\nhello")) {
119 assertEquals('f', br.read());
120 assertEquals('o', br.lookAhead());
121 assertEquals("oo", br.readLine());
122 assertEquals(1, br.getCurrentLineNumber());
123 assertEquals('\n', br.lookAhead());
124 assertEquals("", br.readLine());
125 assertEquals(2, br.getCurrentLineNumber());
126 assertEquals('h', br.lookAhead());
127 assertEquals("hello", br.readLine());
128 assertNull(br.readLine());
129 assertEquals(3, br.getCurrentLineNumber());
130 }
131 try (final ExtendedBufferedReader br = createBufferedReader("foo\rbaar\r\nfoo")) {
132 assertEquals("foo", br.readLine());
133 assertEquals('b', br.lookAhead());
134 assertEquals("baar", br.readLine());
135 assertEquals('f', br.lookAhead());
136 assertEquals("foo", br.readLine());
137 assertNull(br.readLine());
138 }
139 }
140
141 @Test
142 public void testReadLookahead1() throws Exception {
143 try (final ExtendedBufferedReader br = createBufferedReader("1\n2\r3\n")) {
144 assertEquals(0, br.getCurrentLineNumber());
145 assertEquals('1', br.lookAhead());
146 assertEquals(UNDEFINED, br.getLastChar());
147 assertEquals(0, br.getCurrentLineNumber());
148 assertEquals('1', br.read());
149 assertEquals('1', br.getLastChar());
150
151 assertEquals(1, br.getCurrentLineNumber());
152 assertEquals('\n', br.lookAhead());
153 assertEquals(1, br.getCurrentLineNumber());
154 assertEquals('1', br.getLastChar());
155 assertEquals('\n', br.read());
156 assertEquals(1, br.getCurrentLineNumber());
157 assertEquals('\n', br.getLastChar());
158 assertEquals(1, br.getCurrentLineNumber());
159
160 assertEquals('2', br.lookAhead());
161 assertEquals(1, br.getCurrentLineNumber());
162 assertEquals('\n', br.getLastChar());
163 assertEquals(1, br.getCurrentLineNumber());
164 assertEquals('2', br.read());
165 assertEquals(2, br.getCurrentLineNumber());
166 assertEquals('2', br.getLastChar());
167
168 assertEquals('\r', br.lookAhead());
169 assertEquals(2, br.getCurrentLineNumber());
170 assertEquals('2', br.getLastChar());
171 assertEquals('\r', br.read());
172 assertEquals('\r', br.getLastChar());
173 assertEquals(2, br.getCurrentLineNumber());
174
175 assertEquals('3', br.lookAhead());
176 assertEquals('\r', br.getLastChar());
177 assertEquals('3', br.read());
178 assertEquals('3', br.getLastChar());
179 assertEquals(3, br.getCurrentLineNumber());
180
181 assertEquals('\n', br.lookAhead());
182 assertEquals(3, br.getCurrentLineNumber());
183 assertEquals('3', br.getLastChar());
184 assertEquals('\n', br.read());
185 assertEquals(3, br.getCurrentLineNumber());
186 assertEquals('\n', br.getLastChar());
187 assertEquals(3, br.getCurrentLineNumber());
188
189 assertEquals(END_OF_STREAM, br.lookAhead());
190 assertEquals('\n', br.getLastChar());
191 assertEquals(END_OF_STREAM, br.read());
192 assertEquals(END_OF_STREAM, br.getLastChar());
193 assertEquals(END_OF_STREAM, br.read());
194 assertEquals(END_OF_STREAM, br.lookAhead());
195 assertEquals(3, br.getCurrentLineNumber());
196
197 }
198 }
199
200 @Test
201 public void testReadLookahead2() throws Exception {
202 final char[] ref = new char[5];
203 final char[] res = new char[5];
204
205 try (final ExtendedBufferedReader br = createBufferedReader("abcdefg")) {
206 ref[0] = 'a';
207 ref[1] = 'b';
208 ref[2] = 'c';
209 assertEquals(3, br.read(res, 0, 3));
210 assertArrayEquals(ref, res);
211 assertEquals('c', br.getLastChar());
212
213 assertEquals('d', br.lookAhead());
214 ref[4] = 'd';
215 assertEquals(1, br.read(res, 4, 1));
216 assertArrayEquals(ref, res);
217 assertEquals('d', br.getLastChar());
218 }
219 }
220 }