package net.codjo.segmentation.server.participant;
import net.codjo.segmentation.server.blackboard.message.Level;
import net.codjo.segmentation.server.blackboard.message.Todo;
import net.codjo.segmentation.server.participant.common.Page;
import net.codjo.segmentation.server.participant.context.TodoContent;
import net.codjo.segmentation.server.preference.family.Row;
import net.codjo.segmentation.server.preference.family.RowFilter;
/**
*
*/
public class CalculatorParticipantTest extends SegmentationParticipantTestCase<CalculatorParticipant> {
private static final String[] COLUMN_NAMES = new String[]{"INPUT"};
public CalculatorParticipantTest() {
super(JdbcType.JDBC_HSQL);
}
public void test_compute() throws Exception {
Page page = new Page();
page.addRow(new Row(COLUMN_NAMES, new Object[]{"a"}));
page.addRow(new Row(COLUMN_NAMES, new Object[]{"b"}));
segmentationContext.putPage(todoContent.getPageId(), page);
executeHandleTodo(new Todo<TodoContent>(1, todoContent));
String expected = "evaluator.evaluate(row{INPUT=a})";
expected += ", result.add(row{RESULT=a})";
expected += ", evaluator.evaluate(row{INPUT=b})";
expected += ", result.add(row{RESULT=b})";
expected += ", result.close()";
expected += ", write(Todo{-1}, Level{information}), erase(Todo{1}, Level{to-compute})";
log.assertContent(expected);
}
public void test_compute_filter() throws Exception {
String[] names = new String[]{"INPUT", "AP_FILTER$MY_VALUE"};
Page page = new Page();
page.addRow(new Row(names, new Object[]{"a", false}));
page.addRow(new Row(names, new Object[]{"b", true}));
segmentationContext.putPage(todoContent.getPageId(), page);
segmentationContext.getFamilyPreference().setFilter(new MyRowFilter());
executeHandleTodo(new Todo<TodoContent>(1, todoContent));
String expected = "evaluator.evaluate(row{INPUT=a, AP_FILTER$MY_VALUE=false})";
expected += ", result.add(row{RESULT=a})";
expected += ", result.close()";
expected += ", write(Todo{-1}, Level{information}), erase(Todo{1}, Level{to-compute})";
log.assertContent(expected);
}
public void test_compute_evluationError() throws Exception {
Page page = new Page();
page.addRow(new Row(COLUMN_NAMES, new Object[]{"failure"}));
page.addRow(new Row(COLUMN_NAMES, new Object[]{"b"}));
segmentationContext.putPage(todoContent.getPageId(), page);
executeHandleTodo(new Todo<TodoContent>(1, todoContent));
String expected = "evaluator.evaluate(row{INPUT=failure})";
expected += ", result.addError(row{RESULT=failure})";
expected += ", evaluator.evaluate(row{INPUT=b})";
expected += ", result.add(row{RESULT=b})";
expected += ", result.close()";
expected += ", write(Todo{-1}, Level{information}), erase(Todo{1}, Level{to-compute})";
log.assertContent(expected);
}
@Override
protected void doSetup() throws Exception {
super.doSetup();
segmentationContext = declareSegmentationContext(todoContent.getSegmentationId());
}
@Override
protected Level getListenedLevel() {
return new Level("to-compute");
}
@Override
protected CalculatorParticipant createParticipant() {
return new CalculatorParticipant(contextManager);
}
private static class MyRowFilter implements RowFilter<Boolean> {
public boolean isRowExcluded(int segmentationId, Row row, Boolean filterValue) {
return filterValue;
}
public String getTableName() {
return "AP_FILTER";
}
public String getColumnName() {
return "MY_VALUE";
}
}
}