FOP-2425-Marathon/src/graderPrivate/java/h04/chesspieces/BishopTest.java
Oshgnacknak 638df0b63d Squashed 'solution/H04/' content from commit 2ed3e56
git-subtree-dir: solution/H04
git-subtree-split: 2ed3e5642f6d0a6d1d02ae17ffc33f3a1076f8bb
2025-01-11 16:41:09 +01:00

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()");
}
}