public void InTheMiddleOfTheGameCardShouldBeDrawn()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            Assert.IsTrue(roundState.ShouldDrawCard);
        }
        public void InTheMiddleOfTheGameRulesShouldNotBeObserved()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            Assert.IsFalse(roundState.ShouldObserveRules);
        }
示例#3
0
        public void InTheMiddleOfTheGameItIsPossibleToAnnounce20Or40()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            Assert.True(roundState.CanAnnounce20Or40);
        }
        public void InTheMiddleOfTheGameItIsPossibleToChangeTheTrump()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            Assert.IsTrue(roundState.CanChangeTrump);
        }
        public void PlayHandWithMoreThan2CardsLeftShouldNotChangeTheState()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            roundState.PlayHand(4);
            haveStateMock.Verify(x => x.SetState(It.IsAny <BaseRoundState>()), Times.Never);
        }
        public void PlayHandWith2CardsLeftShouldChangeTheStateToTwoCardsLeftRoundState()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            roundState.PlayHand(2);
            haveStateMock.Verify(x => x.SetState(It.IsAny <TwoCardsLeftRoundState>()), Times.Once);
        }
        public void CloseShouldMoveTheGameToTheFinalRoundState()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            roundState.Close();
            haveStateMock.Verify(x => x.SetState(It.IsAny <FinalRoundState>()), Times.Once);
        }
示例#8
0
        public void CanChangeTrumpShouldReturnFalseWhenThePlayerIsNotFirstButTheStatePermitsChanging()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            var canChangeTrump = ChangeTrumpActionValidator.CanChangeTrump(false, roundState, TrumpThatCanBeChanged, PlayerCards);

            Assert.False(canChangeTrump);
        }
        public void Announce_OutOfTurn_ShouldThrow()
        {
            var card   = new Card(CardSuit.Club, CardType.Queen);
            var action = PlayerAction.PlayCard(card);
            var state  = new MoreThanTwoCardsLeftRoundState(this.StateManager);

            this.StateManager.SetState(state);
            var context = new PlayerTurnContext(state, this.Deck.TrumpCard, this.Deck.CardsLeft, 0, 0);
        }
