package au.com.bytecode.opencsv; import org.junit.Test; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.util.List; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; public class UniCodeTest { CSVParser csvParser; private static final String COMPOUND_STRING = "??,??"; private static final String COMPOUND_STRING_WITH_QUOTES = "\"??\",\"??\""; private static final String FIRST_STRING = "??"; private static final String SECOND_STRING = "??"; private static final String[] UNICODE_ARRAY = {FIRST_STRING, SECOND_STRING}; private static final String[] MIXED_ARRAY = {"eins, 1", "ichi",FIRST_STRING, SECOND_STRING}; private static final String[] ASCII_ARRAY = {"foo", "bar"}; private static final String ASCII_STRING_WITH_QUOTES = "\"foo\",\"bar\""; @Test public void canParseUnicode() throws IOException { csvParser = new CSVParser(); String simpleString = COMPOUND_STRING; String[] items = csvParser.parseLine(simpleString); assertEquals(2, items.length); assertEquals(FIRST_STRING, items[0]); assertEquals(SECOND_STRING, items[1]); assertArrayEquals(UNICODE_ARRAY, items); } @Test public void readerTest() throws IOException { BufferedReader reader = new BufferedReader(new StringReader(FIRST_STRING)); String testString = reader.readLine(); assertEquals(FIRST_STRING, testString); } @Test public void writerTest(){ StringWriter sw = new StringWriter(); sw.write(FIRST_STRING); assertEquals(FIRST_STRING, sw.toString()); } @Test public void runUniCodeThroughCSVReader() throws IOException { CSVReader reader = new CSVReader(new StringReader(COMPOUND_STRING)); String[] items = reader.readNext(); assertEquals(2, items.length); assertEquals(FIRST_STRING, items[0]); assertEquals(SECOND_STRING, items[1]); assertArrayEquals(UNICODE_ARRAY, items); } @Test public void runUniCodeThroughCSVWriter() { StringWriter sw = new StringWriter(); CSVWriter writer = new CSVWriter(sw); writer.writeNext(UNICODE_ARRAY); assertEquals(COMPOUND_STRING_WITH_QUOTES.trim(), sw.toString().trim()); } @Test public void runASCIIThroughCSVWriter() { StringWriter sw = new StringWriter(); CSVWriter writer = new CSVWriter(sw); writer.writeNext(ASCII_ARRAY); assertEquals(ASCII_STRING_WITH_QUOTES.trim(), sw.toString().trim()); } @Test public void writeThenReadAscii() throws IOException { StringWriter sw = new StringWriter(); CSVWriter writer = new CSVWriter(sw); writer.writeNext(ASCII_ARRAY); CSVReader reader = new CSVReader(new StringReader(sw.toString())); String[] items = reader.readNext(); assertEquals(2, items.length); assertArrayEquals(ASCII_ARRAY, items); } @Test public void writeThenReadTwiceAscii() throws IOException { StringWriter sw = new StringWriter(); CSVWriter writer = new CSVWriter(sw); writer.writeNext(ASCII_ARRAY); writer.writeNext(ASCII_ARRAY); CSVReader reader = new CSVReader(new StringReader(sw.toString())); List<String[]> lines = reader.readAll(); assertEquals(2, lines.size()); String[] items = lines.get(0); assertEquals(2, items.length); assertArrayEquals(ASCII_ARRAY, items); items = lines.get(1); assertEquals(2, items.length); assertArrayEquals(ASCII_ARRAY, items); } @Test public void writeThenReadTwiceUnicode() throws IOException { StringWriter sw = new StringWriter(); CSVWriter writer = new CSVWriter(sw); writer.writeNext(UNICODE_ARRAY); writer.writeNext(UNICODE_ARRAY); CSVReader reader = new CSVReader(new StringReader(sw.toString())); List<String[]> lines = reader.readAll(); assertEquals(2, lines.size()); String[] items = lines.get(0); assertEquals(2, items.length); assertArrayEquals(UNICODE_ARRAY, items); items = lines.get(1); assertEquals(2, items.length); assertArrayEquals(UNICODE_ARRAY, items); } @Test public void writeThenReadTwiceMixedUnicode() throws IOException { StringWriter sw = new StringWriter(); CSVWriter writer = new CSVWriter(sw); writer.writeNext(MIXED_ARRAY); writer.writeNext(MIXED_ARRAY); CSVReader reader = new CSVReader(new StringReader(sw.toString())); List<String[]> lines = reader.readAll(); assertEquals(2, lines.size()); String[] items = lines.get(0); assertEquals(4, items.length); assertArrayEquals(MIXED_ARRAY, items); items = lines.get(1); assertEquals(4, items.length); assertArrayEquals(MIXED_ARRAY, items); } }