View Javadoc
1   package com.opencsv;
2   
3   import com.opencsv.enums.CSVReaderNullFieldIndicator;
4   import org.junit.jupiter.api.*;
5   
6   import java.io.IOException;
7   import java.io.Reader;
8   import java.io.StringReader;
9   import java.util.Locale;
10  
11  import static org.junit.jupiter.api.Assertions.*;
12  import static org.mockito.ArgumentMatchers.any;
13  import static org.mockito.ArgumentMatchers.eq;
14  import static org.mockito.Mockito.mock;
15  import static org.mockito.Mockito.when;
16  
17  /**
18   * @author Andre Rosot
19   * @since 4.2
20   */
21  public class CSVReaderHeaderAwareBuilderTest {
22  
23      private CSVReaderHeaderAwareBuilder builder;
24      private final Reader reader = new StringReader("header");
25  
26      private static Locale systemLocale;
27  
28      @BeforeAll
29      public static void storeSystemLocale() {
30          systemLocale = Locale.getDefault();
31      }
32  
33      @AfterEach
34      public void setSystemLocaleBackToDefault() {
35          Locale.setDefault(systemLocale);
36      }
37  
38      @BeforeEach
39      public void setUp() {
40          Locale.setDefault(Locale.US);
41          builder = new CSVReaderHeaderAwareBuilder(reader);
42      }
43  
44      @Test
45      public void testDefaultBuilder() {
46          assertSame(reader, builder.getReader());
47          assertNull(builder.getCsvParser());
48          assertEquals(
49                  CSVReader.DEFAULT_SKIP_LINES,
50                  builder.getSkipLines());
51          assertEquals(0, builder.getMultilineLimit());
52  
53          final CSVReader csvReader = builder.build();
54          assertEquals(
55                  CSVReader.DEFAULT_SKIP_LINES,
56                  csvReader.getSkipLines());
57          assertEquals(CSVReader.DEFAULT_KEEP_CR, csvReader.keepCarriageReturns());
58          assertEquals(CSVReader.DEFAULT_VERIFY_READER, csvReader.verifyReader());
59          assertEquals(CSVReader.DEFAULT_MULTILINE_LIMIT, csvReader.getMultilineLimit());
60          assertEquals(Locale.getDefault(), csvReader.errorLocale);
61      }
62  
63      @Test
64      public void testNullReader() {
65          Assertions.assertThrows(IllegalArgumentException.class, () -> new CSVReaderBuilder(null));
66      }
67  
68      @Test
69      public void testWithCSVParserNull() {
70          builder.withCSVParser(mock(CSVParser.class));
71          builder.withCSVParser(null);
72          assertNull(builder.getCsvParser());
73      }
74  
75      @Test
76      public void testWithCSVParser() {
77          final ICSVParser csvParser = mock(CSVParser.class);
78  
79          builder.withCSVParser(csvParser);
80  
81          assertSame(csvParser, builder.getCsvParser());
82      }
83  
84      @Test
85      public void testWithSkipLines() {
86          builder.withSkipLines(99);
87  
88          assertEquals(99, builder.getSkipLines());
89      }
90  
91      @Test
92      public void testWithKeepCR() {
93          builder.withKeepCarriageReturn(true);
94          assertTrue(builder.keepCarriageReturn());
95  
96          final CSVReader actual = builder.build();
97          assertTrue(actual.keepCarriageReturns());
98      }
99  
100     @Test
101     public void testWithSkipLinesZero() {
102         builder.withSkipLines(0);
103 
104         assertEquals(0, builder.getSkipLines());
105 
106         final CSVReader actual = builder.build();
107         assertSame(0, actual.getSkipLines());
108     }
109 
110     @Test
111     public void testWithSkipLinesNegative() {
112         builder.withSkipLines(-1);
113 
114         assertEquals(0, builder.getSkipLines());
115 
116         final CSVReader actual = builder.build();
117         assertSame(0, actual.getSkipLines());
118     }
119 
120     @Test
121     public void testWithVerifyReader() {
122         final CSVReader r = builder.withVerifyReader(false).build();
123         assertFalse(r.verifyReader());
124     }
125 
126     @Test
127     public void builderWithNullFieldIndicator() {
128         final CSVReader r = builder.withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS).build();
129 
130         assertEquals(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS, r.getParser().nullFieldIndicator());
131     }
132 
133     @Test
134     public void builderWithMultilineLimit() {
135         final CSVReader r = builder.withMultilineLimit(Integer.MAX_VALUE).build();
136 
137         assertEquals(Integer.MAX_VALUE, r.getMultilineLimit());
138     }
139 
140     @Test
141     public void builderWithErrorLocale() {
142         final CSVReader r = builder.withErrorLocale(Locale.KOREAN).build();
143         assertEquals(Locale.KOREAN, r.errorLocale);
144     }
145 
146     @Test
147     public void shouldThrowExceptionWhenCannotReadHeader() throws IOException {
148         Reader reader = mock(Reader.class);
149         when(reader.read(any((char[].class)), eq(0), eq(8192))).thenThrow(new IOException());
150         Assertions.assertThrows(RuntimeException.class, () -> new CSVReaderHeaderAwareBuilder(reader).build());
151     }
152 }