public void GetValueAtLocation_throws_IndexOutOfRangeException_when_invalid_location_provided()
        {
            //Arrange
            var board = new StandardTestBoard();

            //Act & Assert
            Assert.ThrowsException <IndexOutOfRangeException>(() => board.GetValueAtLocation(4, 4));
        }
        public void PlaceTokenOnBoard_throws_exception_when_spot_not_available_on_board()
        {
            //Arrange
            var board = new StandardTestBoard();

            //Act
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.X, 1, 1);

            //Assert
            Assert.ThrowsException <InvalidOperationException>(() => board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, 1, 1));
        }
        public void AnyMovesLeft_is_true_when_board_still_has_spaces_available()
        {
            //Arrange
            var board = new StandardTestBoard();

            //Act
            var result = board.AnyMovesLeft();

            //Assert
            Assert.IsTrue(result);
        }
        public void Board_gets_constructed_with_3_by_3_dimensions()
        {
            //Arrange
            var board = new StandardTestBoard();

            //Act
            var columns = board.BoardColumnCount;
            var rows    = board.BoardRowCount;

            //Assert
            Assert.IsTrue(columns == 3);
            Assert.IsTrue(rows == 3);
        }
        public void PlaceTokenOnBoard_puts_correct_token_in_spot_on_board()
        {
            //Arrange
            var board  = new StandardTestBoard();
            int column = 1;
            int row    = 1;
            var token  = TickTackToeBoard.TickTackToeToken.O;

            //Act
            board.PlaceTokenOnBoard(token, row, column);
            var valueAfterPlacement = board.GetValueAtLocation(row, column);

            //Assert
            Assert.AreEqual(token, valueAfterPlacement);
        }
        public void GetValueAtLocation_returns_accurate_value()
        {
            //Arrange
            var board          = new StandardTestBoard();
            var token          = TickTackToeBoard.TickTackToeToken.O;
            int expectedRow    = 1;
            int expectedColumn = 2;

            board.PlaceTokenOnBoard(token, expectedRow, expectedColumn);

            //Act
            var value = board.GetValueAtLocation(expectedRow, expectedColumn);

            //Assert
            Assert.AreEqual(token, value);
        }
        public void PlaceTokenOnBoard_puts_token_in_correct_spot_on_board()
        {
            //Arrange
            var board  = new StandardTestBoard();
            int column = 1;
            int row    = 1;
            var valueBeforePlacement = board.GetValueAtLocation(row, column);

            //Act
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, row, column);
            var valueAfterPlacement = board.GetValueAtLocation(row, column);

            //Assert
            Assert.AreNotEqual(valueBeforePlacement, valueAfterPlacement);
            //TODO check to make sure no other elements in the array were changed (will need to use a fake/moq for this)
        }
        public void PlaceTokenOnBoard_puts_token_in_available_spot_on_board()
        {
            //Arrange
            var board  = new StandardTestBoard();
            int column = 1;
            int row    = 1;
            var valueBeforePlacement = board.GetValueAtLocation(row, column);

            //Act
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, row, column);
            var valueAfterPlacement = board.GetValueAtLocation(row, column);

            //Assert
            Assert.AreEqual(TickTackToeBoard.TickTackToeToken.Available, valueBeforePlacement);
            Assert.AreNotEqual(valueBeforePlacement, valueAfterPlacement);
        }
        public void Board_is_constructed_with_all_available_slots()
        {
            //Arrange
            var board  = new StandardTestBoard();
            var result = true;

            //Act
            foreach (var playableSpace in board.Board)
            {
                if (playableSpace != TickTackToeBoard.TickTackToeToken.Available)
                {
                    result = false;
                }
            }

            //Assert
            Assert.IsTrue(result);
        }
        public void AnyMovesLeft_is_false_when_board_still_has_no_spaces_available()
        {
            //Arrange
            var board = new StandardTestBoard();

            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.X, 0, 0);
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.X, 0, 1);
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.X, 0, 2);

            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, 1, 0);
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, 1, 1);
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, 1, 2);

            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, 2, 0);
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, 2, 1);
            board.PlaceTokenOnBoard(TickTackToeBoard.TickTackToeToken.O, 2, 2);

            //Act
            var result = board.AnyMovesLeft();

            //Assert
            Assert.IsFalse(result);
        }