1 package com.opencsv;
2
3 import com.opencsv.exceptions.CsvException;
4 import com.opencsv.exceptions.CsvValidationException;
5 import org.junit.jupiter.api.Test;
6
7 import java.io.BufferedReader;
8 import java.io.IOException;
9 import java.io.StringReader;
10 import java.io.StringWriter;
11 import java.util.List;
12
13 import static org.junit.jupiter.api.Assertions.assertArrayEquals;
14 import static org.junit.jupiter.api.Assertions.assertEquals;
15
16 public class UniCodeTest {
17 private static final String COMPOUND_STRING = "??,??";
18 private static final String COMPOUND_STRING_WITH_QUOTES = "\"??\",\"??\"";
19 private static final String FIRST_STRING = "??";
20 private static final String SECOND_STRING = "??";
21 private static final String[] UNICODE_ARRAY = {FIRST_STRING, SECOND_STRING};
22 private static final String[] MIXED_ARRAY = {"eins, 1", "ichi", FIRST_STRING, SECOND_STRING};
23 private static final String[] ASCII_ARRAY = {"foo", "bar"};
24 private static final String ASCII_STRING_WITH_QUOTES = "\"foo\",\"bar\"";
25 ICSVParser csvParser;
26
27 @Test
28 public void canParseUnicode() throws IOException {
29 csvParser = new CSVParser();
30 String[] items = csvParser.parseLine(COMPOUND_STRING);
31 assertEquals(2, items.length);
32 assertEquals(FIRST_STRING, items[0]);
33 assertEquals(SECOND_STRING, items[1]);
34 assertArrayEquals(UNICODE_ARRAY, items);
35 }
36
37 @Test
38 public void readerTest() throws IOException {
39 BufferedReader reader = new BufferedReader(new StringReader(FIRST_STRING));
40 String testString = reader.readLine();
41 assertEquals(FIRST_STRING, testString);
42 }
43
44 @Test
45 public void writerTest() {
46 StringWriter sw = new StringWriter();
47 sw.write(FIRST_STRING);
48 assertEquals(FIRST_STRING, sw.toString());
49 }
50
51 @Test
52 public void runUniCodeThroughCSVReader() throws IOException, CsvValidationException {
53 try (CSVReader reader = new CSVReader(new StringReader(COMPOUND_STRING))) {
54 String[] items = reader.readNext();
55 assertEquals(2, items.length);
56 assertEquals(FIRST_STRING, items[0]);
57 assertEquals(SECOND_STRING, items[1]);
58 assertArrayEquals(UNICODE_ARRAY, items);
59 }
60 }
61
62 @Test
63 public void runUniCodeThroughCSVWriter() throws IOException {
64 StringWriter sw = new StringWriter();
65 try (ICSVWriter writer = new CSVWriter(sw)) {
66 writer.writeNext(UNICODE_ARRAY);
67 }
68 assertEquals(COMPOUND_STRING_WITH_QUOTES.trim(), sw.toString().trim());
69 }
70
71 @Test
72 public void runASCIIThroughCSVWriter() throws IOException {
73 StringWriter sw = new StringWriter();
74 try (ICSVWriter writer = new CSVWriter(sw)) {
75 writer.writeNext(ASCII_ARRAY);
76 }
77 assertEquals(ASCII_STRING_WITH_QUOTES.trim(), sw.toString().trim());
78 }
79
80 @Test
81 public void writeThenReadAscii() throws IOException, CsvValidationException {
82 StringWriter sw = new StringWriter();
83 try (ICSVWriter writer = new CSVWriter(sw)) {
84 writer.writeNext(ASCII_ARRAY);
85 }
86 try (CSVReader reader = new CSVReader(new StringReader(sw.toString()))) {
87 String[] items = reader.readNext();
88 assertEquals(2, items.length);
89 assertArrayEquals(ASCII_ARRAY, items);
90 }
91 }
92
93 @Test
94 public void writeThenReadTwiceAscii() throws IOException, CsvException {
95 StringWriter sw = new StringWriter();
96 try (ICSVWriter writer = new CSVWriter(sw)) {
97 writer.writeNext(ASCII_ARRAY);
98 writer.writeNext(ASCII_ARRAY);
99 }
100 try (CSVReader reader = new CSVReader(new StringReader(sw.toString()))) {
101 List<String[]> lines = reader.readAll();
102 assertEquals(2, lines.size());
103
104 String[] items = lines.get(0);
105 assertEquals(2, items.length);
106 assertArrayEquals(ASCII_ARRAY, items);
107
108
109 items = lines.get(1);
110 assertEquals(2, items.length);
111 assertArrayEquals(ASCII_ARRAY, items);
112 }
113 }
114
115 @Test
116 public void writeThenReadTwiceUnicode() throws IOException, CsvException {
117 StringWriter sw = new StringWriter();
118 try (ICSVWriter writer = new CSVWriter(sw)) {
119 writer.writeNext(UNICODE_ARRAY);
120 writer.writeNext(UNICODE_ARRAY);
121 }
122 try (CSVReader reader = new CSVReader(new StringReader(sw.toString()))) {
123 List<String[]> lines = reader.readAll();
124 assertEquals(2, lines.size());
125
126 String[] items = lines.get(0);
127 assertEquals(2, items.length);
128 assertArrayEquals(UNICODE_ARRAY, items);
129
130
131 items = lines.get(1);
132 assertEquals(2, items.length);
133 assertArrayEquals(UNICODE_ARRAY, items);
134 }
135 }
136
137 @Test
138 public void writeThenReadTwiceMixedUnicode() throws IOException, CsvException {
139 StringWriter sw = new StringWriter();
140 try (ICSVWriter writer = new CSVWriter(sw)) {
141 writer.writeNext(MIXED_ARRAY);
142 writer.writeNext(MIXED_ARRAY);
143 }
144 try (CSVReader reader = new CSVReader(new StringReader(sw.toString()))) {
145 List<String[]> lines = reader.readAll();
146 assertEquals(2, lines.size());
147
148 String[] items = lines.get(0);
149 assertEquals(4, items.length);
150 assertArrayEquals(MIXED_ARRAY, items);
151
152
153 items = lines.get(1);
154 assertEquals(4, items.length);
155 assertArrayEquals(MIXED_ARRAY, items);
156 }
157 }
158 }