package eu.stratosphere.sopremo.base;
import static eu.stratosphere.sopremo.type.JsonUtil.createPath;
import org.junit.Test;
import eu.stratosphere.sopremo.expressions.ArithmeticExpression;
import eu.stratosphere.sopremo.expressions.ArithmeticExpression.ArithmeticOperator;
import eu.stratosphere.sopremo.expressions.ArrayAccess;
import eu.stratosphere.sopremo.expressions.ObjectCreation;
import eu.stratosphere.sopremo.testing.SopremoOperatorTestBase;
import eu.stratosphere.sopremo.testing.SopremoTestPlan;
public class ContextualProjectionTest extends SopremoOperatorTestBase<ContextualProjection> {
@Test
public void shouldAddContext() {
final SopremoTestPlan sopremoPlan = new SopremoTestPlan(2, 1);
sopremoPlan.getOutputOperator(0).setInputs(
new ContextualProjection().
withInputs(sopremoPlan.getInputOperators(0, 2)));
sopremoPlan.getInput(0).
addObject("a", 1, "b", 4).
addObject("a", 2, "b", 5).
addObject("a", -1, "b", 4);
sopremoPlan.getInput(1).
addValue(42);
sopremoPlan.getExpectedOutput(0).
addObject("a", 1, "b", 4, "context", 42).
addObject("a", 2, "b", 5, "context", 42).
addObject("a", -1, "b", 4, "context", 42);
sopremoPlan.run();
}
/*
* (non-Javadoc)
* @see eu.stratosphere.sopremo.EqualCloneTest#shouldComplyEqualsOperator()
*/
@Override
@Test
public void shouldComplyEqualsOperator() {
super.shouldComplyEqualsOperator();
}
@Test
public void shouldConfigureContextLocation() {
final SopremoTestPlan sopremoPlan = new SopremoTestPlan(2, 1);
sopremoPlan.getOutputOperator(0).setInputs(
new ContextualProjection().
withContextPath(new ArrayAccess(2)).
withInputs(sopremoPlan.getInputOperators(0, 2)));
sopremoPlan.getInput(0).
addArray(1, 4).
addArray(2, 5).
addArray(-1, 4);
sopremoPlan.getInput(1).
addValue(42);
sopremoPlan.getExpectedOutput(0).
addArray(1, 4, 42).
addArray(2, 5, 42).
addArray(-1, 4, 42);
sopremoPlan.run();
}
@Test
public void shouldProjectNormally() {
final SopremoTestPlan sopremoPlan = new SopremoTestPlan(2, 1);
final ObjectCreation transformation = new ObjectCreation();
transformation.addMapping("sum", new ArithmeticExpression(createPath("a"),
ArithmeticOperator.ADDITION, createPath("b")));
sopremoPlan.getOutputOperator(0).setInputs(
new ContextualProjection().
withResultProjection(transformation).
withInputs(sopremoPlan.getInputOperators(0, 2)));
sopremoPlan.getInput(0).
addObject("a", 1, "b", 4).
addObject("a", 2, "b", 5).
addObject("a", -1, "b", 4);
sopremoPlan.getInput(1).
addValue(42);
sopremoPlan.getExpectedOutput(0).
addObject("sum", 5).
addObject("sum", 7).
addObject("sum", 3);
sopremoPlan.run();
}
@Override
protected ContextualProjection createDefaultInstance(final int index) {
final ObjectCreation transformation = new ObjectCreation();
transformation.addMapping("field", createPath(String.valueOf(index)));
return new ContextualProjection().withResultProjection(transformation);
}
}