1 package com.opencsv.bean;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 import com.opencsv.CSVReader;
20 import com.opencsv.bean.mocks.MockBean;
21 import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
22 import org.junit.jupiter.api.*;
23
24 import java.io.IOException;
25 import java.io.StringReader;
26 import java.util.List;
27 import java.util.Locale;
28
29 import static org.junit.jupiter.api.Assertions.*;
30
31 public class HeaderColumnNameMappingStrategyTest {
32
33 private static final String TEST_STRING = "name,orderNumber,num\n" +
34 "kyle,abc123456,123\n" +
35 "jimmy,def098765,456";
36
37 private static final String TEST_EMPTY_STRING = "name,orderNumber,num\n" +
38 "kyle, ,123\n" +
39 "jimmy,,456";
40
41 private static final String TEST_QUOTED_STRING = "\"name\",\"orderNumber\",\"num\"\n" +
42 "\"kyle\",\"abc123456\",\"123\"\n" +
43 "\"jimmy\",\"def098765\",\"456\"";
44
45 private HeaderColumnNameMappingStrategy<MockBean> strat;
46 private static Locale systemLocale;
47
48 @BeforeAll
49 public static void storeSystemLocale() {
50 systemLocale = Locale.getDefault();
51 }
52
53 @AfterEach
54 public void setSystemLocaleBackToDefault() {
55 Locale.setDefault(systemLocale);
56 }
57
58 @BeforeEach
59 public void setUp() {
60 Locale.setDefault(Locale.US);
61 strat = new HeaderColumnNameMappingStrategy<>();
62 }
63
64 private List<MockBean> createTestParseResult(String parseString) {
65 strat.setType(MockBean.class);
66 CsvToBean<MockBean> csv = new CsvToBeanBuilder<MockBean>(new StringReader(parseString))
67 .withMappingStrategy(strat).build();
68 return csv.parse();
69 }
70
71 @Test
72 public void testParse() {
73 List<MockBean> list = createTestParseResult(TEST_STRING);
74 assertNotNull(list);
75 assertEquals(2, list.size());
76 MockBean bean = list.get(0);
77 assertEquals("kyle", bean.getName());
78 assertEquals("abc123456", bean.getOrderNumber());
79 assertEquals(123, bean.getNum());
80 }
81
82 @Test
83 public void testParseWithEmptyField() {
84 List<MockBean> list = createTestParseResult(TEST_EMPTY_STRING);
85 assertNotNull(list);
86 assertEquals(2, list.size());
87 MockBean bean = list.get(0);
88 assertEquals("kyle", bean.getName());
89 assertEquals(" ", bean.getOrderNumber());
90 assertEquals(123, bean.getNum());
91 bean = list.get(1);
92 assertEquals("jimmy", bean.getName());
93 assertNotNull(bean.getOrderNumber());
94 assertEquals("", bean.getOrderNumber());
95 assertEquals(456, bean.getNum());
96 }
97
98 @Test
99 public void testQuotedString() {
100 List<MockBean> list = createTestParseResult(TEST_QUOTED_STRING);
101 assertNotNull(list);
102 assertEquals(2, list.size());
103 MockBean bean = list.get(0);
104 assertEquals("kyle", bean.getName());
105 assertEquals("abc123456", bean.getOrderNumber());
106 assertEquals(123, bean.getNum());
107 }
108
109 @Test
110 public void testParseWithSpacesInHeader() {
111 List<MockBean> list = createTestParseResult(TEST_STRING);
112 assertNotNull(list);
113 assertEquals(2, list.size());
114 MockBean bean = list.get(0);
115 assertEquals("kyle", bean.getName());
116 assertEquals("abc123456", bean.getOrderNumber());
117 assertEquals(123, bean.getNum());
118 }
119
120 @Test
121 public void verifyColumnNames() throws IOException, CsvRequiredFieldEmptyException {
122 strat = new HeaderColumnNameMappingStrategy<>();
123 strat.setType(MockBean.class);
124 assertNull(strat.getColumnName(0));
125
126 StringReader reader = new StringReader(TEST_STRING);
127
128 CSVReader csvReader = new CSVReader(reader);
129 strat.captureHeader(csvReader);
130
131 assertEquals("name", strat.getColumnName(0));
132 }
133
134 @Test
135 public void throwsIllegalStateExceptionIfTypeNotSetBeforeParse() {
136 strat = new HeaderColumnNameMappingStrategy<>();
137 StringReader reader = new StringReader(TEST_STRING);
138 CSVReader csvReader = new CSVReader(reader);
139 CsvToBean<Object> csvtb = new CsvToBeanBuilder<>(csvReader)
140 .withMappingStrategy(strat).build();
141 try {
142 csvtb.parse();
143 }
144 catch(RuntimeException e) {
145 assertEquals(IllegalStateException.class, e.getCause().getClass());
146 }
147 }
148
149 @Test
150 public void throwsIllegalStateExceptionIfTypeNotSetBeforeGenerateHeaders() {
151 strat = new HeaderColumnNameMappingStrategy<>();
152 Assertions.assertThrows(IllegalStateException.class, () -> strat.generateHeader(new MockBean()));
153 }
154 }