1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.csv.issues;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21
22 import java.io.IOException;
23 import java.io.Reader;
24 import java.io.StringReader;
25
26 import org.apache.commons.csv.CSVFormat;
27 import org.apache.commons.csv.QuoteMode;
28 import org.junit.jupiter.api.Test;
29
30
31
32
33 public class JiraCsv263Test {
34
35 @Test
36 public void testPrintFromReaderWithQuotes() throws IOException {
37
38 final CSVFormat format = CSVFormat.RFC4180.builder()
39 .setDelimiter(',')
40 .setQuote('"')
41 .setEscape('?')
42 .setQuoteMode(QuoteMode.NON_NUMERIC)
43 .build();
44
45 final StringBuilder out = new StringBuilder();
46
47 final Reader atStartOnly = new StringReader("\"a,b,c\r\nx,y,z");
48 format.print(atStartOnly, out, true);
49 assertEquals("\"\"\"a,b,c\r\nx,y,z\"", out.toString());
50
51 final Reader atEndOnly = new StringReader("a,b,c\r\nx,y,z\"");
52 out.setLength(0);
53 format.print(atEndOnly, out, true);
54 assertEquals("\"a,b,c\r\nx,y,z\"\"\"", out.toString());
55
56 final Reader atBeginEnd = new StringReader("\"a,b,c\r\nx,y,z\"");
57 out.setLength(0);
58 format.print(atBeginEnd, out, true);
59 assertEquals("\"\"\"a,b,c\r\nx,y,z\"\"\"", out.toString());
60
61 final Reader embeddedBeginMiddle = new StringReader("\"a\",b,c\r\nx,\"y\",z");
62 out.setLength(0);
63 format.print(embeddedBeginMiddle, out, true);
64 assertEquals("\"\"\"a\"\",b,c\r\nx,\"\"y\"\",z\"", out.toString());
65
66 final Reader embeddedMiddleEnd = new StringReader("a,\"b\",c\r\nx,y,\"z\"");
67 out.setLength(0);
68 format.print(embeddedMiddleEnd, out, true);
69 assertEquals("\"a,\"\"b\"\",c\r\nx,y,\"\"z\"\"\"", out.toString());
70
71 final Reader nested = new StringReader("a,\"b \"and\" c\",d");
72 out.setLength(0);
73 format.print(nested, out, true);
74 assertEquals("\"a,\"\"b \"\"and\"\" c\"\",d\"", out.toString());
75 }
76
77 }