public async void ShouldSaveNewTicket()
        {
            var guestName    = Guid.NewGuid().ToString();
            var guestPhone   = "555-555-5555";
            var guestAddress = "12345 Somewhere USA";

            MockConsoleWrapper.SetupSequence(x => x.ReadLineAsync())
            .ReturnsAsync(guestName)
            .ReturnsAsync(guestPhone)
            .ReturnsAsync(guestAddress);

            IDictionary <string, string> actualConvertInputToModelArgument = null;

            MockConverter.Setup(x => x.ConvertInputToModel(It.IsAny <IDictionary <string, string> >()))
            .Callback <IDictionary <string, string> >(x => actualConvertInputToModelArgument = x);

            await Screen.Activated();

            var expectedConvertInputToModelArgument = new Dictionary <string, string>
            {
                { "Field 1", guestName },
                { "Field 2", guestPhone },
                { "Field 3", guestAddress }
            };

            Assert.Equal(expectedConvertInputToModelArgument, actualConvertInputToModelArgument);
        }
예제 #2
0
        public async void ShouldRenderErrorMessageAndRenderTheMenuAgainIfNumberEnteredIsNotANumber()
        {
            SetUpMenuSelectionThenQuit("12AlphaBravo");

            await ScreenManager.StartInputOutputLoop();

            VerifyMenuIsRendered(Twice);
            MockConsoleWrapper.Verify(x => x.WriteLineAsync("Selection is invalid.  Please select an option."));
        }
예제 #3
0
        public async void ShouldRenderErrorMessageAndRenderTheMenuAgainIfNumberEnteredIsTooLarge()
        {
            SetUpMenuSelectionThenQuit("98324");

            await ScreenManager.StartInputOutputLoop();

            VerifyScreenIsCleared(Thrice);
            VerifyMenuIsRendered(Twice);
            MockConsoleWrapper.Verify(x => x.WriteLineAsync("Selection out of range.  Please select an option."));
        }
        public async void ShouldWaitForInputAtEachLineRendered()
        {
            MockConsoleWrapper.Setup(x => x.ReadLineAsync()).ReturnsAsync("abc");

            await Screen.Activated();

            for (var lineNumber = 0; lineNumber < DisplayNames.Count(); lineNumber++)
            {
                var topPosition = lineNumber;
                MockConsoleWrapper.Verify(x => x.SetCursorPosition(32, topPosition));
                MockConsoleWrapper.Verify(x => x.ReadLineAsync());
            }
        }
예제 #5
0
        public void TestShotFired()
        {
            var coordinateReader = new MockCoordinatesReader();
            var console          = new MockConsoleWrapper();
            var ship             = new Ship("player1", 3, coordinateReader, console);

            ship.CoordinatesList.Add(new Coordinates('A', 3));
            ship.CoordinatesList.Add(new Coordinates('A', 2));
            ship.CoordinatesList.Add(new Coordinates('A', 1));

            ship.CoordinatesList.Count.ShouldBe(3);
            ship.ShotFired(new Coordinates('A', 3)).ShouldBe(true);
            ship.ShotFired(new Coordinates('A', 4)).ShouldBe(false);
            ship.ShotFired(new Coordinates('B', 3)).ShouldBe(false);
        }
예제 #6
0
        public void TestAddMissedShot()
        {
            var coordinateReader = new MockCoordinatesReader();
            var console          = new MockConsoleWrapper();
            var ship             = new Ship("player1", 3, coordinateReader, console);

            ship.CoordinatesList.Add(new Coordinates('A', 3));
            ship.CoordinatesList.Add(new Coordinates('A', 2));
            ship.CoordinatesList.Add(new Coordinates('A', 1));

            ship.CoordinatesList.Count.ShouldBe(3);

            ship.AddMissedShot(new Coordinates('B', 3)).ShouldBe(true);
            ship.AddMissedShot(new Coordinates('B', 2)).ShouldBe(true);

            ship.MissedShotsCount().ShouldBe(2);
        }
예제 #7
0
        public void TestInitilizeHorizontalShip()
        {
            var coordinateReader = new MockCoordinatesReader();
            var console          = new MockConsoleWrapper();
            var ship             = new Ship("player1", 3, coordinateReader, console);

            coordinateReader.MockReadShipCoordinates += (o, p) =>
            {
                return(new Coordinates('H', 8));
            };

            console.MockReadLine += () =>
            {
                return("2");
            };

            ship.InitilizeShip().ShouldBeTrue();
            ship.CoordinatesList.Count.ShouldBe(3);
            ship.Orientation.ShouldBe(Enums.Orientation.Horizontal);
            ship.CoordinatesList.Any(x => x.XCoordinate == 'H' && x.YCoordinate == 8).ShouldBe(true);
            ship.CoordinatesList.Any(x => x.XCoordinate == 'G' && x.YCoordinate == 8).ShouldBe(true);
            ship.CoordinatesList.Any(x => x.XCoordinate == 'F' && x.YCoordinate == 8).ShouldBe(true);
        }
