Skip to content

Commit 93a9aff

Browse files
committed
[CSV-158] Fix EOL checking for read array in ExtendedBufferedReader.
Clean up new test methods. Sort methods.
1 parent a6ca416 commit 93a9aff

2 files changed

Lines changed: 97 additions & 95 deletions

File tree

src/changes/changes.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
<action issue="CSV-148" type="fix" dev="ggregory" due-to="dota17">Add test cases for withIgnoreSurroundingSpaces() and withTrim() #70.</action>
5959
<action type="fix" dev="ggregory" due-to="Gary Gregory">Update CSVParser.parse(File, Charset, CSVFormat) from IO to NIO.</action>
6060
<action issue="CSV-271" type="fix" dev="ggregory" due-to="Amar Prakash Pandey">Missing separator with print(object) followed by printRecord(Object[]) #157.</action>
61+
<action issue="CSV-158" type="fix" dev="ggregory" due-to="Alexander Bondarev, Benedikt Ritter, Gary Gregory, Chen">Fix EOL checking for read array in ExtendedBufferedReader #5.</action>
6162
<!-- ADD -->
6263
<action issue="CSV-275" type="add" dev="ggregory" due-to="Michael Wyraz, Gary Gregory">Make CSVRecord#toList() public.</action>
6364
<action type="add" dev="ggregory" due-to="Gary Gregory">Add CSVRecord#stream().</action>

src/test/java/org/apache/commons/csv/ExtendedBufferedReaderTest.java

Lines changed: 96 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,14 @@
2828
import org.junit.jupiter.api.Test;
2929

3030
/**
31-
*
31+
* Test {@link ExtendedBufferedReader}.
3232
*/
3333
public class ExtendedBufferedReaderTest {
3434

35+
private ExtendedBufferedReader createBufferedReader(final String s) {
36+
return new ExtendedBufferedReader(new StringReader(s));
37+
}
38+
3539
@Test
3640
public void testEmptyInput() throws Exception {
3741
try (final ExtendedBufferedReader br = createBufferedReader("")) {
@@ -43,6 +47,97 @@ public void testEmptyInput() throws Exception {
4347
}
4448
}
4549

50+
/*
51+
* Test to illustrate https://issues.apache.org/jira/browse/CSV-75
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;// easier to read the string below
60+
final String test = "a" + LF + "b" + CR + "c" + LF + LF + "d" + CR + CR + "e" + LFCR + "f " + CRLF;
61+
// EOL eol EOL EOL eol eol EOL+CR EOL
62+
final int EOLeolct = 9;
63+
64+
try (final ExtendedBufferedReader br = createBufferedReader(test)) {
65+
assertEquals(0, br.getCurrentLineNumber());
66+
while (br.readLine() != null) {
67+
// consume all
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+
// consume all
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+
// consume all
83+
}
84+
assertEquals(EOLeolct, br.getCurrentLineNumber());
85+
}
86+
}
87+
88+
@Test
89+
public void testReadingInDifferentBuffer() throws Exception {
90+
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+
46141
@Test
47142
public void testReadLookahead1() throws Exception {
48143
try (final ExtendedBufferedReader br = createBufferedReader("1\n2\r3\n")) {
@@ -122,98 +217,4 @@ public void testReadLookahead2() throws Exception {
122217
assertEquals('d', br.getLastChar());
123218
}
124219
}
125-
126-
@Test
127-
public void testReadLine() throws Exception {
128-
try (final ExtendedBufferedReader br = createBufferedReader("")) {
129-
assertNull(br.readLine());
130-
}
131-
try (final ExtendedBufferedReader br = createBufferedReader("\n")) {
132-
assertEquals("", br.readLine());
133-
assertNull(br.readLine());
134-
}
135-
try (final ExtendedBufferedReader br = createBufferedReader("foo\n\nhello")) {
136-
assertEquals(0, br.getCurrentLineNumber());
137-
assertEquals("foo", br.readLine());
138-
assertEquals(1, br.getCurrentLineNumber());
139-
assertEquals("", br.readLine());
140-
assertEquals(2, br.getCurrentLineNumber());
141-
assertEquals("hello", br.readLine());
142-
assertEquals(3, br.getCurrentLineNumber());
143-
assertNull(br.readLine());
144-
assertEquals(3, br.getCurrentLineNumber());
145-
}
146-
try (final ExtendedBufferedReader br = createBufferedReader("foo\n\nhello")) {
147-
assertEquals('f', br.read());
148-
assertEquals('o', br.lookAhead());
149-
assertEquals("oo", br.readLine());
150-
assertEquals(1, br.getCurrentLineNumber());
151-
assertEquals('\n', br.lookAhead());
152-
assertEquals("", br.readLine());
153-
assertEquals(2, br.getCurrentLineNumber());
154-
assertEquals('h', br.lookAhead());
155-
assertEquals("hello", br.readLine());
156-
assertNull(br.readLine());
157-
assertEquals(3, br.getCurrentLineNumber());
158-
}
159-
try (final ExtendedBufferedReader br = createBufferedReader("foo\rbaar\r\nfoo")) {
160-
assertEquals("foo", br.readLine());
161-
assertEquals('b', br.lookAhead());
162-
assertEquals("baar", br.readLine());
163-
assertEquals('f', br.lookAhead());
164-
assertEquals("foo", br.readLine());
165-
assertNull(br.readLine());
166-
}
167-
}
168-
169-
/*
170-
* Test to illustrate https://issues.apache.org/jira/browse/CSV-75
171-
*
172-
*/
173-
@Test
174-
public void testReadChar() throws Exception {
175-
final String LF = "\n";
176-
final String CR = "\r";
177-
final String CRLF = CR + LF;
178-
final String LFCR = LF + CR;// easier to read the string below
179-
final String test = "a" + LF + "b" + CR + "c" + LF + LF + "d" + CR + CR + "e" + LFCR + "f " + CRLF;
180-
// EOL eol EOL EOL eol eol EOL+CR EOL
181-
final int EOLeolct = 9;
182-
183-
try (final ExtendedBufferedReader br = createBufferedReader(test)) {
184-
assertEquals(0, br.getCurrentLineNumber());
185-
while (br.readLine() != null) {
186-
// consume all
187-
}
188-
assertEquals(EOLeolct, br.getCurrentLineNumber());
189-
}
190-
try (final ExtendedBufferedReader br = createBufferedReader(test)) {
191-
assertEquals(0, br.getCurrentLineNumber());
192-
while (br.read() != -1) {
193-
// consume all
194-
}
195-
assertEquals(EOLeolct, br.getCurrentLineNumber());
196-
}
197-
try (final ExtendedBufferedReader br = createBufferedReader(test)) {
198-
assertEquals(0, br.getCurrentLineNumber());
199-
final char[] buff = new char[10];
200-
while (br.read(buff, 0, 3) != -1) {
201-
// consume all
202-
}
203-
assertEquals(EOLeolct, br.getCurrentLineNumber());
204-
}
205-
}
206-
207-
@Test
208-
public void testReadingInDifferentBuffer() throws Exception {
209-
char[] tmp1 = new char[2], tmp2 = new char[4];
210-
ExtendedBufferedReader br = createBufferedReader("1\r\n2\r\n");
211-
br.read(tmp1, 0, 2);
212-
br.read(tmp2, 2, 2);
213-
assertEquals(2, br.getCurrentLineNumber());
214-
}
215-
216-
private ExtendedBufferedReader createBufferedReader(final String s) {
217-
return new ExtendedBufferedReader(new StringReader(s));
218-
}
219220
}

0 commit comments

Comments
 (0)