public void Check_throws_if_both_sides_in_check() { var service = new CheckDetectionService( _playerStateServiceMock.Object, _moveServiceMock.Object, ChessFactory.FindAttackPaths(), ChessFactory.PathsValidator() ); SetupCheckState(PlayerState.Check, Colours.White); SetupCheckState(PlayerState.Checkmate, Colours.Black); Should.Throw <Exception>(() => service.Check(_boardStateMock.Object)); }
public void Check_returns_valid_check_states(PlayerState whiteState, PlayerState blackState, GameCheckState expectedGameState) { var service = new CheckDetectionService( _playerStateServiceMock.Object, ChessFactory.BoardMoveService(ChessFactory.ChessBoardActionProvider()), ChessFactory.FindAttackPaths(), ChessFactory.PathsValidator() ); if (expectedGameState != GameCheckState.BlackCheckmated && expectedGameState != GameCheckState.WhiteCheckmated) { // give the king a get out move var kingPaths = new Paths(); kingPaths.Add(new Path { new BoardMove(BoardLocation.At(1, 1), BoardLocation.At(1, 2), 1) }); _kingItem.UpdatePaths(kingPaths); } SetupCheckState(whiteState, Colours.White); SetupCheckState(blackState, Colours.Black); service.Check(_boardStateMock.Object).ShouldBe(expectedGameState); }