示例#10
0
        public void CanChangeTrumpShouldReturnTrueWhenThePlayerIsFirstTheStatePermitsChangingAndNineOfTrumpsIsPresent()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            var canChangeTrump = ChangeTrumpActionValidator.CanChangeTrump(true, roundState, TrumpThatCanBeChanged, PlayerCards);

            Assert.True(canChangeTrump);
        }
        public void CanCloseGameShouldReturnTrueWhenThePlayerIsFirsAndTheStatePermitsClosing()
        {
            var haveStateMock = new Mock <IStateManager>();
            var roundState    = new MoreThanTwoCardsLeftRoundState(haveStateMock.Object);

            var canCloseGame = CloseGameActionValidator.CanCloseGame(true, roundState);

            Assert.IsTrue(canCloseGame);
        }
        public void ChangeTrump_WithoutNineOfTrump_ShouldThrow()
        {
            var trump = new Card(CardSuit.Diamond, CardType.Queen);

            this.Deck.ChangeTrumpCard(trump);
            var card  = new Card(CardSuit.Club, CardType.Jack);
            var state = new MoreThanTwoCardsLeftRoundState(this.StateManager);

            this.StateManager.SetState(state);

            var action  = PlayerAction.ChangeTrump();
            var context = new PlayerTurnContext(state, this.Deck.TrumpCard, this.Deck.CardsLeft, 0, 0);
        }
        public void PlayerChangesTrumpWithQueen_ShouldBeInvalid()
        {
            var cards = new List <Card>()
            {
                new Card(CardSuit.Club, CardType.Queen)
            };
            var action  = new PlayerAction(PlayerActionType.ChangeTrump, new Card(CardSuit.Club, CardType.Queen), Announce.None);
            var round   = new GameRound(new Player(), new Player(), PlayerPosition.FirstPlayer);
            var state   = new MoreThanTwoCardsLeftRoundState(round);
            var context = new PlayerTurnContext(state, new Card(CardSuit.Club, CardType.Jack), 0);

            Assert.IsFalse(validator.IsValid(action, context, cards));
        }
        public void FourtyAnnounceWithoutQueenOrKing_ShouldBeInvalid()
        {
            var cards = new List <Card>()
            {
                new Card(CardSuit.Club, CardType.Queen), new Card(CardSuit.Club, CardType.King), new Card(CardSuit.Heart, CardType.Jack)
            };
            var announce = Announce.Fourty;
            var action   = new PlayerAction(PlayerActionType.PlayCard, new Card(CardSuit.Heart, CardType.Jack), announce);
            var round    = new GameRound(new Player(), new Player(), PlayerPosition.FirstPlayer);
            var state    = new MoreThanTwoCardsLeftRoundState(round);
            var context  = new PlayerTurnContext(state, new Card(CardSuit.Club, CardType.Jack), 0);

            validator.IsValid(action, context, cards);

            Assert.AreNotEqual(Announce.Fourty, action.Announce);
        }
        public void TestPlayNonExistentCard()
        {
            MoreThanTwoCardsLeftRoundState middleState = new MoreThanTwoCardsLeftRoundState(new GameRound(new Player(), new Player(), PlayerPosition.FirstPlayer));

            PlayerAction      action  = new PlayerAction(PlayerActionType.PlayCard, new Card(CardSuit.Diamond, CardType.Ace), Announce.None);
            PlayerTurnContext context = new PlayerTurnContext(middleState, new Card(CardSuit.Spade, CardType.Jack), 6);
            IList <Card>      cards   = new List <Card>()
            {
                new Card(CardSuit.Spade, CardType.Ten),
                new Card(CardSuit.Heart, CardType.King),
                new Card(CardSuit.Spade, CardType.King),
                new Card(CardSuit.Club, CardType.King),
                new Card(CardSuit.Club, CardType.Nine),
                new Card(CardSuit.Diamond, CardType.Nine)
            };

            Assert.IsFalse(validator.IsValid(action, context, cards));
        }
        public void TestWrongChangeTrumpIfYouHaveNotNeededCard()
        {
            MoreThanTwoCardsLeftRoundState midle = new MoreThanTwoCardsLeftRoundState(new GameRound(new Player(), new Player(), PlayerPosition.FirstPlayer));

            PlayerTurnContext context = new PlayerTurnContext(midle, new Card(CardSuit.Diamond, CardType.Jack), 6);

            PlayerAction action = new PlayerAction(PlayerActionType.ChangeTrump, new Card(CardSuit.Club, CardType.Nine), Announce.None);
            IList <Card> cards  = new List <Card>()
            {
                new Card(CardSuit.Spade, CardType.Queen),
                new Card(CardSuit.Spade, CardType.King),
                new Card(CardSuit.Heart, CardType.Queen),
                new Card(CardSuit.Club, CardType.Ace),
                new Card(CardSuit.Club, CardType.Nine),
                new Card(CardSuit.Diamond, CardType.Ace)
            };

            Assert.IsFalse(validator.IsValid(action, context, cards));
        }
        public void TestAnnounceOnFirstHand()
        {
            MoreThanTwoCardsLeftRoundState stateOfMiddle = new MoreThanTwoCardsLeftRoundState(new GameRound(new Player(), new Player(), PlayerPosition.FirstPlayer));

            PlayerAction      action  = new PlayerAction(PlayerActionType.PlayCard, new Card(CardSuit.Heart, CardType.King), Announce.Twenty);
            PlayerTurnContext context = new PlayerTurnContext(stateOfMiddle, new Card(CardSuit.Spade, CardType.Jack), 6);
            IList <Card>      cards   = new List <Card>()
            {
                new Card(CardSuit.Spade, CardType.Queen),
                new Card(CardSuit.Heart, CardType.King),
                new Card(CardSuit.Heart, CardType.Queen),
                new Card(CardSuit.Club, CardType.King),
                new Card(CardSuit.Club, CardType.Nine),
                new Card(CardSuit.Diamond, CardType.Nine)
            };

            validator.IsValid(action, context, cards);
            Assert.AreEqual(Announce.None, action.Announce);
        }
