1 package integrationTest.writeThenRead;
2
3 import com.opencsv.CSVReader;
4 import com.opencsv.CSVReaderBuilder;
5 import com.opencsv.CSVWriterBuilder;
6 import com.opencsv.ICSVWriter;
7 import com.opencsv.exceptions.CsvException;
8 import org.junit.jupiter.api.DisplayName;
9 import org.junit.jupiter.params.ParameterizedTest;
10 import org.junit.jupiter.params.provider.Arguments;
11 import org.junit.jupiter.params.provider.MethodSource;
12
13 import java.io.*;
14 import java.util.ArrayList;
15 import java.util.Arrays;
16 import java.util.List;
17 import java.util.stream.Stream;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20
21
22
23
24
25 public class WriteThenReadTest {
26
27 private static Stream<Arguments> singleArrayItem() {
28 return Stream.of(
29 Arguments.of("1", "\\Escape at beginning."),
30 Arguments.of("2", "Escape in\\ middle."),
31 Arguments.of("3", "Escape at end.\\")
32 );
33 }
34
35 @DisplayName("To have the CSVWriter and CSVReader work together they must have the same escape character.")
36 @ParameterizedTest
37 @MethodSource("singleArrayItem")
38 public void defaultWriterAndReader(String id, String description) throws IOException, CsvException {
39 String[] originalArray = {id, description};
40
41 Writer writer = new StringWriter();
42 CSVWriterBuilder writerBuilder = new CSVWriterBuilder(writer);
43 ICSVWriter icsvWriter = writerBuilder.withEscapeChar('\\').build();
44
45 List<String[]> rows = new ArrayList<>();
46 rows.add(originalArray);
47
48 System.out.println(listToString(rows));
49 icsvWriter.writeAll(rows);
50 System.out.println(writer);
51
52 Reader reader = new StringReader(writer.toString());
53 CSVReaderBuilder readerBuilder = new CSVReaderBuilder(reader);
54 CSVReader csvReader = readerBuilder.build();
55
56 List<String[]> readRows = csvReader.readAll();
57 String originalString = listToString(rows);
58 String readString = listToString(readRows);
59 assertEquals(originalString, readString, String.format("Expected: %s | Actual: %s |", originalString, readString));
60 }
61
62 private String listToString(List<String[]> rows) {
63 StringBuilder builder = new StringBuilder(1024);
64 rows.forEach(a -> {
65 builder.append(Arrays.toString(a));
66 builder.append("\n");
67 });
68 return builder.toString();
69 }
70 }