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
19
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 }