Skip to content

Commit c158188

Browse files
committed
[CSV-269] CSVRecord.get(Enum) should use Enum.name() instead of
Enum.toString().
1 parent 9e687ff commit c158188

3 files changed

Lines changed: 21 additions & 19 deletions

File tree

src/changes/changes.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
<action type="fix" dev="ggregory" due-to="Arturo Bernal">Minor changes #172.</action>
4444
<action issue="CSV-292" type="fix" dev="kinow" due-to="Rob Vesse">No Automatic-Module-Name prevents usage in JPMS projects without repacking the JAR.</action>
4545
<action issue="CSV-288" type="fix" dev="ggregory" due-to="Santhsoh, Angus">Fix for multi-char delimiter not working as expected #218.</action>
46+
<action issue="CSV-269" type="fix" dev="ggregory" due-to="Auke te Winkel, Gary Gregory">CSVRecord.get(Enum) should use Enum.name() instead of Enum.toString().</action>
4647
<!-- ADD -->
4748
<action issue="CSV-291" type="add" dev="ggregory" due-to="Gary Gregory">Make CSVRecord#values() public.</action>
4849
<action issue="CSV-264" type="add" dev="ggregory" due-to="Sagar Tiwari, Seth Falco, Alex Herbert, Gary Gregory">Add DuplicateHeaderMode for flexibility with header strictness. #114.</action>

src/main/java/org/apache/commons/csv/CSVRecord.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.util.LinkedHashMap;
2424
import java.util.List;
2525
import java.util.Map;
26-
import java.util.Objects;
2726
import java.util.stream.Stream;
2827

2928
/**
@@ -73,7 +72,7 @@ public final class CSVRecord implements Serializable, Iterable<String> {
7372
* @return the String at the given enum String
7473
*/
7574
public String get(final Enum<?> e) {
76-
return get(Objects.toString(e, null));
75+
return get(e == null ? null : e.name());
7776
}
7877

7978
/**

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

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,14 @@
3030
import java.io.ObjectOutputStream;
3131
import java.io.StringReader;
3232
import java.util.ArrayList;
33+
import java.util.Arrays;
3334
import java.util.Collections;
3435
import java.util.Map;
3536
import java.util.TreeMap;
3637
import java.util.concurrent.ConcurrentHashMap;
3738
import java.util.concurrent.atomic.AtomicInteger;
3839

40+
import org.apache.commons.lang3.EnumUtils;
3941
import org.apache.commons.lang3.StringUtils;
4042
import org.junit.jupiter.api.BeforeEach;
4143
import org.junit.jupiter.api.Test;
@@ -46,6 +48,7 @@ private enum EnumFixture {
4648
UNKNOWN_COLUMN
4749
}
4850

51+
/** This enum overrides toString() but it's the names that matter. */
4952
public enum EnumHeader {
5053
FIRST("first"),
5154
SECOND("second"),
@@ -69,13 +72,12 @@ public String toString() {
6972

7073
@BeforeEach
7174
public void setUp() throws Exception {
72-
values = new String[] { "A", "B", "C" };
75+
values = new String[] {"A", "B", "C"};
7376
final String rowData = StringUtils.join(values, ',');
7477
try (final CSVParser parser = CSVFormat.DEFAULT.parse(new StringReader(rowData))) {
7578
record = parser.iterator().next();
7679
}
77-
final String[] headers = { "first", "second", "third" };
78-
try (final CSVParser parser = CSVFormat.DEFAULT.withHeader(headers).parse(new StringReader(rowData))) {
80+
try (final CSVParser parser = CSVFormat.DEFAULT.builder().setHeader(EnumHeader.class).build().parse(new StringReader(rowData))) {
7981
recordWithHeader = parser.iterator().next();
8082
headerMap = parser.getHeaderMap();
8183
}
@@ -103,9 +105,9 @@ public void testGetNullEnum() {
103105

104106
@Test
105107
public void testGetString() {
106-
assertEquals(values[0], recordWithHeader.get("first"));
107-
assertEquals(values[1], recordWithHeader.get("second"));
108-
assertEquals(values[2], recordWithHeader.get("third"));
108+
assertEquals(values[0], recordWithHeader.get(EnumHeader.FIRST.name()));
109+
assertEquals(values[1], recordWithHeader.get(EnumHeader.SECOND.name()));
110+
assertEquals(values[2], recordWithHeader.get(EnumHeader.THIRD.name()));
109111
}
110112

111113
@Test
@@ -141,8 +143,8 @@ public void testGetUnmappedPositiveInt() {
141143

142144
@Test
143145
public void testGetWithEnum() {
144-
assertEquals(recordWithHeader.get("first"), recordWithHeader.get(EnumHeader.FIRST));
145-
assertEquals(recordWithHeader.get("second"), recordWithHeader.get(EnumHeader.SECOND));
146+
assertEquals(recordWithHeader.get("FIRST"), recordWithHeader.get(EnumHeader.FIRST));
147+
assertEquals(recordWithHeader.get("SECOND"), recordWithHeader.get(EnumHeader.SECOND));
146148
assertThrows(IllegalArgumentException.class, () -> recordWithHeader.get(EnumFixture.UNKNOWN_COLUMN));
147149
}
148150

@@ -171,7 +173,7 @@ public void testIsInconsistent() throws IOException {
171173
@Test
172174
public void testIsMapped() {
173175
assertFalse(record.isMapped("first"));
174-
assertTrue(recordWithHeader.isMapped("first"));
176+
assertTrue(recordWithHeader.isMapped(EnumHeader.FIRST.name()));
175177
assertFalse(recordWithHeader.isMapped("fourth"));
176178
}
177179

@@ -188,8 +190,8 @@ public void testIsSetInt() {
188190
@Test
189191
public void testIsSetString() {
190192
assertFalse(record.isSet("first"));
191-
assertTrue(recordWithHeader.isSet("first"));
192-
assertFalse(recordWithHeader.isSet("fourth"));
193+
assertTrue(recordWithHeader.isSet(EnumHeader.FIRST.name()));
194+
assertFalse(recordWithHeader.isSet("DOES NOT EXIST"));
193195
}
194196

195197
@Test
@@ -315,16 +317,16 @@ public void testToString() {
315317
}
316318

317319
private void validateMap(final Map<String, String> map, final boolean allowsNulls) {
318-
assertTrue(map.containsKey("first"));
319-
assertTrue(map.containsKey("second"));
320-
assertTrue(map.containsKey("third"));
320+
assertTrue(map.containsKey(EnumHeader.FIRST.name()));
321+
assertTrue(map.containsKey(EnumHeader.SECOND.name()));
322+
assertTrue(map.containsKey(EnumHeader.THIRD.name()));
321323
assertFalse(map.containsKey("fourth"));
322324
if (allowsNulls) {
323325
assertFalse(map.containsKey(null));
324326
}
325-
assertEquals("A", map.get("first"));
326-
assertEquals("B", map.get("second"));
327-
assertEquals("C", map.get("third"));
327+
assertEquals("A", map.get(EnumHeader.FIRST.name()));
328+
assertEquals("B", map.get(EnumHeader.SECOND.name()));
329+
assertEquals("C", map.get(EnumHeader.THIRD.name()));
328330
assertNull(map.get("fourth"));
329331
}
330332
}

0 commit comments

Comments
 (0)