package org.araqne.logdb.query.expr; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.araqne.logdb.QueryParseException; import org.araqne.logdb.Row; import org.araqne.logdb.Strings; import org.junit.Test; public class SplitTest { @Test public void singleDelimiterTest() { List<String> result = getResult(",", "hello,world"); assertEquals(2, result.size()); assertEquals("hello", result.get(0)); assertEquals("world", result.get(1)); } @Test public void singleDelimiterBlankTokenTest() { List<String> result = getResult(",", "qoo,,foo"); assertEquals(3, result.size()); assertEquals("qoo", result.get(0)); assertEquals("", result.get(1)); assertEquals("foo", result.get(2)); } @Test public void multiDelimitersTest() { List<String> result = getResult("'|,", "1'|,2'|,3'|,4"); assertEquals(4, result.size()); assertEquals("1", result.get(0)); assertEquals("2", result.get(1)); assertEquals("3", result.get(2)); assertEquals("4", result.get(3)); } @Test public void multiDelimitersBlankTokenTest() { List<String> result = getResult("'|,", "1'|,2'|,3'|,'|,4"); assertEquals(5, result.size()); assertEquals("1", result.get(0)); assertEquals("2", result.get(1)); assertEquals("3", result.get(2)); assertEquals("", result.get(3)); assertEquals("4", result.get(4)); } @Test public void emptyTargetTest() { List<String> result = getResult(",", ""); assertEquals(0, result.size()); } @Test public void emptyNullTest() { List<String> result = getResult(",", null); assertNull(result); } @Test public void spaceTokensTest() { List<String> result = getResult(",", " , , , , , "); assertEquals(6, result.size()); assertEquals(" ", result.get(0)); assertEquals(" ", result.get(1)); assertEquals(" ", result.get(2)); assertEquals(" ", result.get(3)); assertEquals(" ", result.get(4)); assertEquals(" ", result.get(5)); } @Test public void emptyTokensTest() { List<String> result = getResult(",", ",,,,,"); assertEquals(6, result.size()); assertEquals("", result.get(0)); assertEquals("", result.get(1)); assertEquals("", result.get(2)); assertEquals("", result.get(3)); assertEquals("", result.get(4)); assertEquals("", result.get(5)); } @Test public void includeSpaceTokensTest() { List<String> result = getResult(",", "a ,b , c, d , e e ,"); assertEquals(6, result.size()); assertEquals("a ", result.get(0)); assertEquals("b ", result.get(1)); assertEquals(" c", result.get(2)); assertEquals(" d ", result.get(3)); assertEquals(" e e ", result.get(4)); assertEquals("", result.get(5)); } @Test public void tabSplitTest() { List<String> result = getResult(Strings.unescape("\\t"), "a\tb\tc"); assertEquals(Arrays.asList("a","b","c"), result); } @Test public void includeSpaceDelimiterTest() { List<String> result = getResult(", ", "a, b, c, d, e"); assertEquals(5, result.size()); assertEquals("a", result.get(0)); assertEquals("b", result.get(1)); assertEquals("c", result.get(2)); assertEquals("d", result.get(3)); assertEquals("e", result.get(4)); } @Test public void testError90770(){ try { new Split(null, expr(1)); fail(); } catch (QueryParseException e) { if (e.isDebugMode()) { System.out.println(e.getMessage()); } assertEquals("99000", e.getType()); } } @Test public void testError90771(){ List<Expression> expr = new ArrayList<Expression> (); expr.add(new StringConstant("1,2,3,4,5")); expr.add(null); try { new Split(null, expr); fail(); } catch (QueryParseException e) { if (e.isDebugMode()) { System.out.println(e.getMessage()); } assertEquals("90771", e.getType()); } } private List<Expression> expr(Object...object ){ List<Expression> expr = new ArrayList<Expression>(); for(Object o: object){ if(o instanceof Expression) expr.add((Expression)o); else if(o instanceof String) expr.add(new StringConstant((String)o)); else if(o instanceof Number) expr.add(new NumberConstant((Number)o)); else if(o instanceof Boolean) expr.add(new BooleanConstant((Boolean)o)); } return expr; } @SuppressWarnings("unchecked") private List<String> getResult(String delimiter, String line) { Expression arg1 = (Expression) new Field(null, Arrays.asList((Expression) new StringConstant("line"))); Expression arg2 = (Expression) new StringConstant(delimiter); List<Expression> exprs = Arrays.asList(arg1, arg2); Split split = new Split(null, exprs); Row row = new Row(); row.put("line", line); Object o = split.eval(row); if (o == null) return null; return (List<String>) o; } }