public void GetCardsWhateverToPlay_EmptyPiles_ReturnsAllUniqueCards()
        {
            IGameProvider gameProvider =
                GameProviderFabric.Create(new List <Color> {
                Color.White, Color.Red
            });

            var fireworkPile = new FireworkPile(gameProvider);
            var discardPile  = new DiscardPile(gameProvider);

            var pileAnalyzer = new PilesAnalyzer(gameProvider);

            // act
            IReadOnlyList <Card> actual = pileAnalyzer.GetCardsWhateverToPlay(fireworkPile, discardPile);

            // assert
            var actualMatrix = new CardsToMatrixConverter(gameProvider).Encode(actual);

            var expectedMatrix = gameProvider.CreateEmptyMatrix();

            expectedMatrix[Rank.One, Color.White]   = 1;
            expectedMatrix[Rank.One, Color.Red]     = 1;
            expectedMatrix[Rank.Two, Color.White]   = 1;
            expectedMatrix[Rank.Two, Color.Red]     = 1;
            expectedMatrix[Rank.Three, Color.White] = 1;
            expectedMatrix[Rank.Three, Color.Red]   = 1;
            expectedMatrix[Rank.Four, Color.White]  = 1;
            expectedMatrix[Rank.Four, Color.Red]    = 1;
            expectedMatrix[Rank.Five, Color.White]  = 1;
            expectedMatrix[Rank.Five, Color.Red]    = 1;

            TestHelper.AreMatrixEqual(expectedMatrix, actualMatrix, gameProvider);
        }
Beispiel #2
0
        public void AddCard_AddBlueFourCardToBlueFireworkWithLastThree_ReturnsTrue()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Blue, Color.Red,
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two, Rank.Three, Rank.Four
                }
            };
            var firework = new FireworkPile(provider);

            var blueOneCard   = new Card(Color.Blue, Rank.One);
            var blueTwoCard   = new Card(Color.Blue, Rank.Two);
            var blueThreeCard = new Card(Color.Blue, Rank.Three);

            firework.AddCard(blueOneCard);
            firework.AddCard(blueTwoCard);
            firework.AddCard(blueThreeCard);

            var blueFourCard = new Card(Color.Blue, Rank.Four);
            var isAdded      = firework.AddCard(blueFourCard);

            Assert.IsTrue(isAdded);
        }
        public void GetThrownCards_FireworkPileWithBlueOneAndDiscardPileWithBlueOne_ReturnsListWithBlueOnesOnly()
        {
            //// arrange

            FakeGameProvider gameProvider =
                GameProviderFabric.Create(new List <Color> {
                Color.Blue, Color.Red
            }.AsReadOnly());

            // play blue one card
            var fireworkPile = new FireworkPile(gameProvider);

            fireworkPile.AddCard(new Card(Color.Blue, Rank.One));

            // discard blue one card
            var discardPile = new DiscardPile(gameProvider);

            discardPile.AddCard(new Card(Color.Blue, Rank.One));

            var pileAnalyzer = new PilesAnalyzer(gameProvider);

            //// act
            IReadOnlyList <Card> actual = pileAnalyzer.GetThrownCards(fireworkPile, discardPile);

            Assert.IsTrue(actual.Count > 0 &&
                          actual.All(card => Equals(card, new Card(Color.Blue, Rank.One))));
        }
        public void GetThrownCards_FireworkPileWithBlueOneAndDiscardPileWithBlueOne_ReturnsListWith2Elements()
        {
            //// arrange

            // create fake deck that contains blue one cards only
            FakeGameProvider provider = GameProviderFabric.Create(Color.Blue);

            // play blue one card
            var fireworkPile = new FireworkPile(provider);

            fireworkPile.AddCard(new Card(Color.Blue, Rank.One));

            // discard blue one card
            var discardPile = new DiscardPile(provider);

            discardPile.AddCard(new Card(Color.Blue, Rank.One));

            GameProvider gameProvider = new GameProvider();
            var          pileAnalyzer = new PilesAnalyzer(gameProvider);

            //// act
            IReadOnlyList <Card> actual = pileAnalyzer.GetThrownCards(fireworkPile, discardPile);

            Assert.AreEqual(2, actual.Count);
        }
Beispiel #5
0
        public void GetExpectedCards_FullFireworkPile_ReturnsEmptyList()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Blue, Color.Green
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two
                },
            };

            var fireworkPile = new FireworkPile(provider);

            var blueOneCard = new Card(Color.Blue, Rank.One);

            fireworkPile.AddCard(blueOneCard);

            var blueTwoCard = new Card(Color.Blue, Rank.Two);

            fireworkPile.AddCard(blueTwoCard);

            var greenOneCard = new Card(Color.Green, Rank.One);

            fireworkPile.AddCard(greenOneCard);

            var greenTwoCard = new Card(Color.Green, Rank.Two);

            fireworkPile.AddCard(greenTwoCard);

            IReadOnlyList <Card> actual = fireworkPile.GetExpectedCards();

            Assert.IsEmpty(actual);
        }
