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.bean.mocks.MockBean;
20 import org.junit.jupiter.api.DisplayName;
21 import org.junit.jupiter.api.Test;
22
23 import java.io.StringReader;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.Map;
27
28 import static org.junit.jupiter.api.Assertions.*;
29
30 public class HeaderColumnNameTranslateMappingStrategyTest {
31
32 @Test
33 public void testParse() {
34 String s = "n,o,foo\n" +
35 "kyle,123456,emp123\n" +
36 "jimmy,abcnum,cust09878";
37 HeaderColumnNameTranslateMappingStrategy<MockBean> strat = new HeaderColumnNameTranslateMappingStrategy<>();
38 strat.setType(MockBean.class);
39 Map<String, String> map = new HashMap<>();
40 map.put("n", "name");
41 map.put("o", "orderNumber");
42 map.put("foo", "id");
43 strat.setColumnMapping(map);
44
45 CsvToBean<MockBean> csv = new CsvToBeanBuilder<MockBean>(new StringReader(s))
46 .withMappingStrategy(strat).build();
47 List<MockBean> list = csv.parse();
48 assertNotNull(list);
49 assertEquals(2, list.size());
50 MockBean bean = list.get(0);
51 assertEquals("kyle", bean.getName());
52 assertEquals("123456", bean.getOrderNumber());
53 assertEquals("emp123", bean.getId());
54 }
55
56 @Test
57 @DisplayName("parse the csv file with only a subset of columns and fields. Type set with builder.")
58 public void testParseWithSubset() {
59 String s = "n,o,foo\n" +
60 "kyle,123456,emp123\n" +
61 "jimmy,abcnum,cust09878";
62 HeaderColumnNameTranslateMappingStrategy<MockBean> strat = new HeaderColumnNameTranslateMappingStrategyBuilder<MockBean>()
63 .withType(MockBean.class)
64 .build();
65 Map<String, String> map = new HashMap<>();
66 map.put("n", "name");
67 map.put("o", "orderNumber");
68 strat.setColumnMapping(map);
69
70 CsvToBean<MockBean> csv = new CsvToBeanBuilder<MockBean>(new StringReader(s))
71 .withMappingStrategy(strat).build();
72 List<MockBean> list = csv.parse();
73 assertNotNull(list);
74 assertEquals(2, list.size());
75 MockBean bean = list.get(0);
76 assertEquals("kyle", bean.getName());
77 assertEquals("123456", bean.getOrderNumber());
78 assertNull(bean.getId());
79 }
80
81 @Test
82 @DisplayName("parse the csv file with only a subset of columns and fields. Type set with setType.")
83 public void testParseWithSubsetSetType() {
84 String s = "n,o,foo\n" +
85 "kyle,123456,emp123\n" +
86 "jimmy,abcnum,cust09878";
87 HeaderColumnNameTranslateMappingStrategy<MockBean> strat = new HeaderColumnNameTranslateMappingStrategyBuilder<MockBean>().build();
88 strat.setType(MockBean.class);
89 Map<String, String> map = new HashMap<>();
90 map.put("n", "name");
91 map.put("o", "orderNumber");
92 strat.setColumnMapping(map);
93
94 CsvToBean<MockBean> csv = new CsvToBeanBuilder<MockBean>(new StringReader(s))
95 .withMappingStrategy(strat).build();
96 List<MockBean> list = csv.parse();
97 assertNotNull(list);
98 assertEquals(2, list.size());
99 MockBean bean = list.get(0);
100 assertEquals("kyle", bean.getName());
101 assertEquals("123456", bean.getOrderNumber());
102 assertNull(bean.getId());
103 }
104
105 @Test
106 @DisplayName("Show that even if there are column field name matches they will not be populated if not in the name translate map.")
107 public void onlyConvertWhatIsInTheMap() {
108 String s = "n,o,foo,name,id,orderNumber,num,doubleNum\n" +
109 "kyle,123456,emp123,aName,aId,aOrderNumber,22,3.14\n" +
110 "jimmy,abcnum,cust09878,bName,bId,bOrderNumber,44,8.3";
111 HeaderColumnNameTranslateMappingStrategy<MockBean> strat = new HeaderColumnNameTranslateMappingStrategyBuilder<MockBean>()
112 .withForceCorrectRecordLength(true)
113 .build();
114 strat.setType(MockBean.class);
115 Map<String, String> map = new HashMap<>();
116 map.put("n", "name");
117 map.put("o", "orderNumber");
118 strat.setColumnMapping(map);
119
120 CsvToBean<MockBean> csv = new CsvToBeanBuilder<MockBean>(new StringReader(s))
121 .withMappingStrategy(strat).build();
122 List<MockBean> list = csv.parse();
123 assertNotNull(list);
124 assertEquals(2, list.size());
125 MockBean bean = list.get(0);
126 assertEquals("kyle", bean.getName());
127 assertEquals("123456", bean.getOrderNumber());
128 assertNull(bean.getId());
129 assertEquals(0, bean.getNum());
130 assertEquals(0.0, bean.getDoubleNum(), 0.01);
131 }
132
133 @Test
134 public void getColumnNameReturnsNullIfColumnNumberIsTooLarge() {
135 String s = "n,o,foo\n" +
136 "kyle,123456,emp123\n" +
137 "jimmy,abcnum,cust09878";
138 HeaderColumnNameTranslateMappingStrategy<MockBean> strat = new HeaderColumnNameTranslateMappingStrategy<>();
139 strat.setType(MockBean.class);
140 Map<String, String> map = new HashMap<>();
141 map.put("n", "name");
142 map.put("o", "orderNumber");
143 map.put("foo", "id");
144 strat.setColumnMapping(map);
145
146 CsvToBean<MockBean> csv = new CsvToBeanBuilder<MockBean>(new StringReader(s))
147 .withMappingStrategy(strat).build();
148 csv.parse();
149
150 assertEquals("name", strat.getColumnName(0));
151 assertEquals("orderNumber", strat.getColumnName(1));
152 assertEquals("id", strat.getColumnName(2));
153 assertNull(strat.getColumnName(3));
154 }
155
156 @Test
157 public void columnNameMappingShouldBeCaseInsensitive() {
158 String s = "n,o,Foo\n" +
159 "kyle,123456,emp123\n" +
160 "jimmy,abcnum,cust09878";
161 HeaderColumnNameTranslateMappingStrategy<MockBean> strat = new HeaderColumnNameTranslateMappingStrategy<>();
162 strat.setType(MockBean.class);
163 Map<String, String> map = new HashMap<>();
164 map.put("n", "name");
165 map.put("o", "orderNumber");
166 map.put("foo", "id");
167 strat.setColumnMapping(map);
168 assertNotNull(strat.getColumnMapping());
169
170 CsvToBean<MockBean> csv = new CsvToBeanBuilder<MockBean>(new StringReader(s))
171 .withMappingStrategy(strat).build();
172 csv.parse();
173
174 assertEquals("name", strat.getColumnName(0));
175 assertEquals("orderNumber", strat.getColumnName(1));
176 assertEquals("id", strat.getColumnName(2));
177 assertNull(strat.getColumnName(3));
178 }
179 }