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 <garydgreg...@gmail.com>
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));
-    }
 }

Reply via email to