package net.mostlyoriginal.api.operation.flow;
import net.mostlyoriginal.api.operation.common.OperationFlow;
import net.mostlyoriginal.api.operation.common.TestOperation;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Daan van Yperen
*/
public abstract class OperationFlowTest extends OperationTest {
protected OperationFlow operation;
protected TestOperation[] op;
protected void createOps(int... maxCalls) {
int index=0;
TestOperation[] operations = new TestOperation[maxCalls.length];
for (int maxCall : maxCalls) {
TestOperation testOperation = new TestOperation(maxCall);
operations[index++] = testOperation;
operation.add(testOperation);
}
op = operations;
}
private void createOps(TestOperation... operations) {
for (TestOperation op : operations) {
operation.add(op);
}
op = operations;
}
protected void processOperation() {
operation.process(0, entity);
}
@Test
public void ensure_not_finished_when_operations_remain() {
createOps(1);
Assert.assertFalse(operation.isCompleted());
}
@Test
public void ensure_finished_when_no_operations_remain() {
createOps(1);
processOperation();
Assert.assertTrue(operation.isCompleted());
}
@Test
public void ensure_restart_causes_child_operation_restart() {
createOps(1);
processOperation();
operation.rewind();
Assert.assertFalse(op[0].isCompleted());
}
}