public void TraverseMaze_MovingEastNotAtEasternBorder_ReturnsIndexOfEasternNeighbour(int startIndex, int expectedIndex)
        {
            char direction = 'E';

            int?actualIndex = MazeHandler.TraverseMaze(maze, startIndex, direction);

            Assert.Equal(expectedIndex, actualIndex);
        }
        public void TraverseMaze_MovingEastNotAtEasternBorder_ReturnsNotNull()
        {
            int  currentIndex = mazeSize; // Not on right edge
            char direction    = 'E';

            int?actualIndex = MazeHandler.TraverseMaze(maze, currentIndex, direction);

            Assert.NotNull(actualIndex);
        }
        public void TraverseMaze_MovingNorthNotAtNorthernBorder_ReturnsNotNull()
        {
            int  currentIndex = mazeSize * 1; // On second row
            char direction    = 'N';

            int?actualIndex = MazeHandler.TraverseMaze(maze, currentIndex, direction);

            Assert.NotNull(actualIndex);
        }
        public void TraverseMaze_MovingEastAtEasternBorder_ReturnsNull()
        {
            int  currentIndex = mazeSize - 1; // On right edge
            char direction    = 'E';

            int?result = MazeHandler.TraverseMaze(maze, currentIndex, direction);

            Assert.Null(result);
        }
        public void TraverseMaze_MovingNorthAtNorthernBorder_ReturnsNull()
        {
            int  currentIndex = 0; // On first row
            char direction    = 'N';

            int?result = MazeHandler.TraverseMaze(maze, currentIndex, direction);

            Assert.Null(result);
        }
        public void TraverseMaze_MovingWestAtWesternBorder_ReturnsNull()
        {
            int  currentIndex = 0; // On western edge
            char direction    = 'W';

            int?result = MazeHandler.TraverseMaze(maze, currentIndex, direction);

            Assert.Null(result);
        }
        public void TraverseMaze_MovingSouthNotAtSouthernBorder_ReturnsNotNull()
        {
            int  currentIndex = 0; // Not on southern edge
            char direction    = 'S';

            int?actualIndex = MazeHandler.TraverseMaze(maze, currentIndex, direction);

            Assert.NotNull(actualIndex);
        }
        public void TraverseMaze_MovingSouthAtSouthernBorder_ReturnsNull()
        {
            int  currentIndex = mazeSize * (mazeSize - 1); // On southern edge
            char direction    = 'S';

            int?result = MazeHandler.TraverseMaze(maze, currentIndex, direction);

            Assert.Null(result);
        }
        public void TraverseMaze_InvalidDirection_ThrowsException()
        {
            int  currentIndex = 0; // On western edge
            char direction    = '1';

            var exception = Record.Exception(() => MazeHandler.TraverseMaze(maze, currentIndex, direction));

            Assert.NotNull(exception);
            Assert.IsType <InvalidDirectionException>(exception);
        }