Beispiel #6
0
        public void AddCard_AddWhiteTwoCardToWhiteFireworkWithLastTwo_ReturnsFalse()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Green, Color.White
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two, Rank.Three
                }
            };

            var firework = new FireworkPile(provider);

            var whiteOneCard = new Card(Color.White, Rank.One);
            var whiteTwoCard = new Card(Color.White, Rank.Two);

            firework.AddCard(whiteOneCard);
            firework.AddCard(whiteTwoCard);

            var otherWhiteTwoCard = new Card(Color.White, Rank.Two);
            var added             = firework.AddCard(otherWhiteTwoCard);

            Assert.IsFalse(added);
        }
        public void GetThrownCards_EmptyPiles_ReturnsEmptyList()
        {
            IGameProvider gameProvider = GameProviderFabric.Create(Color.Multicolor);

            var pileAnalyzer = new PilesAnalyzer(gameProvider);

            var fireworkPile = new FireworkPile(gameProvider);
            var discardPile  = new DiscardPile(gameProvider);

            IReadOnlyList <Card> actual = pileAnalyzer.GetThrownCards(fireworkPile, discardPile);

            Assert.IsEmpty(actual);
        }
Beispiel #8
0
        public void IsSubtleClue_FireworkWithBlueAndGreenOneAndCluesAboutOne_ReturnsFalse()
        {
            var firework = new FireworkPile(new GameProvider());

            firework.AddCard(new Card(Color.Blue, Rank.One));
            firework.AddCard(new Card(Color.Green, Rank.One));

            var clue = new ClueAboutRank(Rank.One);

            // act
            bool result = clue.IsSubtleClue(firework.GetExpectedCards());

            // assert
            Assert.IsFalse(result);
        }
Beispiel #9
0
        public void IsSubtleClue_FireworkWithAllOnesExceptRedAndYellowAndCluesAboutOne_ReturnsTrue()
        {
            var firework = new FireworkPile(new GameProvider());

            firework.AddCard(new Card(Color.Blue, Rank.One));
            firework.AddCard(new Card(Color.Green, Rank.One));
            firework.AddCard(new Card(Color.White, Rank.One));

            var clue = new ClueAboutRank(Rank.One);

            // act
            bool result = clue.IsSubtleClue(firework.GetExpectedCards());

            // assert
            Assert.IsTrue(result);
        }
Beispiel #10
0
        public void GetUniqueCards_DiscardBlueTwoCard_ContainsBlueTwoCard()
        {
            IGameProvider gameProvider = GameProviderFabric.Create(Color.Blue);

            FireworkPile fireworkPile = new FireworkPile(gameProvider);
            DiscardPile  discardPile  = new DiscardPile(gameProvider);

            Card blueTwoCard = new Card(Color.Blue, Rank.Two);

            discardPile.AddCard(blueTwoCard);

            var pileAnalyzer = new PilesAnalyzer(gameProvider);

            IReadOnlyList <Card> actual = pileAnalyzer.GetUniqueCards(fireworkPile, discardPile);

            Assert.IsTrue(actual.Contains(new Card(Color.Blue, Rank.Two)));
        }
Beispiel #11
0
        public void GetUniqueCards_DiscardAllYellowOneCards_DoesNotContainYellowCards()
        {
            IGameProvider provider = GameProviderFabric.Create(Color.Yellow);

            var fireworkPile = new FireworkPile(provider);
            var discardPile  = new DiscardPile(provider);

            discardPile.AddCard(new Card(Color.Yellow, Rank.One));
            discardPile.AddCard(new Card(Color.Yellow, Rank.One));
            discardPile.AddCard(new Card(Color.Yellow, Rank.One));

            GameProvider gameProvider = new GameProvider();
            var          pileAnalyzer = new PilesAnalyzer(gameProvider);

            IReadOnlyList <Card> actual = pileAnalyzer.GetUniqueCards(fireworkPile, discardPile);

            Assert.IsFalse(actual.Any(card => card.Color == Color.Yellow));
        }
Beispiel #12
0
        public void AddCard_AddGreenOneToEmptyFireworkPile_ReturnsTrue()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Green, Color.Red
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two
                }
            };
            var pile         = new FireworkPile(provider);
            var greenOneCard = new Card(Color.Green, Rank.One);

            var added = pile.AddCard(greenOneCard);

            Assert.IsTrue(added);
        }
Beispiel #13
0
        public void GetUniqueCards_PlayRedOneAndDiscardRedOne_DoesNotContainRedOne()
        {
            IGameProvider provider = GameProviderFabric.Create(Color.Red);

            var fireworkPile = new FireworkPile(provider);

            fireworkPile.AddCard(new Card(Color.Red, Rank.One));

            var discardedPile = new DiscardPile(provider);

            discardedPile.AddCard(new Card(Color.Red, Rank.One));

            var pileAnalyzer = new PilesAnalyzer(provider);

            IReadOnlyList <Card> actual = pileAnalyzer.GetUniqueCards(fireworkPile, discardedPile);

            Assert.IsFalse(actual.Contains(new Card(Color.Red, Rank.One)));
        }
