示例#1
0
文件: BankTest.cs 项目: Corne/VOC
        public void CantBuyFromBankWithoutPlayer()
        {
            var board = new Mock<IBoard>();
            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            Assert.Throws<ArgumentNullException>(() => bank.BuyResource(MaterialType.Brick, MaterialType.Grain, null));
        }
示例#2
0
文件: BankTest.cs 项目: Corne/VOC
        public void CantOfferInvalidResource(MaterialType material)
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();

            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);
            Assert.Throws<ArgumentException>(() => bank.BuyResource(MaterialType.Grain, material, player.Object));
        }
示例#3
0
文件: BankTest.cs 项目: Corne/VOC
        [InlineData(0, 4, 2, false, true, true)]//total 12
        public void VerifyWinConditionTest(int settlements, int cities, int victoryCards, bool longestRoad, bool biggestArmy, bool expected)
        {
            var player = new Mock<IPlayer>();
            player.Setup(p => p.Cards).Returns(CreateVictoryCards(victoryCards));

            var board = new Mock<IBoard>();
            board.Setup(b => b.GetEstablishments(player.Object)).Returns(CreateEstablishments(settlements, 1).Concat(CreateEstablishments(cities, 2)));

            var roadAchievement = CreateAchievement(longestRoad ? player.Object : new Mock<IPlayer>().Object);
            var armhyAchievement = CreateAchievement(biggestArmy ? player.Object : new Mock<IPlayer>().Object);

            var bank = new Bank(board.Object, new[] { roadAchievement, armhyAchievement });

            bool result = bank.VerifyWinCondition(player.Object);
            Assert.Equal(expected, result);
        }
示例#4
0
文件: BankTest.cs 项目: Corne/VOC
        public void CantVerifyWinConditionOnNullPlayer()
        {
            var board = new Mock<IBoard>();
            var achievements = new IAchievement[0];

            var bank = new Bank(board.Object, achievements);
            Assert.Throws<ArgumentNullException>(() => bank.VerifyWinCondition(null));
        }
示例#5
0
文件: BankTest.cs 项目: Corne/VOC
        public void UpdateAchievementUpdatesAllAchievements()
        {
            var board = new Mock<IBoard>();
            var mocks = new[] { new Mock<IAchievement>(), new Mock<IAchievement>(), new Mock<IAchievement>() };
            var achievements = mocks.Select(m => m.Object).ToList();
            var bank = new Bank(board.Object, achievements);

            var player = new Mock<IPlayer>();
            bank.UpdateAchievements(player.Object);

            foreach (var mock in mocks)
                mock.Verify(m => m.Update(player.Object));
        }
示例#6
0
文件: BankTest.cs 项目: Corne/VOC
        public void UpdateAchievementsFailsIfPlayerNull()
        {
            var board = new Mock<IBoard>();
            var mocks = new[] { new Mock<IAchievement>(), new Mock<IAchievement>(), new Mock<IAchievement>() };
            var achievements = mocks.Select(m => m.Object).ToList();
            var bank = new Bank(board.Object, achievements);

            Assert.Throws<ArgumentNullException>(() => bank.UpdateAchievements(null));
        }
示例#7
0
文件: BankTest.cs 项目: Corne/VOC
        public void BuyCardFailsWhenNoMoreCardsLeft()
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();
            var turn = new Mock<ITurn>();

            player.Setup(p => p.HasResources(Bank.DEVELOPMENTCARD_COST)).Returns(true);

            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            for (int i = 0; i < 25; i++)
            {
                bank.BuyDevelopmentCard(player.Object, turn.Object);
            }
            Assert.Throws<InvalidOperationException>(() => bank.BuyDevelopmentCard(player.Object, turn.Object));
        }
示例#8
0
文件: BankTest.cs 项目: Corne/VOC
        public void BuyResourceUsesCheapestHarbor()
        {
            var board = new Mock<IBoard>();
            var resourceHarbor = new Mock<IHarbor>();
            resourceHarbor.Setup(h => h.Discount).Returns(MaterialType.Wool);
            var unsourcedHarbor = new Mock<IHarbor>();
            unsourcedHarbor.Setup(h => h.Discount).Returns(MaterialType.Unsourced);
            board.Setup(b => b.GetHarbors(It.IsAny<IPlayer>())).Returns(new IHarbor[] { unsourcedHarbor.Object, resourceHarbor.Object });

            var player = new Mock<IPlayer>();
            var offer = new MaterialType[] { MaterialType.Wool, MaterialType.Wool };
            player.Setup(p => p.HasResources(offer)).Returns(true);

            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);
            bank.BuyResource(MaterialType.Ore, MaterialType.Wool, player.Object);

            player.Verify(p => p.TakeResources(offer), Times.Once);
            player.Verify(p => p.AddResources(It.Is<IRawMaterial>(r => r.Type == MaterialType.Ore)));
        }
示例#9
0
文件: BankTest.cs 项目: Corne/VOC
        public void BuyDevelopmentCardFailsIfPlayerHasNoResources()
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();
            var turn = new Mock<ITurn>();
            player.Setup(p => p.HasResources(Bank.DEVELOPMENTCARD_COST)).Returns(false);

            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            Assert.Throws<InvalidOperationException>(() => bank.BuyDevelopmentCard(player.Object, turn.Object));
        }
