git-subtree-dir: solution/H04 git-subtree-split: 2ed3e5642f6d0a6d1d02ae17ffc33f3a1076f8bb
103 lines
4.4 KiB
Java
103 lines
4.4 KiB
Java
package h04.chesspieces;
|
|
|
|
import fopbot.Robot;
|
|
import fopbot.World;
|
|
import h04.movement.DiagonalMover;
|
|
import h04.movement.MoveStrategy;
|
|
import org.junit.jupiter.api.AfterEach;
|
|
import org.junit.jupiter.api.Test;
|
|
import org.objectweb.asm.Type;
|
|
import org.sourcegrade.jagr.api.rubric.TestForSubmission;
|
|
import org.tudalgo.algoutils.transform.SubmissionExecutionHandler;
|
|
import org.tudalgo.algoutils.transform.util.headers.ClassHeader;
|
|
import org.tudalgo.algoutils.transform.util.headers.MethodHeader;
|
|
import org.tudalgo.algoutils.tutor.general.assertions.Context;
|
|
|
|
import java.awt.Point;
|
|
import java.util.Arrays;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.assertEquals;
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.assertSame;
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.assertTrue;
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.call;
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.callObject;
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.contextBuilder;
|
|
import static org.tudalgo.algoutils.tutor.general.assertions.Assertions2.emptyContext;
|
|
|
|
@TestForSubmission
|
|
public class BishopTest {
|
|
|
|
private final MethodHeader bishop_moveStrategy = MethodHeader.of(Bishop.class,
|
|
"moveStrategy", int.class, int.class, MoveStrategy.class);
|
|
private final MethodHeader bishop_getPossibleMoveFields = MethodHeader.of(Bishop.class,
|
|
"getPossibleMoveFields");
|
|
|
|
@AfterEach
|
|
public void tearDown() {
|
|
SubmissionExecutionHandler.resetAll();
|
|
}
|
|
|
|
@Test
|
|
public void testClassHeader() {
|
|
ClassHeader originalClassHeader = SubmissionExecutionHandler.getOriginalClassHeader(Bishop.class);
|
|
assertTrue(Arrays.stream(originalClassHeader.interfaces()).anyMatch(s -> s.equals(Type.getInternalName(DiagonalMover.class))),
|
|
emptyContext(),
|
|
result -> "Class h04.chesspieces.Bishop does not implement interface h04.movement.DiagonalMover");
|
|
}
|
|
|
|
@Test
|
|
public void testMoveStrategy() {
|
|
SubmissionExecutionHandler.Delegation.disable(bishop_moveStrategy);
|
|
|
|
World.setSize(3, 3);
|
|
World.setDelay(0);
|
|
AtomicReference<Robot> robotRef = new AtomicReference<>();
|
|
AtomicInteger dxInt = new AtomicInteger(-1);
|
|
AtomicInteger dyInt = new AtomicInteger(-1);
|
|
MoveStrategy moveStrategy = (r, dx, dy) -> {
|
|
robotRef.set(r);
|
|
dxInt.set(dx);
|
|
dyInt.set(dy);
|
|
};
|
|
int dx = 1;
|
|
int dy = 1;
|
|
Context context = contextBuilder()
|
|
.add("dx", dx)
|
|
.add("dy", dy)
|
|
.add("strategy", moveStrategy)
|
|
.build();
|
|
|
|
Bishop bishopInstance = new Bishop(0, 0, Team.WHITE);
|
|
call(() -> bishopInstance.moveStrategy(dx, dy, moveStrategy), context, result ->
|
|
"An exception occurred while invoking moveStrategy(int, int, MoveStrategy)");
|
|
assertSame(bishopInstance, robotRef.get(), context, result ->
|
|
"Method move of MoveStrategy was called with incorrect first parameter");
|
|
assertEquals(dx, dxInt.get(), context, result ->
|
|
"Method move of MoveStrategy was called with incorrect second parameter");
|
|
assertEquals(dy, dyInt.get(), context, result ->
|
|
"Method move of MoveStrategy was called with incorrect third parameter");
|
|
}
|
|
|
|
@Test
|
|
public void testGetPossibleMoveFields() {
|
|
SubmissionExecutionHandler.Delegation.disable(bishop_getPossibleMoveFields);
|
|
Point[] points = new Point[0];
|
|
SubmissionExecutionHandler.Substitution.enable(MethodHeader.of(DiagonalMover.class, "getDiagonalMoves"),
|
|
invocation -> points);
|
|
|
|
int worldSize = 8;
|
|
World.setSize(worldSize, worldSize);
|
|
World.setDelay(0);
|
|
Context context = contextBuilder()
|
|
.add("world size", worldSize)
|
|
.add("x", 0)
|
|
.add("y", 0)
|
|
.build();
|
|
|
|
Point[] returnValue = callObject(() -> new Bishop(0, 0, Team.WHITE).getPossibleMoveFields(), context, result ->
|
|
"An exception occurred while invoking getPossibleMoveFields()");
|
|
assertSame(points, returnValue, context, result -> "Method did not return the result of getPossibleMoveFields()");
|
|
}
|
|
}
|