97 lines
2.7 KiB
Java
97 lines
2.7 KiB
Java
package supervision;
|
|
|
|
import akka.actor.ActorRef;
|
|
import akka.actor.ActorSystem;
|
|
import akka.actor.Props;
|
|
import akka.actor.Status;
|
|
import akka.testkit.JavaTestKit;
|
|
import org.junit.AfterClass;
|
|
import org.junit.BeforeClass;
|
|
import org.junit.Test;
|
|
|
|
import java.util.stream.IntStream;
|
|
import static supervision.Expression.*;
|
|
|
|
public class ArithmeticServiceTest {
|
|
static ActorSystem system;
|
|
|
|
@BeforeClass
|
|
public static void setup() {
|
|
system = ActorSystem.create("BuncherTest");
|
|
}
|
|
|
|
@AfterClass
|
|
public static void tearDown() {
|
|
JavaTestKit.shutdownActorSystem(system);
|
|
system = null;
|
|
}
|
|
|
|
@Test
|
|
public void TheArithmeticServiceShouldCalculateConstantExpressionsProperly(){
|
|
new JavaTestKit(system) {{
|
|
final ActorRef service =
|
|
system.actorOf(Props.create(ArithmeticService.class));
|
|
final ActorRef probe = getRef();
|
|
IntStream.range(-2, 3).forEach(x -> {
|
|
service.tell(new Const(x), probe);
|
|
expectMsgEquals(x);
|
|
});
|
|
}};
|
|
}
|
|
|
|
@Test
|
|
public void TheArithmeticServiceShouldCalculateAdditionProperly(){
|
|
new JavaTestKit(system) {{
|
|
final ActorRef service =
|
|
system.actorOf(Props.create(ArithmeticService.class));
|
|
final ActorRef probe = getRef();
|
|
IntStream.range(-2, 3).forEach(x ->
|
|
IntStream.range(-2, 3).forEach(y -> {
|
|
service.tell(new Add(new Const(x), new Const(y)), probe);
|
|
expectMsgEquals(x + y);
|
|
})
|
|
);
|
|
}};
|
|
}
|
|
|
|
@Test
|
|
public void TheArithmeticServiceShouldCalculateMultiplicationAndDivisionProperly(){
|
|
new JavaTestKit(system) {{
|
|
final ActorRef service =
|
|
system.actorOf(Props.create(ArithmeticService.class));
|
|
final ActorRef probe = getRef();
|
|
IntStream.range(-2, 3).forEach(x ->
|
|
IntStream.range(-2, 3).forEach(y -> {
|
|
service.tell(new Multiply(new Const(x), new Const(y)), probe);
|
|
expectMsgEquals(x * y);
|
|
})
|
|
);
|
|
|
|
// Skip zero in the second parameter
|
|
IntStream.range(-2, 3).forEach(x ->
|
|
IntStream.of(-2, -1, 1, 2).forEach(y -> {
|
|
service.tell(new Divide(new Const(x), new Const(y)), probe);
|
|
expectMsgEquals(x / y);
|
|
})
|
|
);
|
|
}};
|
|
}
|
|
|
|
@Test
|
|
public void TheArithmeticServiceShouldSurviveIllegalExpressions(){
|
|
new JavaTestKit(system) {{
|
|
final ActorRef service =
|
|
system.actorOf(Props.create(ArithmeticService.class));
|
|
final ActorRef probe = getRef();
|
|
|
|
service.tell(new Divide(new Const(1), new Const(0)), probe);
|
|
expectMsgClass(Status.Failure.class);
|
|
|
|
service.tell(new Add(null, new Const(0)), probe);
|
|
expectMsgClass(Status.Failure.class);
|
|
|
|
service.tell(new Add(new Const(1), new Const(0)), probe);
|
|
expectMsgEquals(1);
|
|
}};
|
|
}
|
|
}
|