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