示例#10
0
文件: BankTest.cs 项目: Corne/VOC
        public void BuyDevelopmentCantBeCalledWithoutPlayer(IPlayer player, ITurn turn)
        {
            var board = new Mock<IBoard>();
            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            Assert.Throws<ArgumentNullException>(() => bank.BuyDevelopmentCard(player, turn));
        }
示例#11
0
文件: BankTest.cs 项目: Corne/VOC
        public void DifferentResourceHarborGetsIgnored()
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();
            var achievements = new IAchievement[0];

            var bank = new Bank(board.Object, achievements);
            var harbor = new Mock<IHarbor>();
            harbor.Setup(h => h.Discount).Returns(MaterialType.Wool);
            board.Setup(b => b.GetHarbors(player.Object)).Returns(new IHarbor[] { harbor.Object });

            MaterialType[] result = bank.GetInvestmentCost(MaterialType.Grain, player.Object);
            MaterialType[] expected = { MaterialType.Grain, MaterialType.Grain, MaterialType.Grain, MaterialType.Grain };
            Assert.Equal(expected, result);
        }
示例#12
0
文件: BankTest.cs 项目: Corne/VOC
        public void GetInvestmentCostUsesCheapestHarbor()
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();
            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            var unsourcedHarbor = new Mock<IHarbor>();
            unsourcedHarbor.Setup(h => h.Discount).Returns(MaterialType.Unsourced);
            var resourceHarbor = new Mock<IHarbor>();
            resourceHarbor.Setup(h => h.Discount).Returns(MaterialType.Grain);
            board.Setup(b => b.GetHarbors(player.Object)).Returns(new IHarbor[] { unsourcedHarbor.Object, resourceHarbor.Object });

            MaterialType[] result = bank.GetInvestmentCost(MaterialType.Grain, player.Object);
            MaterialType[] expected = { MaterialType.Grain, MaterialType.Grain };
            Assert.Equal(expected, result);
        }
示例#13
0
文件: BankTest.cs 项目: Corne/VOC
        public void GetInvestmentCostDefaultReturns4()
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();
            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            MaterialType[] result = bank.GetInvestmentCost(MaterialType.Grain, player.Object);
            MaterialType[] expected = { MaterialType.Grain, MaterialType.Grain, MaterialType.Grain, MaterialType.Grain };
            Assert.Equal(expected, result);
        }
示例#14
0
文件: BankTest.cs 项目: Corne/VOC
        public void GetInvestmentFailsOnInvalidResource(MaterialType material)
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();
            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            Assert.Throws<ArgumentException>(() => bank.GetInvestmentCost(material, player.Object));
        }
示例#15
0
文件: BankTest.cs 项目: Corne/VOC
        public void GetInvestmentCostNeedsPlayer()
        {
            var board = new Mock<IBoard>();
            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            Assert.Throws<ArgumentNullException>(() => bank.GetInvestmentCost(MaterialType.Grain, null));
        }
示例#16
0
文件: BankTest.cs 项目: Corne/VOC
        public void BuyDevelopmentCardTest()
        {
            var board = new Mock<IBoard>();
            var player = new Mock<IPlayer>();
            var turn = new Mock<ITurn>();

            player.Setup(p => p.HasResources(Bank.DEVELOPMENTCARD_COST)).Returns(true);

            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);

            bank.BuyDevelopmentCard(player.Object, turn.Object);

            player.Verify(p => p.TakeResources(Bank.DEVELOPMENTCARD_COST));
            player.Verify(p => p.AddCard(It.IsAny<IDevelopmentCard>()));
        }
示例#17
0
文件: BankTest.cs 项目: Corne/VOC
        public void BuyFailsIfPlayerHasNotTheOfferedResources()
        {
            var board = new Mock<IBoard>();
            board.Setup(b => b.GetHarbors(It.IsAny<IPlayer>())).Returns(new IHarbor[] { });

            var player = new Mock<IPlayer>();
            player.Setup(p => p.HasResources(It.IsAny<MaterialType[]>())).Returns(false);

            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);
            Assert.Throws<InvalidOperationException>(() => bank.BuyResource(MaterialType.Grain, MaterialType.Lumber, player.Object));
        }
示例#18
0
文件: BankTest.cs 项目: Corne/VOC
        public void BuyResourceWithoutHarborTest()
        {
            var board = new Mock<IBoard>();
            board.Setup(b => b.GetHarbors(It.IsAny<IPlayer>())).Returns(new IHarbor[] { });

            var player = new Mock<IPlayer>();
            var offer = new MaterialType[] { MaterialType.Lumber, MaterialType.Lumber, MaterialType.Lumber, MaterialType.Lumber };
            player.Setup(p => p.HasResources(offer)).Returns(true);

            var achievements = new IAchievement[0];
            var bank = new Bank(board.Object, achievements);
            bank.BuyResource(MaterialType.Grain, MaterialType.Lumber, player.Object);

            player.Verify(p => p.TakeResources(offer), Times.Once);
            player.Verify(p => p.AddResources(It.Is<IRawMaterial>(r => r.Type == MaterialType.Grain)));
        }