View Javadoc
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   * The purpose of these tests is to write an array of data using the CSVWriter then read
23   * it with the CSVReader to ensure the result is the original data.
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  }