--- /dev/null
+package org.argeo.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+public class CsvParserWithQuotedSeparatorTest extends TestCase {
+ public void testSimpleParse() throws Exception {
+ String toParse = "Header1,\"Header2\",Header3,\"Header4\"\n"
+ + "\"Col1, Col2\",\"Col\n2\",Col3,\"\"\"Col4\"\"\"\n";
+
+ InputStream in = new ByteArrayInputStream(toParse.getBytes());
+
+ CsvParser csvParser = new CsvParser() {
+ protected void processLine(Integer lineNumber, List<String> header,
+ List<String> tokens) {
+ assertEquals(header.size(), tokens.size());
+ assertEquals(4, tokens.size());
+ assertEquals("Col1, Col2", tokens.get(0));
+ }
+ };
+ // System.out.println(toParse);
+ csvParser.parse(in);
+ in.close();
+
+ }
+
+ public void testParseFile() throws Exception {
+
+ final Map<Integer, Map<String, String>> lines = new HashMap<Integer, Map<String, String>>();
+ InputStream in = getClass().getResourceAsStream(
+ "/org/argeo/util/ReferenceFile.csv");
+
+ CsvParserWithLinesAsMap parser = new CsvParserWithLinesAsMap() {
+ protected void processLine(Integer lineNumber,
+ Map<String, String> line) {
+ // System.out.println("processing line #" + lineNumber);
+ lines.put(lineNumber, line);
+ }
+ };
+
+ parser.parse(in);
+ in.close();
+
+ Map<String, String> line = lines.get(2);
+ assertEquals(",,,,", line.get("Coma testing"));
+ line = lines.get(3);
+ assertEquals(",, ,,", line.get("Coma testing"));
+ line = lines.get(4);
+ assertEquals("module1, module2", line.get("Coma testing"));
+ line = lines.get(5);
+ assertEquals("module1,module2", line.get("Coma testing"));
+ line = lines.get(6);
+ assertEquals(",module1,module2, \nmodule3, module4",
+ line.get("Coma testing"));
+ assertEquals(5, lines.size());
+
+ }
+}
-"ID","A long Text","Name","Other","Number","Reference","Target","Date","Update","Language","ID Ref","weird chars","line feeds","after line feed","Empty column","Status comment","Comments","Empty"
-"AK251","Everything & with some line feed \n more “some” quote","B TY",,78.6,"A1155222221111268515131",,12/12/12,03/12/08,,9821308500721,"%%%ùù","ao","alf",,,"Bruno/Antoine what is the real identity?",
+"ID","A long Text","Name","Other","Number","Reference","Target","Date","Update","Language","ID Ref","Weird chars","line feeds","after line feed","Empty column","Status comment","Comments","Empty","Coma testing"
+"AK251","Everything & with some line feed
+ more “some” quote","Marge S.",,78.6,"A1155222221111268515131",,12/12/12,03/12/08,,9821308500721,"%%%ùù","ao","Nothing special",,,"Some very usefull comment",,",,,,"
"AG254","same","Roger “wallace” Big","15 – JI",78.5,"A1155222221111268515131","next milestone",12/12/12,03/12/08,"_fr (French - France)",9812309500953,"***µ”","a
-o","alf",,"Do the job",,
+o","after line feed",,"Do the job",,,",, ,,"
"FG211","Very long text with some bullets.
1 first
2 second
-3. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long","None","15 – JI",15.4,"A1155222221111268515131","next milestone",12/12/12,03/12/08,"_fr (French - France)",9812309500952,"///","a
+3. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long. some more very very very long","Father & Son","15 – JI",15.4,"A1155222221111268515131","next milestone",12/12/12,03/12/08,"_fr (French - France)",9812309500952,"///","a
-o","alf",,"Be fast",,
+o","module1,module2",,"Be fast",,,"module1, module2"
"RRT152","Very long text with some bullets.
1 first
2 second
o
-","alf",,,,
+","module1,module2",,,,,"module1,module2"
"YU121","Another use case : “blank line”
-After the blank.","nothing with brackets( )","15 – JI",15.2,"A1155222221111268515131",,12/12/12,03/12/08,"_fr (French - France)",9812309500925,",;:?./","ao","alf",,,,
+After the blank.","nothing with brackets( )","15 – JI",15.2,"A1155222221111268515131",,12/12/12,03/12/08,"_fr (French - France)",9812309500925,",;:?./","ao","
+
+
+
+After line feed again",,,,,",module1,module2,
+module3, module4"