public void GivenInvalidDimensions_ThenGeneratorCreatesClosestValidBoard(int dimX, int dimY, int expectedDimX, int expectedDimY) { var board = creator.GenerateGameBoard(dimX, dimY); Assert.That(board.GetLength(0) == expectedDimX); Assert.That(board.GetLength(1) == expectedDimY); }
public void GivenCoveredBoard_UncoverCorrectlyLargerAreaWithMines(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(3, 3)).Returns(new Field[3, 3] { { Field.Covered | Field.Zero, Field.Covered | Field.Zero, Field.Covered | Field.Zero }, { Field.Covered | Field.Zero, Field.Covered | Field.One, Field.Covered | Field.One }, { Field.Covered | Field.Zero, Field.Covered | Field.One, Field.Covered | Field.Mine } }); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 3, 3); gameBoard.Choose(posX, posY); for (int i = 1; i <= 3; i++) { for (int j = 1; j <= 3; j++) { if (i == 3 && j == 3) { continue; } Assert.False(gameBoard.Get(i, j).HasFlag(Field.Covered), $"i:{i} - j:{j}"); } } Assert.That(gameBoard.Get(3, 3).HasFlag(Field.Covered)); }
public void GivenNonTrivialBoard_GetReturnsCorrectPosition(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(3, 3)).Returns(new Field[3, 3] { { Field.Covered, Field.One, Field.One }, { Field.Covered, Field.Flagged, Field.Two }, { Field.Covered, Field.Covered, Field.Covered } }); Field[,] generatedBoard = gameBoardCreator.GenerateGameBoard(3, 3); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 3, 3); Assert.That(gameBoard.Get(posX, posY) == generatedBoard[posX - 1, posY - 1]); }
public void GivenBoard_GetInvalidIndicesThrowsException(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(3, 3)).Returns(new Field[3, 3] { { Field.Covered, Field.One, Field.One }, { Field.Covered, Field.Flagged, Field.Two }, { Field.Covered, Field.Covered, Field.Covered } }); Field[,] generatedBoard = gameBoardCreator.GenerateGameBoard(3, 3); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 3, 3); Assert.Throws <IndexOutOfRangeException>(() => gameBoard.Get(posX, posY)); Assert.Throws <IndexOutOfRangeException>(() => gameBoard.IsCovered(posX, posY)); Assert.Throws <IndexOutOfRangeException>(() => gameBoard.IsFlagged(posX, posY)); Assert.Throws <IndexOutOfRangeException>(() => gameBoard.IsMine(posX, posY)); Assert.Throws <IndexOutOfRangeException>(() => gameBoard.IsNumber(posX, posY)); }
public void GivenBoardWithMine_ThenGetReturnsMine(Field field) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(1, 1)).Returns(new Field[1, 1] { { field } }); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 1, 1); Assert.That(gameBoard.Get(1, 1) == field); }
public void GivenCoveredBoard_UncoverCorrectlySmallArea(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(1, 2)).Returns(new Field[1, 2] { { Field.Covered | Field.Zero, Field.Covered | Field.Zero } }); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 1, 2); gameBoard.Choose(posX, posY); Assert.False(gameBoard.Get(1, 1).HasFlag(Field.Covered)); Assert.False(gameBoard.Get(1, 2).HasFlag(Field.Covered)); }
public void GivenCoveredBoard_ThenFieldsGetsUncovered(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(3, 3)).Returns(new Field[3, 3] { { Field.Covered, Field.Covered, Field.Covered }, { Field.Covered, Field.Covered, Field.Covered }, { Field.Covered, Field.Covered, Field.Covered } }); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 3, 3); gameBoard.Choose(posX, posY); Assert.False(gameBoard.Get(posX, posY).HasFlag(Field.Covered)); }
public void GivenBoardWithMine_ThenStepOnMineEndsGame(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(3, 3)).Returns(new Field[3, 3] { { Field.Covered | Field.Mine, Field.Covered, Field.Covered }, { Field.Covered, Field.Covered | Field.Mine, Field.Covered }, { Field.Covered, Field.Covered, Field.Covered | Field.Mine } }); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 3, 3); gameBoard.Choose(posX, posY); Assert.False(gameBoard.IsRunning()); }
public void GivenBoardWithoutFlags_ThenSetFlagToUncoveredFieldDoesNothing(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(3, 3)).Returns(new Field[3, 3] { { Field.One, Field.One, Field.Covered | Field.One }, { Field.One, Field.Covered | Field.Mine, Field.Covered | Field.One }, { Field.Covered | Field.One, Field.Covered | Field.One, Field.Covered | Field.One } }); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 3, 3); gameBoard.SetFlag(posX, posY); Assert.False(gameBoard.IsCovered(posX, posY)); Assert.False(gameBoard.IsFlagged(posX, posY)); }
public void GivenBoardWithFlag_ThenSteppingOnFlagStaysCovered(int posX, int posY) { IGameBoardCreator gameBoardCreator = A.Fake <IGameBoardCreator>(); A.CallTo(() => gameBoardCreator.GenerateGameBoard(3, 3)).Returns(new Field[3, 3] { { Field.Covered | Field.Flagged, Field.Covered, Field.Covered }, { Field.Covered, Field.Covered | Field.Flagged, Field.Covered }, { Field.Covered, Field.Covered, Field.Covered | Field.Flagged } }); IGameBoard gameBoard = new GameBoard(gameBoardCreator, 3, 3); gameBoard.Choose(posX, posY); Assert.True(gameBoard.IsCovered(posX, posY)); Assert.True(gameBoard.IsFlagged(posX, posY)); }
public GameBoard(IGameBoardCreator creator, int dimX, int dimY) { _board = creator.GenerateGameBoard(dimX, dimY); }