package org.supercsv.io; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.supercsv.exception.SuperCSVException; import org.supercsv.prefs.CsvPreference; public class TokenizerTest { Tokenizer tokenizer; List<String> result; @Test public void headerFile_emptyValue() throws Exception { final String input = "header1\n "; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); // skip header tokenizer.readStringList(result); assertThat(result.size(), is(1)); assertThat(result.get(0), is("")); } @Test public void inputOneRow_2_quote() throws Exception { final String input = "\"\""; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.size(), is(1)); assertThat("only two must yield empty entry", result.get(0), is("")); } @Test public void inputOneRow_2_quote_inside_quote() throws Exception { final String input = "\"\"\"hello\"\"\""; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat("only two must yield empty entry", result.get(0), is("\"hello\"")); } @Test public void inputOneRow_2_quote_outside_quote() throws Exception { final String input = " yo \"\"hello\"\" "; // must not have " at start of line.. as that will not denote " tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.get(0), is("yo \"hello\"")); } @Test public void inputOneRow_4_quote() throws Exception { final String input = "\"\"\"\""; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.size(), is(1)); assertThat("4 quotes is 2 for start+end and 2 for an escaped quote", result.get(0), is("\"")); } @Test public void inputOneRow_empty() throws Exception { final String input = ""; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.size(), is(0)); } @Test public void inputOneRow_should_not_strim_spaces_before_and_after() throws Exception { final String input = "\" hello \" , \" you \" , \" there \""; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.get(0), is(" hello ")); assertThat(result.get(1), is(" you ")); assertThat(result.get(2), is(" there ")); } @Test public void inputOneRow_should_not_trim_spaces_between_words() throws Exception { final String input = " hello you , there on the , corner "; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.get(0), is("hello you")); assertThat(result.get(1), is("there on the")); assertThat(result.get(2), is("corner")); } @Test public void inputOneRow_should_not_trim_tabs_before_and_after() throws Exception { final String input = " \thello\t ,\tyou\t,\tthere\t"; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.get(0), is("\thello\t")); assertThat(result.get(1), is("\tyou\t")); assertThat(result.get(2), is("\tthere\t")); } @Test public void inputOneRow_should_trim_spaces_before_and_after() throws Exception { final String input = " hello , you , there "; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.get(0), is("hello")); assertThat(result.get(1), is("you")); assertThat(result.get(2), is("there")); } @Test public void inputOneRow_value() throws Exception { final String input = "k"; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.size(), is(1)); assertThat(result.get(0), is("k")); } @Test(expected = SuperCSVException.class) public void inputOneRow_value_missing_end_quote() throws Exception { final String input = "\"missing"; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.size(), is(1)); assertThat(result.get(0), is("m\nn")); } @Test public void inputOneRow_value_newline() throws Exception { final String input = "\"m\nn\""; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); assertThat(result.size(), is(1)); assertThat(result.get(0), is("m\nn")); } @Before public void setUp() throws Exception { result = new ArrayList<String>(); } @Test public void valueInHeaderFile() throws Exception { final String input = "header1\nvalue"; tokenizer = new Tokenizer(new StringReader(input), CsvPreference.EXCEL_PREFERENCE); tokenizer.readStringList(result); // skip header tokenizer.readStringList(result); assertThat(result.size(), is(1)); assertThat(result.get(0), is("value")); } }