View Javadoc
1   package com.opencsv.bean;
2   
3   /*
4    Copyright 2007 Kyle Miller.
5   
6    Licensed under the Apache License, Version 2.0 (the "License");
7    you may not use this file except in compliance with the License.
8    You may obtain a copy of the License at
9   
10   http://www.apache.org/licenses/LICENSE-2.0
11  
12   Unless required by applicable law or agreed to in writing, software
13   distributed under the License is distributed on an "AS IS" BASIS,
14   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   See the License for the specific language governing permissions and
16   limitations under the License.
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 }