Example #1
0
        public void ANewGame_StartsByFirstPlayer()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            var mockPlayerB = new Mock<IDartsPlayer>();
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            Assert.Equal(mockPlayerA.Object, game.NextTurnPlayer);
        }
Example #2
0
        public void ANewGame_InitializesEveryPlayer()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            var mockPlayerB = new Mock<IDartsPlayer>();
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            mockPlayerA.Verify(p => p.Initialize(It.Is<int>(a => a == 301)), Times.Once);
            mockPlayerB.Verify(p => p.Initialize(It.Is<int>(a => a == 301)), Times.Once);
        }
Example #3
0
        public void IsNotFinished_WhenPlayersHavePointsRemaining()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1);
            var mockPlayerB = new Mock<IDartsPlayer>();
            mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(301);
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            Assert.False(game.Finished);
        }
Example #4
0
        public void IsFinished_WhenAPlayerHasNoRemainingPoints()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1);
            var mockPlayerB = new Mock<IDartsPlayer>();
            mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(0);
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            Assert.True(game.Finished);
        }
Example #5
0
        public void PlayNextTurn_CyclesEveryPlayerInOrder()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(100);
            var mockPlayerB = new Mock<IDartsPlayer>();
            mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(100);
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            game.PlayNextTurn();
            mockPlayerA.Verify(p => p.PlayTurn(), Times.Once, "First player should play first");

            game.PlayNextTurn();
            mockPlayerB.Verify(p => p.PlayTurn(), Times.Once, "Second player should play next");
            Assert.Equal(mockPlayerA.Object, game.NextTurnPlayer);
        }
Example #6
0
        public void ADarts301GameCanBePlayed()
        {
            var playerAMockThrower = new Mock<IDartsThrower>();
            playerAMockThrower.SetupSequence(dt => dt.ThrowDart()).Returns(60).Returns(60).Returns(60).Returns(60).Returns(60).Returns(1);
            var playerBMockThrower = new Mock<IDartsThrower>();
            playerBMockThrower.Setup(dt => dt.ThrowDart()).Returns(20);

            var game = new Darts301Game(
                            new DartsPlayer(playerAMockThrower.Object),
                            new DartsPlayer(playerBMockThrower.Object));
            var gameDriver = new GameDriver(game);
            gameDriver.Play();

            Assert.True(game.Finished);
            Assert.Equal(game.Winner, game.Players.First());
        }
Example #7
0
        public void PlayNextTurn_IncreasesTheTurnIndex()
        {
            var mockPlayer = new Mock<IDartsPlayer>();
            mockPlayer.SetupGet(p => p.RemainingPoints).Returns(5);
            var game = new Darts301Game(mockPlayer.Object);
            game.PlayNextTurn();

            Assert.Equal(2, game.TurnNumber);
        }
Example #8
0
        public void ANewGame_StartsOnTurnOne()
        {
            var game = new Darts301Game(new Mock<IDartsPlayer>().Object);

            Assert.Equal(1, game.TurnNumber);
        }
Example #9
0
        public void Winner_WhenGameIsNotFinished_ThrowsException()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1);
            var mockPlayerB = new Mock<IDartsPlayer>();
            mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(301);
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            Assert.Throws<InvalidOperationException>(() => game.Winner);
        }
Example #10
0
        public void Winner_WhenGameIsFinished_ReturnsPlayerWithZeroRemainingPoints()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(1);
            var mockPlayerB = new Mock<IDartsPlayer>();
            mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(0);
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            Assert.Equal(mockPlayerB.Object, game.Winner);
        }
Example #11
0
        public void PlayNextTurn_WillGetBackToFirstPlayer_AfterAllPlayersPlayed()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(100);
            var mockPlayerB = new Mock<IDartsPlayer>();
            mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(100);
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            game.PlayNextTurn();
            mockPlayerA.Verify(p => p.PlayTurn(), Times.Once, "First player should play first");

            game.PlayNextTurn();
            mockPlayerB.Verify(p => p.PlayTurn(), Times.Once, "Second player should play next");

            game.PlayNextTurn();
            mockPlayerA.Verify(p => p.PlayTurn(), Times.Exactly(2), "First player should play again");
        }
Example #12
0
        public void PlayNextTurn_WhenGameIsFinished_ThrowsException()
        {
            var mockPlayer = new Mock<IDartsPlayer>();
            mockPlayer.SetupGet(p => p.RemainingPoints).Returns(0);
            var game = new Darts301Game(mockPlayer.Object);

            Assert.Throws<InvalidOperationException>(() => game.PlayNextTurn());
        }
Example #13
0
        public void PlayNextTurn_StartsByFirstPlayerAndMovesToSecond()
        {
            var mockPlayerA = new Mock<IDartsPlayer>();
            mockPlayerA.SetupGet(p => p.RemainingPoints).Returns(100);
            var mockPlayerB = new Mock<IDartsPlayer>();
            mockPlayerB.SetupGet(p => p.RemainingPoints).Returns(100);
            var game = new Darts301Game(mockPlayerA.Object, mockPlayerB.Object);

            game.PlayNextTurn();
            var nextPlayer = game.NextTurnPlayer;

            Assert.Equal(mockPlayerB.Object, nextPlayer);
            mockPlayerA.Verify(p => p.PlayTurn(), Times.Once);
        }