This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-csv.git
The following commit(s) were added to refs/heads/master by this push:
new dbdd56c8 [CSV-147] Better error message during faulty CSV record read
#347
dbdd56c8 is described below
commit dbdd56c8a0d47855b3a854758b0324442c6e7c52
Author: Gary Gregory <[email protected]>
AuthorDate: Wed Sep 13 08:58:58 2023 -0400
[CSV-147] Better error message during faulty CSV record read #347
Clean up new test
---
src/changes/changes.xml | 1 +
.../java/org/apache/commons/csv/CSVParserTest.java | 40 +++++++++-------------
2 files changed, 18 insertions(+), 23 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 8d38fc4d..61f0ebda 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -48,6 +48,7 @@
<action type="fix" dev="ggregory" due-to="Seth Falco, Bruno P.
Kinoshita">Document duplicate header behavior #309.</action>
<action type="fix" dev="ggregory" due-to="jkbkupczyk">Add missing docs
#328.</action>
<action type="fix" dev="ggregory"
due-to="step-security-bot">[StepSecurity] CI: Harden GitHub Actions #329,
#330.</action>
+ <action type="fix" issue="CSV-147" dev="ggregory" due-to="Steven
Peterson, Benedikt Ritter, Gary Gregory, Joerg Schaible, Buddhi De Silva,
Elliotte Rusty Harold">Better error message during faulty CSV record read
#347.</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump
commons-io:commons-io: from 2.11.0 to 2.13.0.</action>
<action type="update" dev="ggregory" due-to="Gary Gregory">Bump
commons-parent from 57 to 62.</action>
diff --git a/src/test/java/org/apache/commons/csv/CSVParserTest.java
b/src/test/java/org/apache/commons/csv/CSVParserTest.java
index b50bdfb4..1ccac64b 100644
--- a/src/test/java/org/apache/commons/csv/CSVParserTest.java
+++ b/src/test/java/org/apache/commons/csv/CSVParserTest.java
@@ -1523,6 +1523,23 @@ public class CSVParserTest {
assertArrayEquals(new String[] { "x", "y", "z" },
list.get(2).values());
}}
+ @Test
+ public void testThrowExceptionWithLineAndPosition() throws IOException {
+ final String csvContent =
"col1,col2,col3,col4,col5,col6,col7,col8,col9,col10\nrec1,rec2,rec3,rec4,rec5,rec6,rec7,rec8,\"\"rec9\"\",rec10";
+ final StringReader stringReader = new StringReader(csvContent);
+ // @formatter:off
+ final CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
+ .setHeader()
+ .setSkipHeaderRecord(true)
+ .build();
+ // @formatter:on
+
+ try (CSVParser csvParser = csvFormat.parse(stringReader)) {
+ final Exception exception =
assertThrows(UncheckedIOException.class, csvParser::getRecords);
+ assertTrue(exception.getMessage().contains("Invalid char between
encapsulated token and delimiter at line: 2, position: 94"));
+ }
+ }
+
@Test
public void testTrailingDelimiter() throws Exception {
final Reader in = new
StringReader("a,a,a,\n\"1\",\"2\",\"3\",\nx,y,z,");
@@ -1641,27 +1658,4 @@ public class CSVParserTest {
parser.close();
}
-
- @Test
- public void testFaultyCSVShouldThrowExceptionWithLineAndPosition() throws
IOException {
- String csvContent =
"col1,col2,col3,col4,col5,col6,col7,col8,col9,col10\n" +
- "rec1,rec2,rec3,rec4,rec5,rec6,rec7,rec8,\"\"rec9\"\",rec10";
-
- StringReader stringReader = new StringReader(csvContent);
- CSVFormat csvFormat = CSVFormat.DEFAULT.builder()
- .setHeader()
- .setSkipHeaderRecord(true)
- .build();
-
- CSVParser csvParser = csvFormat.parse(stringReader);
- Exception exception = assertThrows(UncheckedIOException.class, () -> {
- for (CSVRecord record : csvParser) {
- // this will result in exception due to parsing issue
- }
- });
- String expectedErrorMessage = "Invalid char between encapsulated token
and delimiter at " +
- "line: 2, position: 94";
- String actualMessage = exception.getMessage();
- assertTrue(actualMessage.contains(expectedErrorMessage));
- }
}