package org.araqne.log.api; import static org.junit.Assert.assertEquals; import java.util.HashMap; import java.util.Map; import org.junit.Ignore; import org.junit.Test; public class CsvLogParserTest { @Test public void testCommaCsvParse() { String s = "a,b,c,d,e"; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("column0")); assertEquals("b", parsed.get("column1")); assertEquals("c", parsed.get("column2")); assertEquals("d", parsed.get("column3")); assertEquals("e", parsed.get("column4")); } @Test public void testCommaQuoteCsvParse() { String s = "\"a\",\"b\",\"c\",\"d\",\"e\""; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("column0")); assertEquals("b", parsed.get("column1")); assertEquals("c", parsed.get("column2")); assertEquals("d", parsed.get("column3")); assertEquals("e", parsed.get("column4")); } @Test public void testCommaQuoteCsvParse2() { String s = "\"a\",b,\"c\",d,\"e\""; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("column0")); assertEquals("b", parsed.get("column1")); assertEquals("c", parsed.get("column2")); assertEquals("d", parsed.get("column3")); assertEquals("e", parsed.get("column4")); } @Test public void testTabCsvParse() { String s = "a b c d e"; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(true, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("column0")); assertEquals("b", parsed.get("column1")); assertEquals("c", parsed.get("column2")); assertEquals("d", parsed.get("column3")); assertEquals("e", parsed.get("column4")); } @Test public void testTabQuoteCsvParse() { String s = "\"a\" \"b\" \"c\" \"d\" \"e\""; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(true, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("column0")); assertEquals("b", parsed.get("column1")); assertEquals("c", parsed.get("column2")); assertEquals("d", parsed.get("column3")); assertEquals("e", parsed.get("column4")); } @Test public void testTabQuoteCsvParse2() { String s = "\"a\" \"b\" c \"d\" e"; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(true, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("column0")); assertEquals("b", parsed.get("column1")); assertEquals("c", parsed.get("column2")); assertEquals("d", parsed.get("column3")); assertEquals("e", parsed.get("column4")); } @Test public void testCsvFieldParse() { String s = "a,b,c,d,e"; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, new String[] { "A", "B", "C", "D", "E" }, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("A")); assertEquals("b", parsed.get("B")); assertEquals("c", parsed.get("C")); assertEquals("d", parsed.get("D")); assertEquals("e", parsed.get("E")); } @Test public void testCsvFieldParse2() { String s = "a,b,c,d,e"; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, new String[] { "A", "B" }, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("A")); assertEquals("b", parsed.get("B")); assertEquals("c", parsed.get("column2")); assertEquals("d", parsed.get("column3")); assertEquals("e", parsed.get("column4")); } @Test public void testEscape() { String s = "\"a\",\"b\\\"c\""; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("a", parsed.get("column0")); assertEquals("b\"c", parsed.get("column1")); } @Test public void testEscape2() { String s = "\\\"a, b\\\", c\\\"d , \\\"e\\\"f\\\"g\\\""; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("\\\"a", parsed.get("column0")); assertEquals(" b\\\"", parsed.get("column1")); assertEquals(" c\\\"d ", parsed.get("column2")); assertEquals(" \\\"e\\\"f\\\"g\\\"", parsed.get("column3")); } @Test public void testEmptyColumn() { String s = ",,,"; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals("", parsed.get("column0")); assertEquals("", parsed.get("column1")); assertEquals("", parsed.get("column2")); } @Test public void testBlank() { String s = " a,b , c "; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvLogParser parser = new CsvLogParser(false, false, null, "line", false); Map<String, Object> parsed = parser.parse(m); assertEquals(" a", parsed.get("column0")); assertEquals("b ", parsed.get("column1")); assertEquals(" c ", parsed.get("column2")); } @Ignore public void testSpeed() { String s = "a,b,c,d,e"; Map<String, Object> m = new HashMap<String, Object>(); m.put("line", s); CsvParser parser = new CsvParser(false, false, null); int i = 0; long start = System.currentTimeMillis(); while (i < 10000000) { parser.parse(s); i++; } System.out.println((System.currentTimeMillis() - start) + "ms elapsed"); // darkluster pc -> 2789ms elapsed } // fix for issue#624 @Test public void testBlankFieldName() { Map<String, String> configs = new HashMap<String, String>(); configs.put("column_headers", "a, b, c"); CsvLogParser parser = (CsvLogParser) new CsvParserFactory().createParser(configs); String[] headers = parser.getColumnHeaders(); assertEquals(3, headers.length); assertEquals("a", headers[0]); assertEquals("b", headers[1]); assertEquals("c", headers[2]); } }