refactor(tests): NCS-23 improve CommandInvoker tests for clarity and coverage
Build & Test (NowChessSystems) TeamCity build finished

This commit is contained in:
2026-04-06 08:34:44 +02:00
parent 7dac1a0225
commit 0def756ff0
8 changed files with 94 additions and 119 deletions
@@ -124,6 +124,14 @@ object DefaultRules extends RuleSet:
// ── Castling ───────────────────────────────────────────────────────
private case class CastlingMove(
kingFromAlg: String,
kingToAlg: String,
middleAlg: String,
rookFromAlg: String,
moveType: MoveType
)
private def castlingCandidates(
context: GameContext,
from: Square,
@@ -139,9 +147,9 @@ object DefaultRules extends RuleSet:
else
val moves = scala.collection.mutable.ListBuffer[Move]()
addCastleMove(context, moves, context.castlingRights.whiteKingSide,
"e1", "g1", "f1", "h1", MoveType.CastleKingside)
CastlingMove("e1", "g1", "f1", "h1", MoveType.CastleKingside))
addCastleMove(context, moves, context.castlingRights.whiteQueenSide,
"e1", "c1", "d1", "a1", MoveType.CastleQueenside)
CastlingMove("e1", "c1", "d1", "a1", MoveType.CastleQueenside))
moves.toList
private def blackCastles(context: GameContext, from: Square): List[Move] =
@@ -150,29 +158,25 @@ object DefaultRules extends RuleSet:
else
val moves = scala.collection.mutable.ListBuffer[Move]()
addCastleMove(context, moves, context.castlingRights.blackKingSide,
"e8", "g8", "f8", "h8", MoveType.CastleKingside)
CastlingMove("e8", "g8", "f8", "h8", MoveType.CastleKingside))
addCastleMove(context, moves, context.castlingRights.blackQueenSide,
"e8", "c8", "d8", "a8", MoveType.CastleQueenside)
CastlingMove("e8", "c8", "d8", "a8", MoveType.CastleQueenside))
moves.toList
private def addCastleMove(
context: GameContext,
moves: scala.collection.mutable.ListBuffer[Move],
castlingRight: Boolean,
kingFromAlg: String,
kingToAlg: String,
middleAlg: String,
rookFromAlg: String,
moveType: MoveType
castlingMove: CastlingMove
): Unit =
if castlingRight then
val clearSqs = List(middleAlg, kingToAlg).flatMap(Square.fromAlgebraic)
val clearSqs = List(castlingMove.middleAlg, castlingMove.kingToAlg).flatMap(Square.fromAlgebraic)
if squaresEmpty(context.board, clearSqs) then
for
kf <- Square.fromAlgebraic(kingFromAlg)
km <- Square.fromAlgebraic(middleAlg)
kt <- Square.fromAlgebraic(kingToAlg)
rf <- Square.fromAlgebraic(rookFromAlg)
kf <- Square.fromAlgebraic(castlingMove.kingFromAlg)
km <- Square.fromAlgebraic(castlingMove.middleAlg)
kt <- Square.fromAlgebraic(castlingMove.kingToAlg)
rf <- Square.fromAlgebraic(castlingMove.rookFromAlg)
do
val color = context.turn
val kingPresent = context.board.pieceAt(kf).exists(p => p.color == color && p.pieceType == PieceType.King)
@@ -183,7 +187,7 @@ object DefaultRules extends RuleSet:
!isAttackedBy(context.board, kt, color.opposite)
if kingPresent && rookPresent && squaresSafe then
moves += Move(kf, kt, moveType)
moves += Move(kf, kt, castlingMove.moveType)
private def squaresEmpty(board: Board, squares: List[Square]): Boolean =
squares.forall(sq => board.pieceAt(sq).isEmpty)