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