View Javadoc
1   package com.opencsv.bean;
2   
3   import com.opencsv.bean.mocks.OptionalMock;
4   import com.opencsv.exceptions.CsvDataTypeMismatchException;
5   import com.opencsv.exceptions.CsvRequiredFieldEmptyException;
6   import org.apache.commons.lang3.StringUtils;
7   import org.junit.jupiter.api.Test;
8   
9   import java.io.StringReader;
10  import java.io.StringWriter;
11  import java.io.Writer;
12  import java.util.List;
13  import java.util.Optional;
14  
15  import static org.junit.jupiter.api.Assertions.*;
16  
17  /**
18   * Tests that accessor methods using {@link java.util.Optional} function
19   * correctly.
20   */
21  public class OptionalTest {
22  
23      @Test
24      public void testReadWithOptionalNull() {
25          List<OptionalMock> beans = new CsvToBeanBuilder<OptionalMock>(new StringReader("field\n\n"))
26                  .withType(OptionalMock.class)
27                  .build().parse();
28          assertNotNull(beans);
29          assertEquals(1, beans.size());
30          OptionalMock b = beans.get(0);
31          Optional<String> s = b.getField();
32          assertNotNull(s);
33          assertTrue(s.isPresent());
34          assertEquals(StringUtils.EMPTY, s.get());
35      }
36  
37      @Test
38      public void testReadWithOptionalNotNull() {
39          List<OptionalMock> beans = new CsvToBeanBuilder<OptionalMock>(new StringReader("field\nstr\n"))
40                  .withType(OptionalMock.class)
41                  .build().parse();
42          assertNotNull(beans);
43          assertEquals(1, beans.size());
44          OptionalMock b = beans.get(0);
45          Optional<String> s = b.getField();
46          assertNotNull(s);
47          assertTrue(s.isPresent());
48          assertEquals("str", s.get());
49      }
50  
51      @Test
52      public void testWriteWithOptionalNull() throws CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
53          OptionalMock b = new OptionalMock();
54          b.setField(Optional.empty());
55          Writer w = new StringWriter();
56          StatefulBeanToCsv<OptionalMock> b2csv = new StatefulBeanToCsvBuilder<OptionalMock>(w)
57                  .withApplyQuotesToAll(false)
58                  .build();
59          b2csv.write(b);
60          assertEquals("FIELD\n\n", w.toString());
61      }
62  
63      @Test
64      public void testWriteWithOptionalNotNull() throws CsvDataTypeMismatchException, CsvRequiredFieldEmptyException {
65          OptionalMock b = new OptionalMock();
66          b.setField(Optional.of("str"));
67          Writer w = new StringWriter();
68          StatefulBeanToCsv<OptionalMock> b2csv = new StatefulBeanToCsvBuilder<OptionalMock>(w)
69                  .withApplyQuotesToAll(false)
70                  .build();
71          b2csv.write(b);
72          assertEquals("FIELD\nstr\n", w.toString());
73      }
74  }