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); }
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); }
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); }
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); }
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); }
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); }
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))); }
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)); }
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); }
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))); }
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); }
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); }
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); }
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)); }
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)); }
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)); }
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))); }
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))); }