示例#18
0
        public void InitializeData()
        {
            firstPlayer  = new ConsolePlayer(5, 10);
            secondPlayer = new ConsolePlayer(10, 10);

            gameRound = new GameRound(firstPlayer, secondPlayer, PlayerPosition.SecondPlayer);

            roundState = new MoreThanTwoCardsLeftRoundState(gameRound);
            testCard   = new Card(CardSuit.Diamond, CardType.Jack);
            trumpCard  = new Card(CardSuit.Club, CardType.Ace);
            action     = new PlayerAction(PlayerActionType.PlayCard, testCard, Announce.Twenty);
            context    = new PlayerTurnContext(roundState, trumpCard, 20);

            playerCards = new List <Card>();
            playerCards.Add(testCard);
            playerCards.Add(new Card(CardSuit.Heart, CardType.Jack));
            playerCards.Add(new Card(CardSuit.Spade, CardType.King));
            playerCards.Add(new Card(CardSuit.Spade, CardType.Queen));
            playerCards.Add(new Card(CardSuit.Club, CardType.Nine));
            playerCards.Add(new Card(CardSuit.Spade, CardType.Ten));
        }
        public void TestInvalidClosingGameInMiddleRound()
        {
            MoreThanTwoCardsLeftRoundState middle = new MoreThanTwoCardsLeftRoundState(new GameRound(new Player(), new Player(), PlayerPosition.FirstPlayer));

            PlayerTurnContext context = new PlayerTurnContext(middle, new Card(CardSuit.Diamond, CardType.Jack), 6);

            context.FirstPlayedCard = new Card(CardSuit.Club, CardType.King);

            // Cannot Close game because it's already played a card.
            PlayerAction action = new PlayerAction(PlayerActionType.CloseGame, new Card(CardSuit.Club, CardType.Nine), Announce.None);
            IList <Card> cards  = new List <Card>()
            {
                new Card(CardSuit.Spade, CardType.Queen),
                new Card(CardSuit.Spade, CardType.King),
                new Card(CardSuit.Heart, CardType.Queen),
                new Card(CardSuit.Club, CardType.Ace),
                new Card(CardSuit.Club, CardType.Nine),
                new Card(CardSuit.Diamond, CardType.Nine)
            };

            Assert.IsFalse(validator.IsValid(action, context, cards));
        }
        public void TestAnnounceTwenty()
        {
            MoreThanTwoCardsLeftRoundState middle = new MoreThanTwoCardsLeftRoundState(new GameRound(new Player(), new Player(), PlayerPosition.FirstPlayer));

            PlayerAction      action  = new PlayerAction(PlayerActionType.PlayCard, new Card(CardSuit.Heart, CardType.King), Announce.Twenty);
            PlayerTurnContext context = new PlayerTurnContext(middle, new Card(CardSuit.Spade, CardType.Jack), 6);
            IList <Card>      cards   = new List <Card>()
            {
                new Card(CardSuit.Spade, CardType.Ten),
                new Card(CardSuit.Heart, CardType.King),
                new Card(CardSuit.Heart, CardType.Queen),
                new Card(CardSuit.Club, CardType.King),
                new Card(CardSuit.Club, CardType.Nine),
                new Card(CardSuit.Diamond, CardType.Nine)
            };

            // a card is played. Just to avoid context.AmITheFirstPlayer;
            context.FirstPlayedCard = new Card(CardSuit.Club, CardType.King);

            validator.IsValid(action, context, cards);
            Assert.AreEqual(Announce.Twenty, action.Announce);
        }