Beispiel #14
0
        public void GetLastCards_Default_ReturnsEmptyList()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Blue, Color.Green, Color.Red, Color.White, Color.Yellow
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two
                },
            };

            var pile = new FireworkPile(provider);

            var nextCards = pile.GetLastCards();

            Assert.IsEmpty(nextCards);
        }
Beispiel #15
0
        public void AddCard_AddWhiteTwoToEmptyFireworkPile_ReturnsFalse()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Green, Color.Red, Color.White
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two
                }
            };

            var pile         = new FireworkPile(provider);
            var whiteTwoCard = new Card(Color.White, Rank.Two);

            var added = pile.AddCard(whiteTwoCard);

            Assert.IsFalse(added);
        }
Beispiel #16
0
        public void GetExpectedCards_EmptyFireworkPile_ReturnsListWithFiveElements()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Blue, Color.Green, Color.Red, Color.White, Color.Yellow
                },
                Ranks = new List <Rank> {
                    Rank.One
                }
            };


            var fireworkPile = new FireworkPile(provider);

            IReadOnlyList <Card> actual = fireworkPile.GetExpectedCards();

            Assert.AreEqual(5, actual.Count);
        }
Beispiel #17
0
        public void GetCardsWhateverToPlay_DiscardedAllWhiteOne_DoesNotContainWhiteCards()
        {
            FakeGameProvider provider = GameProviderFabric.Create(new List <Color> {
                Color.White, Color.Red
            });

            var fireworkPile = new FireworkPile(provider);
            var discardPile  = new DiscardPile(provider);

            discardPile.AddCard(new Card(Color.White, Rank.One));
            discardPile.AddCard(new Card(Color.White, Rank.One));
            discardPile.AddCard(new Card(Color.White, Rank.One));

            GameProvider gameProvider = new GameProvider();
            var          pileAnalyzer = new PilesAnalyzer(gameProvider);

            IReadOnlyList <Card> actual = pileAnalyzer.GetCardsWhateverToPlay(fireworkPile, discardPile);

            Assert.IsTrue(actual.All(card => card.Color != Color.White));
        }
Beispiel #18
0
        public void GetExpectedCards_FullBlueFirework_ReturnsNullForBlueColor()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Blue, Color.White
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two, Rank.Three, Rank.Four, Rank.Five
                },
            };

            var pile = new FireworkPile(provider);

            pile.AddCard(new Card(Color.Blue, Rank.One));
            pile.AddCard(new Card(Color.Blue, Rank.Two));
            pile.AddCard(new Card(Color.Blue, Rank.Three));
            pile.AddCard(new Card(Color.Blue, Rank.Four));
            pile.AddCard(new Card(Color.Blue, Rank.Five));

            var nextCards = pile.GetExpectedCards();

            Assert.That(nextCards.All(card => card.Color != Color.Blue));
        }
Beispiel #19
0
        public void GetExpectedCards_FireworkPileWithFullRedFirework_ReturnsListWithoutRedCards()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Red, Color.Blue
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two, Rank.Three, Rank.Four, Rank.Five
                },
            };

            var fireworkPile = new FireworkPile(provider);

            fireworkPile.AddCard(new Card(Color.Red, Rank.One));
            fireworkPile.AddCard(new Card(Color.Red, Rank.Two));
            fireworkPile.AddCard(new Card(Color.Red, Rank.Three));
            fireworkPile.AddCard(new Card(Color.Red, Rank.Four));
            fireworkPile.AddCard(new Card(Color.Red, Rank.Five));

            IReadOnlyList <Card> actual = fireworkPile.GetExpectedCards();

            Assert.IsTrue(actual.All(card => card.Color != Color.Red));
        }
Beispiel #20
0
        public void GetExpectedCards_BlueFireworkWithLastFour_ReturnsListWithBlueFive()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Blue
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two, Rank.Three, Rank.Four, Rank.Five
                }
            };
            var fireworkPile = new FireworkPile(provider);

            fireworkPile.AddCard(new Card(Color.Blue, Rank.One));
            fireworkPile.AddCard(new Card(Color.Blue, Rank.Two));
            fireworkPile.AddCard(new Card(Color.Blue, Rank.Three));
            fireworkPile.AddCard(new Card(Color.Blue, Rank.Four));

            var expectedCards = fireworkPile.GetExpectedCards();

            var blueFiveCard = new Card(Color.Blue, Rank.Five);

            Assert.That(expectedCards.Any(card => card.Equals(blueFiveCard)));
        }
Beispiel #21
0
        public void GetLastCards_FireworkWithGreenOneCard_ReturnsOneForGreenColor()
        {
            IGameProvider provider = new FakeGameProvider()
            {
                Colors = new List <Color> {
                    Color.Green, Color.Blue
                },
                Ranks = new List <Rank> {
                    Rank.One, Rank.Two
                },
            };
            var pile = new FireworkPile(provider);

            var greenOneCard = new Card(Color.Green, Rank.One);

            pile.AddCard(greenOneCard);

            var lastCards = pile.GetLastCards();

            var otherGreenOneCard = new Card(Color.Green, Rank.One);

            Assert.Greater(lastCards.Count, 0);
            Assert.That(lastCards.Any(card => card.Equals(otherGreenOneCard)));
        }