package au.gov.amsa.mariweb;
import static au.gov.amsa.mariweb.OperatorExtractValuesFromInsertStatement.parseValuesFromClause;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import rx.Subscriber;
public class OperatorExtractValuesFromInsertStatementTest {
@Test
public void testParseValuesFromClause() {
MySubscriber s = createSubscriber();
parseValuesFromClause("(1,2,3,4),(5,6)", s);
assertEquals(2, s.list().size());
assertEquals(Arrays.asList("1", "2", "3", "4"), s.list().get(0));
assertEquals(Arrays.asList("5", "6"), s.list().get(1));
}
@Test
public void testParseValuesFromClauseWithQuotes() {
MySubscriber s = createSubscriber();
parseValuesFromClause("(1,'ab')", s);
assertEquals(Arrays.asList("1", "ab"), s.latest());
}
@Test
public void testParseValuesFromClauseWithDoubleQuote() {
MySubscriber s = createSubscriber();
parseValuesFromClause("('ab\\\"')", s);
assertEquals(Arrays.asList("ab\""), s.latest());
}
@Test
public void testParseValuesFromClauseWithEscapedBackslash() {
MySubscriber s = createSubscriber();
parseValuesFromClause("('\\\\i')", s);
assertEquals(Arrays.asList("\\i"), s.latest());
}
@Test
public void testParseValuesFromClauseWithEscapedQuote() {
MySubscriber s = createSubscriber();
parseValuesFromClause("('\\'')", s);
assertEquals(Arrays.asList("'"), s.latest());
}
@Test
public void testParseValuesFromClauseWithBackQuote() {
MySubscriber s = createSubscriber();
parseValuesFromClause("('`00003vP10,4*58')", s);
assertEquals(Arrays.asList("`00003vP10,4*58"), s.latest());
}
@Test
public void testParseValuesFromClauseWithEscapedQuotes() {
MySubscriber s = createSubscriber();
parseValuesFromClause("('\\'\\'')", s);
assertEquals(Arrays.asList("''"), s.latest());
}
@Test
public void testParseValuesFromClauseWithEscapedQuotesInterleavedWithCharacters() {
MySubscriber s = createSubscriber();
parseValuesFromClause("('a\\'b\\'c')", s);
assertEquals(Arrays.asList("a'b'c"), s.latest());
}
@Test
public void testParseValuesFromClauseWithQuotesAndCommasBetweenQuotes() {
MySubscriber s = createSubscriber();
parseValuesFromClause("(1,'ab,c')", s);
assertEquals(Arrays.asList("1", "ab,c"), s.latest());
}
@Test
public void testParseValuesFromClauseWithTwoQuotedStrings() {
MySubscriber s = createSubscriber();
parseValuesFromClause("('ab','cd')", s);
assertEquals(Arrays.asList("ab", "cd"), s.latest());
}
public MySubscriber createSubscriber() {
return new MySubscriber();
}
private static class MySubscriber extends Subscriber<List<String>> {
private final List<List<String>> list = new ArrayList<List<String>>();
@Override
public void onCompleted() {
// TODO Auto-generated method stub
}
@Override
public void onError(Throwable e) {
// TODO Auto-generated method stub
}
@Override
public void onNext(List<String> t) {
list.add(t);
}
List<String> latest() {
return list.get(list.size() - 1);
}
List<List<String>> list() {
return list;
}
};
}