Exemple #1
0
 private static void ValidateTokenType(PlaceTokenRequest request)
 {
     if (!new string[] { "X", "O" }.Contains(request.Type))
     {
         throw new InvalidTokenException();
     }
 }
Exemple #2
0
 private void ValidatePositionFree(PlaceTokenRequest request)
 {
     if (_boardGateway.Read(request.Board, request.Column, request.Row) != null)
     {
         throw new AlreadyPlacedException();
     }
 }
Exemple #3
0
 private static void ValidateBoardIncomplete(PlaceTokenRequest request)
 {
     if (request.Board.IsComplete())
     {
         throw new BoardCompleteException();
     }
 }
Exemple #4
0
        private PlaceTokenResponse WhenIPlaceAToken(string type, int column, int row)
        {
            PlaceTokenRequest request = new PlaceTokenRequest
            {
                Board  = _board,
                Row    = row,
                Column = column,
                Type   = type,
            };

            PlaceTokenResponse response = _placeToken.Execute(request);

            _board = response.Board;

            return(response);
        }
Exemple #5
0
        public PlaceTokenResponse Execute(PlaceTokenRequest request)
        {
            Board board = request.Board;

            System.Exception error  = null;
            IBoardStatus     status = new Incomplete();

            try
            {
                ValidateTokenType(request);
                ValidatePositionFree(request);
                ValidateBoardIncomplete(request);

                board = _boardGateway.Write(request.Board, request.Type, request.Column, request.Row);

                _boardGateway.Flush(board);
            }
            catch (IndexOutOfRangeException)
            {
                error = new OffBoardException();
            }
            catch (AlreadyPlacedException)
            {
                error = new AlreadyPlacedException();
            }
            catch (InvalidTokenException)
            {
                error = new InvalidTokenException();
            }
            catch (BoardCompleteException)
            {
                error = new BoardCompleteException();
            }

            return(new PlaceTokenResponse
            {
                Board = board,
                Error = error,
                Status = board.IsComplete() ? (IBoardStatus) new Complete() : new Incomplete(),
            });
        }
Exemple #6
0
 private PlaceTokenResponse Execute(PlaceTokenRequest request)
 {
     return(_placeToken.Execute(request));
 }