Esempio n. 1
0
        public void GivenValidMovement_WhenMoveIsCalled_ThenBotPositionIsUpdated(int x, int y, CardinalPoint cardinalPoint)
        {
            var inputMoviment   = Movement.L;
            var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>();
            var botMovement     = Substitute.For <IBotMovementHandler>();

            botMovement.CanHandleMovement(Arg.Any <Movement>()).Returns(true);
            botMovement.HandleMovement(Arg.Any <Position>(), inputMoviment).Returns(new Position(new Coordinates {
                X = x, Y = y
            }, cardinalPoint));
            movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(botMovement);

            var board = NSubstitute.Substitute.For <IGameBoard>();

            board.Columns.Returns(10);
            board.Rows.Returns(10);

            var coordinates = new Coordinates {
                X = 5, Y = 5
            };

            var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory);

            bot.Move(inputMoviment);

            var expectedPosition = new Position(new Coordinates {
                X = x, Y = y
            }, cardinalPoint);

            bot.Position.ShouldBeEquivalentTo(expectedPosition);
        }
Esempio n. 2
0
        public void GivenMovementAndBotThatCHandleThatMovement_WhenMoveIsCalled_HandleIsCalled()
        {
            var inputMoviment   = Movement.L;
            var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>();
            var botMovement     = Substitute.For <IBotMovementHandler>();

            movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(botMovement);

            var board = NSubstitute.Substitute.For <IGameBoard>();

            board.Columns.Returns(10);
            board.Rows.Returns(10);

            var coordinates = new Coordinates {
                X = 5, Y = 5
            };

            botMovement.CanHandleMovement(Arg.Any <Movement>()).Returns(true);

            var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory);

            bot.Move(inputMoviment);

            botMovement.Received().HandleMovement(Arg.Is <Position>(p => p.Coordinates.X == coordinates.X &&
                                                                    p.Coordinates.Y == coordinates.Y &&
                                                                    p.Direction == CardinalPoint.N), inputMoviment);
        }
Esempio n. 3
0
        public void GivenMovementToOutsideTheBoardGame_WhenMoveIsCalled_ThenExceptionIsRaised(int x, int y)
        {
            var inputMoviment   = Movement.L;
            var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>();
            var botMovement     = Substitute.For <IBotMovementHandler>();

            botMovement.CanHandleMovement(Arg.Any <Movement>()).Returns(true);
            botMovement.HandleMovement(Arg.Any <Position>(), inputMoviment).Returns(new Position(new Coordinates {
                X = x, Y = y
            }, CardinalPoint.N));
            movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(botMovement);

            var board = NSubstitute.Substitute.For <IGameBoard>();

            board.Columns.Returns(10);
            board.Rows.Returns(10);

            var coordinates = new Coordinates {
                X = 5, Y = 5
            };

            var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory);

            Action action = () => bot.Move(inputMoviment);

            action.ShouldThrow <BotGameException>();
        }
Esempio n. 4
0
        public void BotHasAdvanceMoviment()
        {
            var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>();

            movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns((IBotMovementHandler)null);
            var board = NSubstitute.Substitute.For <IGameBoard>();

            board.Columns.Returns(10);
            board.Rows.Returns(10);

            var coordinates = new Coordinates {
                X = 10, Y = 10
            };

            var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory);

            movementFactory.Received().CreateMovement(Arg.Is <BotMovement>(BotMovement.Advance));
        }
Esempio n. 5
0
        public void GivenMovementAndBotThatCanNotHandleThatMovement_WhenMoveIsCalled_HandleIsNotCalled()
        {
            var movementFactory = NSubstitute.Substitute.For <IBotMovementHandlerFactory>();
            var movement        = Substitute.For <IBotMovementHandler>();

            movementFactory.CreateMovement(Arg.Any <BotMovement>()).Returns(movement);
            var board = NSubstitute.Substitute.For <IGameBoard>();

            board.Columns.Returns(10);
            board.Rows.Returns(10);
            var coordinates = new Coordinates {
                X = 5, Y = 5
            };

            movement.CanHandleMovement(Arg.Any <Movement>()).Returns(false);

            var bot = new RegularBot(coordinates, CardinalPoint.N, board, movementFactory);

            bot.Move(Movement.L);

            movement.DidNotReceive().HandleMovement(Arg.Any <Position>(), Movement.L);
        }