1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.csv.issues;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20
21 import java.io.IOException;
22 import java.io.StringReader;
23
24 import org.apache.commons.csv.CSVFormat;
25 import org.apache.commons.csv.CSVParser;
26 import org.apache.commons.csv.CSVRecord;
27 import org.apache.commons.csv.QuoteMode;
28 import org.junit.jupiter.api.Test;
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 public class JiraCsv93Test {
45 private static Object[] objects1 = {"abc", "", null, "a,b,c", 123};
46
47 private static Object[] objects2 = {"abc", "NULL", null, "a,b,c", 123};
48
49 private void every(final CSVFormat csvFormat, final Object[] objects, final String format, final String[] data)
50 throws IOException {
51 final String source = csvFormat.format(objects);
52 assertEquals(format, csvFormat.format(objects));
53 try (final CSVParser csvParser = csvFormat.parse(new StringReader(source))) {
54 final CSVRecord csvRecord = csvParser.iterator().next();
55 for (int i = 0; i < data.length; i++) {
56 assertEquals(csvRecord.get(i), data[i]);
57 }
58 }
59 }
60
61 @Test
62 public void testWithNotSetNullString() throws IOException {
63
64 every(CSVFormat.DEFAULT,
65 objects1,
66 "abc,,,\"a,b,c\",123",
67 new String[]{"abc", "", "", "a,b,c", "123"});
68 every(CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.ALL).build(),
69 objects1,
70 "\"abc\",\"\",,\"a,b,c\",\"123\"",
71 new String[]{"abc", "", "", "a,b,c", "123"});
72 every(CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.ALL_NON_NULL).build(),
73 objects1,
74 "\"abc\",\"\",,\"a,b,c\",\"123\"",
75 new String[]{"abc", "", null, "a,b,c", "123"});
76 every(CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.MINIMAL).build(),
77 objects1,
78 "abc,,,\"a,b,c\",123",
79 new String[]{"abc", "", "", "a,b,c", "123"});
80 every(CSVFormat.DEFAULT.builder().setEscape('?').setQuoteMode(QuoteMode.NONE).build(),
81 objects1,
82 "abc,,,a?,b?,c,123",
83 new String[]{"abc", "", "", "a,b,c", "123"});
84 every(CSVFormat.DEFAULT.builder().setQuoteMode(QuoteMode.NON_NUMERIC).build(),
85 objects1,
86 "\"abc\",\"\",,\"a,b,c\",123",
87 new String[]{"abc", "", null, "a,b,c", "123"});
88
89 }
90
91 @Test
92 public void testWithSetNullStringEmptyString() throws IOException {
93
94 every(CSVFormat.DEFAULT.builder().setNullString("").build(),
95 objects1,
96 "abc,,,\"a,b,c\",123",
97 new String[]{"abc", null, null, "a,b,c", "123"});
98 every(CSVFormat.DEFAULT.builder().setNullString("").setQuoteMode(QuoteMode.ALL).build(),
99 objects1,
100 "\"abc\",\"\",\"\",\"a,b,c\",\"123\"",
101 new String[]{"abc", null, null, "a,b,c", "123"});
102 every(CSVFormat.DEFAULT.builder().setNullString("").setQuoteMode(QuoteMode.ALL_NON_NULL).build(),
103 objects1,
104 "\"abc\",\"\",,\"a,b,c\",\"123\"",
105 new String[]{"abc", "", null, "a,b,c", "123"});
106 every(CSVFormat.DEFAULT.builder().setNullString("").setQuoteMode(QuoteMode.MINIMAL).build(),
107 objects1,
108 "abc,,,\"a,b,c\",123",
109 new String[]{"abc", null, null, "a,b,c", "123"});
110 every(CSVFormat.DEFAULT.builder().setNullString("").setEscape('?').setQuoteMode(QuoteMode.NONE).build(),
111 objects1,
112 "abc,,,a?,b?,c,123",
113 new String[]{"abc", null, null, "a,b,c", "123"});
114 every(CSVFormat.DEFAULT.builder().setNullString("").setQuoteMode(QuoteMode.NON_NUMERIC).build(),
115 objects1,
116 "\"abc\",\"\",,\"a,b,c\",123",
117 new String[]{"abc", "", null, "a,b,c", "123"});
118
119 }
120
121 @Test
122 public void testWithSetNullStringNULL() throws IOException {
123
124 every(CSVFormat.DEFAULT.builder().setNullString("NULL").build(),
125 objects2,
126 "abc,NULL,NULL,\"a,b,c\",123",
127 new String[]{"abc", null, null, "a,b,c", "123"});
128 every(CSVFormat.DEFAULT.builder().setNullString("NULL").setQuoteMode(QuoteMode.ALL).build(),
129 objects2,
130 "\"abc\",\"NULL\",\"NULL\",\"a,b,c\",\"123\"",
131 new String[]{"abc", null, null, "a,b,c", "123"});
132 every(CSVFormat.DEFAULT.builder().setNullString("NULL").setQuoteMode(QuoteMode.ALL_NON_NULL).build(),
133 objects2,
134 "\"abc\",\"NULL\",NULL,\"a,b,c\",\"123\"",
135 new String[]{"abc", "NULL", null, "a,b,c", "123"});
136 every(CSVFormat.DEFAULT.builder().setNullString("NULL").setQuoteMode(QuoteMode.MINIMAL).build(),
137 objects2,
138 "abc,NULL,NULL,\"a,b,c\",123",
139 new String[]{"abc", null, null, "a,b,c", "123"});
140 every(CSVFormat.DEFAULT.builder().setNullString("NULL").setEscape('?').setQuoteMode(QuoteMode.NONE).build(),
141 objects2,
142 "abc,NULL,NULL,a?,b?,c,123",
143 new String[]{"abc", null, null, "a,b,c", "123"});
144 every(CSVFormat.DEFAULT.builder().setNullString("NULL").setQuoteMode(QuoteMode.NON_NUMERIC).build(),
145 objects2,
146 "\"abc\",\"NULL\",NULL,\"a,b,c\",123",
147 new String[]{"abc", "NULL", null, "a,b,c", "123"});
148
149 }
150 }