View Javadoc
1   package integrationTest.BeanTests;
2   
3   import com.opencsv.bean.CsvToBean;
4   import com.opencsv.bean.CsvToBeanBuilder;
5   import com.opencsv.enums.CSVReaderNullFieldIndicator;
6   import org.junit.jupiter.api.Test;
7   
8   import java.io.StringReader;
9   import java.util.List;
10  
11  import static org.junit.jupiter.api.Assertions.*;
12  
13  /**
14   * This is for Bug #158 in sourceforge.  When creating beans from openCSV the Parser null field indicator
15   * should be respected.
16   *
17   * @see <a href="https://sourceforge.net/p/opencsv/bugs/158/">sourceforge Bug #158</a>
18   * @see <a href="https://stackoverflow.com/questions/42856200/opencsv-csvreadernullfieldindicator-seems-to-make-no-difference">stack overflow question</a>
19   */
20  public class CsvToBeanShouldUseNullFieldIndicatorForStringsTest {
21  
22      private static final String CSVDATA = "Id,OwnerId,Name,BillingStreet,BillingCity,BillingState,BillingPostalCode,BillingCountry\n" +
23              "some Id, some owner Id, a name,,\"\", ,\" \",";
24  
25      @Test
26      public void emptySeparators() {
27          CsvToBean<AccountBean> csvToBean = new CsvToBeanBuilder<AccountBean>(new StringReader(CSVDATA))
28                  .withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
29                  .withType(AccountBean.class)
30                  .build();
31  
32          List<AccountBean> beans = csvToBean.parse();
33  
34          assertEquals(1, beans.size());
35          AccountBean accountBean = beans.get(0);
36          assertNull(accountBean.getBillingStreet());
37          assertTrue(accountBean.getBillingCity().isEmpty());
38          assertEquals(" ", accountBean.getBillingState());
39          assertEquals(" ", accountBean.getBillingPostcode());
40          assertNull(accountBean.getBillingCountry());
41      }
42  
43      @Test
44      public void emptyQuotes() {
45          CsvToBean<AccountBean> csvToBean = new CsvToBeanBuilder<AccountBean>(new StringReader(CSVDATA))
46                  .withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_QUOTES)
47                  .withType(AccountBean.class)
48                  .build();
49  
50          List<AccountBean> beans = csvToBean.parse();
51  
52          assertEquals(1, beans.size());
53          AccountBean accountBean = beans.get(0);
54          assertTrue(accountBean.getBillingStreet().isEmpty());
55          assertNull(accountBean.getBillingCity());
56          assertEquals(" ", accountBean.getBillingState());
57          assertEquals(" ", accountBean.getBillingPostcode());
58          assertTrue(accountBean.getBillingCountry().isEmpty());
59      }
60  
61      @Test
62      public void neither() {
63          CsvToBean<AccountBean> csvToBean = new CsvToBeanBuilder<AccountBean>(new StringReader(CSVDATA))
64                  .withFieldAsNull(CSVReaderNullFieldIndicator.NEITHER)
65                  .withType(AccountBean.class)
66                  .build();
67  
68          List<AccountBean> beans = csvToBean.parse();
69  
70          assertEquals(1, beans.size());
71          AccountBean accountBean = beans.get(0);
72          assertTrue(accountBean.getBillingStreet().isEmpty());
73          assertTrue(accountBean.getBillingCity().isEmpty());
74          assertEquals(" ", accountBean.getBillingState());
75          assertEquals(" ", accountBean.getBillingPostcode());
76          assertTrue(accountBean.getBillingCountry().isEmpty());
77      }
78  
79  
80      @Test
81      public void both() {
82          CsvToBean<AccountBean> csvToBean = new CsvToBeanBuilder<AccountBean>(new StringReader(CSVDATA))
83                  .withFieldAsNull(CSVReaderNullFieldIndicator.BOTH)
84                  .withType(AccountBean.class)
85                  .build();
86  
87          List<AccountBean> beans = csvToBean.parse();
88  
89          assertEquals(1, beans.size());
90          AccountBean accountBean = beans.get(0);
91          assertNull(accountBean.getBillingStreet());
92          assertNull(accountBean.getBillingCity());
93          assertEquals(" ", accountBean.getBillingState());
94          assertEquals(" ", accountBean.getBillingPostcode());
95          assertNull(accountBean.getBillingCountry());
96      }
97  }