예제 #8
0
        public void TestInitilizeVerticalShip()
        {
            var coordinateReader = new MockCoordinatesReader();
            var console          = new MockConsoleWrapper();
            var ship             = new Ship("player1", 3, coordinateReader, console);

            coordinateReader.MockReadShipCoordinates += (o, p) =>
            {
                return(new Coordinates('A', 3));
            };

            console.MockReadLine += () =>
            {
                return("1");
            };

            ship.InitilizeShip().ShouldBeTrue();
            ship.CoordinatesList.Count.ShouldBe(3);
            ship.Orientation.ShouldBe(Enums.Orientation.Vertical);
            ship.CoordinatesList.Any(x => x.XCoordinate == 'A' && x.YCoordinate == 3).ShouldBe(true);
            ship.CoordinatesList.Any(x => x.XCoordinate == 'A' && x.YCoordinate == 2).ShouldBe(true);
            ship.CoordinatesList.Any(x => x.XCoordinate == 'A' && x.YCoordinate == 1).ShouldBe(true);
        }
예제 #9
0
        public async void ShouldRenderAnOptionForQuitting()
        {
            await ScreenManager.StartInputOutputLoop();

            MockConsoleWrapper.Verify(x => x.WriteLineAsync("99. Quit"), Times.Once);
        }
예제 #10
0
 private void SetUpMenuSelectionThenQuit(string selection)
 {
     MockConsoleWrapper.SetupSequence(x => x.ReadLineAsync())
     .ReturnsAsync(selection)
     .ReturnsAsync("99");
 }
예제 #11
0
 private void VerifyScreenIsCleared(int count)
 {
     MockConsoleWrapper.Verify(x => x.ClearScreen(), Times.Exactly(count));
 }
예제 #12
0
 private void VerifyMenuIsRendered(int count)
 {
     MockConsoleWrapper.Verify(x => x.WriteLineAsync($"1. {ScreenNameOne}"), Times.Exactly(count));
     MockConsoleWrapper.Verify(x => x.WriteLineAsync($"2. {ScreenNameTwo}"), Times.Exactly(count));
     MockConsoleWrapper.Verify(x => x.WriteLineAsync($"3. {ScreenNameThree}"), Times.Exactly(count));
 }
예제 #13
0
        public void TestBoard()
        {
            var coordinateReader = new MockCoordinatesReader();
            var console          = new MockConsoleWrapper();
            var ship             = new MockShip();

            IBoard board  = new Board("player 1");
            var    matrix = board.GetMatrix();

            foreach (var kvp in matrix)
            {
                kvp.Value.ShouldBe(CoordinateStatus.Empty);
            }

            ship.MockCoordinatesList += () =>
            {
                return(new List <Coordinates> {
                    new Coordinates('A', 3), new Coordinates('A', 2), new Coordinates('A', 1)
                });
            };

            board.AddShipToMatrix(ship);

            board.Ship.CoordinatesList.Count.ShouldBe(3);

            board.UpdateMatrix(board.Ship.CoordinatesList, CoordinateStatus.Ship);
            matrix = board.GetMatrix();

            List <int> yCoordinateList = new List <int> {
                1, 2, 3
            };

            foreach (var kvp in matrix)
            {
                if (kvp.Key.XCoordinate == 'A' && yCoordinateList.Contains(kvp.Key.YCoordinate))
                {
                    kvp.Value.ShouldBe(CoordinateStatus.Ship);
                }
                else
                {
                    kvp.Value.ShouldBe(CoordinateStatus.Empty);
                }
            }

            board.UpdateMatrix(new Coordinates('A', 3), CoordinateStatus.Hit);
            board.UpdateMatrix(new Coordinates('A', 4), CoordinateStatus.Miss);
            matrix = board.GetMatrix();

            foreach (var kvp in matrix)
            {
                if (kvp.Key.XCoordinate == 'A' && kvp.Key.YCoordinate == 3)
                {
                    kvp.Value.ShouldBe(CoordinateStatus.Hit);
                }
                else if (kvp.Key.XCoordinate == 'A' && kvp.Key.YCoordinate == 4)
                {
                    kvp.Value.ShouldBe(CoordinateStatus.Miss);
                }
                else if (kvp.Key.XCoordinate == 'A' && ((kvp.Key.YCoordinate == 1) || kvp.Key.YCoordinate == 2))
                {
                    kvp.Value.ShouldBe(CoordinateStatus.Ship);
                }
                else
                {
                    kvp.Value.ShouldBe(CoordinateStatus.Empty);
                }
            }
        }