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 8ad07df0 Use try-with-resources 8ad07df0 is described below commit 8ad07df0d453a8066c708a0ff0edce1fdcd474cc Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Sun Oct 23 16:59:56 2022 -0400 Use try-with-resources --- .../java/org/apache/commons/csv/CSVParserTest.java | 278 +++++++++++---------- .../org/apache/commons/csv/CSVPrinterTest.java | 4 +- .../apache/commons/csv/issues/JiraCsv264Test.java | 5 +- .../apache/commons/csv/issues/JiraCsv290Test.java | 24 +- 4 files changed, 169 insertions(+), 142 deletions(-) diff --git a/src/test/java/org/apache/commons/csv/CSVParserTest.java b/src/test/java/org/apache/commons/csv/CSVParserTest.java index ce26ca7b..ae4769f0 100644 --- a/src/test/java/org/apache/commons/csv/CSVParserTest.java +++ b/src/test/java/org/apache/commons/csv/CSVParserTest.java @@ -901,22 +901,25 @@ public class CSVParserTest { @Test public void testHeadersWithNullColumnName() throws IOException { final Reader in = new StringReader("header1,null,header3\n1,2,3\n4,5,6"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader().withNullString("null").withAllowMissingColumnNames().parse(in).iterator(); - final CSVRecord record = records.next(); - // Expect the null header to be missing - assertEquals(Arrays.asList("header1", "header3"), record.getParser().getHeaderNames()); - assertEquals(2, record.getParser().getHeaderMap().size()); + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader().withNullString("null").withAllowMissingColumnNames().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + // Expect the null header to be missing + assertEquals(Arrays.asList("header1", "header3"), record.getParser().getHeaderNames()); + assertEquals(2, record.getParser().getHeaderMap().size()); + } } @Test public void testIgnoreCaseHeaderMapping() throws Exception { final Reader reader = new StringReader("1,2,3"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("One", "TWO", "three").withIgnoreHeaderCase().parse(reader).iterator(); - final CSVRecord record = records.next(); - assertEquals("1", record.get("one")); - assertEquals("2", record.get("two")); - assertEquals("3", record.get("THREE")); - } + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("One", "TWO", "three").withIgnoreHeaderCase().parse(reader)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals("1", record.get("one")); + assertEquals("2", record.get("two")); + assertEquals("3", record.get("THREE")); + }} @Test public void testIgnoreEmptyLines() throws IOException { @@ -938,20 +941,21 @@ public class CSVParserTest { public void testIterator() throws Exception { final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z"); - final Iterator<CSVRecord> iterator = CSVFormat.DEFAULT.parse(in).iterator(); + try (final CSVParser parser = CSVFormat.DEFAULT.parse(in)) { + final Iterator<CSVRecord> iterator = parser.iterator(); - assertTrue(iterator.hasNext()); - assertThrows(UnsupportedOperationException.class, iterator::remove); - assertArrayEquals(new String[] {"a", "b", "c"}, iterator.next().values()); - assertArrayEquals(new String[] {"1", "2", "3"}, iterator.next().values()); - assertTrue(iterator.hasNext()); - assertTrue(iterator.hasNext()); - assertTrue(iterator.hasNext()); - assertArrayEquals(new String[] {"x", "y", "z"}, iterator.next().values()); - assertFalse(iterator.hasNext()); + assertTrue(iterator.hasNext()); + assertThrows(UnsupportedOperationException.class, iterator::remove); + assertArrayEquals(new String[] { "a", "b", "c" }, iterator.next().values()); + assertArrayEquals(new String[] { "1", "2", "3" }, iterator.next().values()); + assertTrue(iterator.hasNext()); + assertTrue(iterator.hasNext()); + assertTrue(iterator.hasNext()); + assertArrayEquals(new String[] { "x", "y", "z" }, iterator.next().values()); + assertFalse(iterator.hasNext()); - assertThrows(NoSuchElementException.class, iterator::next); - } + assertThrows(NoSuchElementException.class, iterator::next); + }} @Test public void testIteratorSequenceBreaking() throws IOException { @@ -1024,35 +1028,37 @@ public class CSVParserTest { @Test public void testMappedButNotSetAsOutlook2007ContactExport() throws Exception { final Reader in = new StringReader("a,b,c\n1,2\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("A", "B", "C").withSkipHeaderRecord().parse(in).iterator(); - CSVRecord record; + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("A", "B", "C").withSkipHeaderRecord().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + CSVRecord record; - // 1st record - record = records.next(); - assertTrue(record.isMapped("A")); - assertTrue(record.isMapped("B")); - assertTrue(record.isMapped("C")); - assertTrue(record.isSet("A")); - assertTrue(record.isSet("B")); - assertFalse(record.isSet("C")); - assertEquals("1", record.get("A")); - assertEquals("2", record.get("B")); - assertFalse(record.isConsistent()); - - // 2nd record - record = records.next(); - assertTrue(record.isMapped("A")); - assertTrue(record.isMapped("B")); - assertTrue(record.isMapped("C")); - assertTrue(record.isSet("A")); - assertTrue(record.isSet("B")); - assertTrue(record.isSet("C")); - assertEquals("x", record.get("A")); - assertEquals("y", record.get("B")); - assertEquals("z", record.get("C")); - assertTrue(record.isConsistent()); + // 1st record + record = records.next(); + assertTrue(record.isMapped("A")); + assertTrue(record.isMapped("B")); + assertTrue(record.isMapped("C")); + assertTrue(record.isSet("A")); + assertTrue(record.isSet("B")); + assertFalse(record.isSet("C")); + assertEquals("1", record.get("A")); + assertEquals("2", record.get("B")); + assertFalse(record.isConsistent()); + + // 2nd record + record = records.next(); + assertTrue(record.isMapped("A")); + assertTrue(record.isMapped("B")); + assertTrue(record.isMapped("C")); + assertTrue(record.isSet("A")); + assertTrue(record.isSet("B")); + assertTrue(record.isSet("C")); + assertEquals("x", record.get("A")); + assertEquals("y", record.get("B")); + assertEquals("z", record.get("C")); + assertTrue(record.isConsistent()); - assertFalse(records.hasNext()); + assertFalse(records.hasNext()); + } } @Test @@ -1113,9 +1119,10 @@ public class CSVParserTest { public void testNotValueCSV() throws IOException { final String source = "#"; final CSVFormat csvFormat = CSVFormat.DEFAULT.withCommentMarker('#'); - final CSVParser csvParser = csvFormat.parse(new StringReader(source)); - final CSVRecord csvRecord = csvParser.nextRecord(); - assertNull(csvRecord); + try (final CSVParser csvParser = csvFormat.parse(new StringReader(source))) { + final CSVRecord csvRecord = csvParser.nextRecord(); + assertNull(csvRecord); + } } @Test @@ -1258,102 +1265,115 @@ public class CSVParserTest { public void testProvidedHeader() throws Exception { final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("A", "B", "C").parse(in).iterator(); + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("A", "B", "C").parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); - for (int i = 0; i < 3; i++) { - assertTrue(records.hasNext()); - final CSVRecord record = records.next(); - assertTrue(record.isMapped("A")); - assertTrue(record.isMapped("B")); - assertTrue(record.isMapped("C")); - assertFalse(record.isMapped("NOT MAPPED")); - assertEquals(record.get(0), record.get("A")); - assertEquals(record.get(1), record.get("B")); - assertEquals(record.get(2), record.get("C")); - } + for (int i = 0; i < 3; i++) { + assertTrue(records.hasNext()); + final CSVRecord record = records.next(); + assertTrue(record.isMapped("A")); + assertTrue(record.isMapped("B")); + assertTrue(record.isMapped("C")); + assertFalse(record.isMapped("NOT MAPPED")); + assertEquals(record.get(0), record.get("A")); + assertEquals(record.get(1), record.get("B")); + assertEquals(record.get(2), record.get("C")); + } - assertFalse(records.hasNext()); + assertFalse(records.hasNext()); + } } @Test public void testProvidedHeaderAuto() throws Exception { final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader().parse(in).iterator(); + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + + for (int i = 0; i < 2; i++) { + assertTrue(records.hasNext()); + final CSVRecord record = records.next(); + assertTrue(record.isMapped("a")); + assertTrue(record.isMapped("b")); + assertTrue(record.isMapped("c")); + assertFalse(record.isMapped("NOT MAPPED")); + assertEquals(record.get(0), record.get("a")); + assertEquals(record.get(1), record.get("b")); + assertEquals(record.get(2), record.get("c")); + } - for (int i = 0; i < 2; i++) { - assertTrue(records.hasNext()); - final CSVRecord record = records.next(); - assertTrue(record.isMapped("a")); - assertTrue(record.isMapped("b")); - assertTrue(record.isMapped("c")); - assertFalse(record.isMapped("NOT MAPPED")); - assertEquals(record.get(0), record.get("a")); - assertEquals(record.get(1), record.get("b")); - assertEquals(record.get(2), record.get("c")); + assertFalse(records.hasNext()); } - - assertFalse(records.hasNext()); } @Test public void testRepeatedHeadersAreReturnedInCSVRecordHeaderNames() throws IOException { final Reader in = new StringReader("header1,header2,header1\n1,2,3\n4,5,6"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withFirstRecordAsHeader().withTrim().parse(in).iterator(); - final CSVRecord record = records.next(); - assertEquals(Arrays.asList("header1", "header2", "header1"), record.getParser().getHeaderNames()); - } + try (final CSVParser parser = CSVFormat.DEFAULT.withFirstRecordAsHeader().withTrim().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals(Arrays.asList("header1", "header2", "header1"), record.getParser().getHeaderNames()); + }} @Test public void testRoundtrip() throws Exception { final StringWriter out = new StringWriter(); - try (final CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT)) { - final String input = "a,b,c\r\n1,2,3\r\nx,y,z\r\n"; - for (final CSVRecord record : CSVParser.parse(input, CSVFormat.DEFAULT)) { + final String data = "a,b,c\r\n1,2,3\r\nx,y,z\r\n"; + try (final CSVPrinter printer = new CSVPrinter(out, CSVFormat.DEFAULT); + final CSVParser parse = CSVParser.parse(data, CSVFormat.DEFAULT)) { + for (final CSVRecord record : parse) { printer.printRecord(record); } - assertEquals(input, out.toString()); + assertEquals(data, out.toString()); } } @Test public void testSkipAutoHeader() throws Exception { final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader().parse(in).iterator(); - final CSVRecord record = records.next(); - assertEquals("1", record.get("a")); - assertEquals("2", record.get("b")); - assertEquals("3", record.get("c")); + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals("1", record.get("a")); + assertEquals("2", record.get("b")); + assertEquals("3", record.get("c")); + } } @Test public void testSkipHeaderOverrideDuplicateHeaders() throws Exception { final Reader in = new StringReader("a,a,a\n1,2,3\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().parse(in).iterator(); - final CSVRecord record = records.next(); - assertEquals("1", record.get("X")); - assertEquals("2", record.get("Y")); - assertEquals("3", record.get("Z")); - } + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals("1", record.get("X")); + assertEquals("2", record.get("Y")); + assertEquals("3", record.get("Z")); + }} @Test public void testSkipSetAltHeaders() throws Exception { final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().parse(in).iterator(); - final CSVRecord record = records.next(); - assertEquals("1", record.get("X")); - assertEquals("2", record.get("Y")); - assertEquals("3", record.get("Z")); + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals("1", record.get("X")); + assertEquals("2", record.get("Y")); + assertEquals("3", record.get("Z")); + } } @Test public void testSkipSetHeader() throws Exception { final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("a", "b", "c").withSkipHeaderRecord().parse(in).iterator(); - final CSVRecord record = records.next(); - assertEquals("1", record.get("a")); - assertEquals("2", record.get("b")); - assertEquals("3", record.get("c")); + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("a", "b", "c").withSkipHeaderRecord().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals("1", record.get("a")); + assertEquals("2", record.get("b")); + assertEquals("3", record.get("c")); + } } @Test @@ -1377,34 +1397,38 @@ public class CSVParserTest { @Test public void testStream() throws Exception { final Reader in = new StringReader("a,b,c\n1,2,3\nx,y,z"); - final List<CSVRecord> list = CSVFormat.DEFAULT.parse(in).stream().collect(Collectors.toList()); - assertFalse(list.isEmpty()); - assertArrayEquals(new String[] {"a", "b", "c"}, list.get(0).values()); - assertArrayEquals(new String[] {"1", "2", "3"}, list.get(1).values()); - assertArrayEquals(new String[] {"x", "y", "z"}, list.get(2).values()); - } + try (final CSVParser parser = CSVFormat.DEFAULT.parse(in)) { + final List<CSVRecord> list = parser.stream().collect(Collectors.toList()); + assertFalse(list.isEmpty()); + assertArrayEquals(new String[] { "a", "b", "c" }, list.get(0).values()); + assertArrayEquals(new String[] { "1", "2", "3" }, list.get(1).values()); + assertArrayEquals(new String[] { "x", "y", "z" }, list.get(2).values()); + }} @Test public void testTrailingDelimiter() throws Exception { final Reader in = new StringReader("a,a,a,\n\"1\",\"2\",\"3\",\nx,y,z,"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().withTrailingDelimiter().parse(in).iterator(); - final CSVRecord record = records.next(); - assertEquals("1", record.get("X")); - assertEquals("2", record.get("Y")); - assertEquals("3", record.get("Z")); - assertEquals(3, record.size()); + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().withTrailingDelimiter().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals("1", record.get("X")); + assertEquals("2", record.get("Y")); + assertEquals("3", record.get("Z")); + assertEquals(3, record.size()); + } } @Test public void testTrim() throws Exception { final Reader in = new StringReader("a,a,a\n\" 1 \",\" 2 \",\" 3 \"\nx,y,z"); - final Iterator<CSVRecord> records = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().withTrim().parse(in).iterator(); - final CSVRecord record = records.next(); - assertEquals("1", record.get("X")); - assertEquals("2", record.get("Y")); - assertEquals("3", record.get("Z")); - assertEquals(3, record.size()); - } + try (final CSVParser parser = CSVFormat.DEFAULT.withHeader("X", "Y", "Z").withSkipHeaderRecord().withTrim().parse(in)) { + final Iterator<CSVRecord> records = parser.iterator(); + final CSVRecord record = records.next(); + assertEquals("1", record.get("X")); + assertEquals("2", record.get("Y")); + assertEquals("3", record.get("Z")); + assertEquals(3, record.size()); + }} private void validateLineNumbers(final String lineSeparator) throws IOException { try (final CSVParser parser = CSVParser.parse("a" + lineSeparator + "b" + lineSeparator + "c", CSVFormat.DEFAULT.withRecordSeparator(lineSeparator))) { diff --git a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java index 1f460e84..53af94da 100644 --- a/src/test/java/org/apache/commons/csv/CSVPrinterTest.java +++ b/src/test/java/org/apache/commons/csv/CSVPrinterTest.java @@ -1725,7 +1725,9 @@ public class CSVPrinterTest { } private String[] toFirstRecordValues(final String expected, final CSVFormat format) throws IOException { - return CSVParser.parse(expected, format).getRecords().get(0).values(); + try (final CSVParser parser = CSVParser.parse(expected, format)) { + return parser.getRecords().get(0).values(); + } } private void tryFormat(final List<String> list, final Character quote, final Character escape, final String expected) throws IOException { diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java index 24bb97ba..0e18ae55 100644 --- a/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java +++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv264Test.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.io.StringReader; import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.DuplicateHeaderMode; import org.junit.jupiter.api.Test; @@ -68,8 +69,8 @@ public class JiraCsv264Test { .setAllowMissingColumnNames(true) .build(); - try (StringReader reader = new StringReader(CSV_STRING_GAP)) { - csvFormat.parse(reader); + try (StringReader reader = new StringReader(CSV_STRING_GAP); final CSVParser parser = csvFormat.parse(reader)) { + // empty } } diff --git a/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java b/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java index 42bd4dde..bbf6e218 100644 --- a/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java +++ b/src/test/java/org/apache/commons/csv/issues/JiraCsv290Test.java @@ -94,21 +94,21 @@ public class JiraCsv290Test { public void testWriteThenRead() throws Exception { final StringWriter sw = new StringWriter(); - final CSVPrinter printer = new CSVPrinter(sw, - CSVFormat.POSTGRESQL_CSV.builder().setHeader().setSkipHeaderRecord(true).build()); + try (CSVPrinter printer = new CSVPrinter(sw, CSVFormat.POSTGRESQL_CSV.builder().setHeader().setSkipHeaderRecord(true).build())) { - printer.printRecord("column1", "column2"); - printer.printRecord("v11", "v12"); - printer.printRecord("v21", "v22"); - printer.close(); + printer.printRecord("column1", "column2"); + printer.printRecord("v11", "v12"); + printer.printRecord("v21", "v22"); + printer.close(); - final CSVParser parser = new CSVParser(new StringReader(sw.toString()), - CSVFormat.POSTGRESQL_CSV.builder().setHeader().setSkipHeaderRecord(true).build()); + final CSVParser parser = new CSVParser(new StringReader(sw.toString()), + CSVFormat.POSTGRESQL_CSV.builder().setHeader().setSkipHeaderRecord(true).build()); - assertArrayEquals(new Object[] { "column1", "column2" }, parser.getHeaderNames().toArray()); + assertArrayEquals(new Object[] { "column1", "column2" }, parser.getHeaderNames().toArray()); - final Iterator<CSVRecord> i = parser.iterator(); - assertArrayEquals(new String[] { "v11", "v12" }, i.next().toList().toArray()); - assertArrayEquals(new String[] { "v21", "v22" }, i.next().toList().toArray()); + final Iterator<CSVRecord> i = parser.iterator(); + assertArrayEquals(new String[] { "v11", "v12" }, i.next().toList().toArray()); + assertArrayEquals(new String[] { "v21", "v22" }, i.next().toList().toArray()); + } } } \ No newline at end of file