public void TestBuildCity()
        {
            var target = new Player();

            target.incrementCities();
            target.generateGrain();
            target.generateOre();
            target.generateOre();

            target.buildCity();

            Assert.AreEqual(1, target.getHand().getOre());
            Assert.AreEqual(0, target.getHand().getGrain());
        }
        public void TestTradeForDevCard()
        {
            var target = new Player();

            target.incrementSettlements();
            target.generateWool();
            target.generateGrain();
            target.generateOre();

            target.tradeForDevCard();
            Assert.AreEqual(0, target.getHand().getResources());
            Assert.AreEqual(1, target.getHand().getDevCardCount());
        }
        public void TestCanBuildCity()
        {
            var target = new Player();
            Assert.IsFalse(target.canBuildCity());

            target.incrementCities();
            target.generateGrain();
            target.generateOre();
            target.generateOre();

            Assert.IsTrue(target.canBuildCity());
        }
        public void TestTradeAtPort()
        {
            var target = new Player();

            target.incrementCities();
            target.incrementSettlements();

            target.generateBrick();
            target.generateGrain();
            target.generateLumber();
            target.generateOre();
            target.generateWool();

            target.tradeAtPort(3, "grain", "brick");
            target.tradeAtPort(3, "lumber", "grain");
            target.tradeAtPort(3, "ore", "lumber");
            target.tradeAtPort(3, "wool", "ore");
            target.tradeAtPort(3, "brick", "wool");

            Assert.AreEqual(1, target.getHand().getGrain());
            Assert.AreEqual(1, target.getHand().getLumber());
            Assert.AreEqual(1, target.getHand().getOre());
            Assert.AreEqual(1, target.getHand().getWool());
            Assert.AreEqual(1, target.getHand().getBrick());
        }
        public void TestRob()
        {
            var target = new Player();
            target.incrementSettlements();

            target.generateLumber();
            Assert.AreEqual("lumber", target.rob());
            Assert.AreEqual(0, target.playerHand.getLumber());

            target.generateBrick();
            Assert.AreEqual("brick", target.rob());
            Assert.AreEqual(0, target.playerHand.getBrick());

            target.generateGrain();
            Assert.AreEqual("grain", target.rob());
            Assert.AreEqual(0, target.playerHand.getGrain());

            target.generateWool();
            Assert.AreEqual("wool", target.rob());
            Assert.AreEqual(0, target.playerHand.getWool());

            target.generateOre();
            Assert.AreEqual("ore", target.rob());
            Assert.AreEqual(0, target.playerHand.getOre());
        }
        public void TestPickString()
        {
            var target = new Player();
            target.incrementSettlements();
            List<string> resources = new List<string>();

            target.generateLumber();
            resources.Add("lumber");
            Assert.AreEqual("lumber", target.pickString(resources));
            Assert.AreEqual(0, target.playerHand.getLumber());
            resources.Remove("lumber");

            target.generateBrick();
            resources.Add("brick");
            Assert.AreEqual("brick", target.pickString(resources));
            Assert.AreEqual(0, target.playerHand.getBrick());
            resources.Remove("brick");

            target.generateGrain();
            resources.Add("grain");
            Assert.AreEqual("grain", target.pickString(resources));
            Assert.AreEqual(0, target.playerHand.getGrain());
            resources.Remove("grain");

            target.generateWool();
            resources.Add("wool");
            Assert.AreEqual("wool", target.pickString(resources));
            Assert.AreEqual(0, target.playerHand.getWool());
            resources.Remove("wool");

            target.generateOre();
            resources.Add("ore");
            Assert.AreEqual("ore", target.pickString(resources));
            Assert.AreEqual(0, target.playerHand.getOre());
            resources.Remove("ore");
        }
        public void TestmakeTradeThrowsWhenPlayerCannotMakeTrade()
        {
            var player1 = new Player();
            var player2 = new Player();
            player1.incrementCities();
            player1.generateOre();
            player2.incrementCities();
            player2.generateBrick();
            int[] player1Hand = new int[] {2, 0, 0, 0, 0};
            int[] threeBricks = new int[] {0, 0, 0, 0, 3};
            player1.proposeTrade(player2, player1Hand, threeBricks);

            // should throw because player2 only has 2 bricks
            player2.makeTrade();
        }
        public void TestTradeWithBankForOreThrowsWhenBankHasNone()
        {
            World world = new World();
            var player1 = new Player("Bob", Color.Red, world);
            var player2 = new Player("Jim", Color.Blue, world);

            player1.incrementCities();
            player1.incrementCities();

            player2.incrementCities();
            player2.incrementCities();
            player2.incrementCities();
            player2.incrementCities();
            player2.incrementSettlements();

            player2.generateOre();
            player2.incrementSettlements();
            player2.generateOre();

            Assert.AreEqual(0, world.bank.getOreRemaining());

            player1.generateLumber();

            player1.tradeWithBank("lumber", "ore");
        }
        public void TestGenerateResourcesWithOnlySettlements()
        {
            var target = new Player();
            target.incrementSettlements();
            target.incrementSettlements();
            Assert.AreEqual(3, target.getSettlementsRemaining());

            target.generateBrick();
            target.generateGrain();
            target.generateLumber();
            target.generateOre();
            target.generateWool();

            Assert.AreEqual(2, target.getHand().getBrick());
            Assert.AreEqual(2, target.getHand().getGrain());
            Assert.AreEqual(2, target.getHand().getLumber());
            Assert.AreEqual(2, target.getHand().getOre());
            Assert.AreEqual(2, target.getHand().getWool());
        }
 public void TestGenerateResourcesWithNoCitiesOrSettlements()
 {
     var target = new Player();
     target.generateBrick();
     target.generateGrain();
     target.generateLumber();
     target.generateOre();
     target.generateWool();
     Assert.AreEqual(0, target.getHand().getResources());
 }
        public void TestGenerateOreWithSettlementsThrowsWhenBankHasInsufficientResources()
        {
            var target = new Player();
            target.incrementSettlements();
            target.incrementSettlements();
            target.incrementSettlements();
            target.incrementSettlements();
            target.incrementSettlements();
            Assert.AreEqual(0, target.getSettlementsRemaining());

            target.generateOre();
            target.generateOre();
            target.generateOre();

            Assert.AreEqual(15, target.getHand().getOre());

            target.generateOre();
        }
 public void TestTransferOre()
 {
     var target = new Player();
     target.incrementSettlements();
     target.generateOre();
     target.transferOre(1);
 }
 public void TestTradeWithBankWithOrePort()
 {
     var target = new Player();
     target.incrementCities();
     target.generateWool();
     target.generateOre();
     target.addPort(new Port("Ore", 2));
     target.tradeWithBank("ore", "wool");
     Assert.AreEqual(3, target.playerHand.getWool());
     Assert.AreEqual(0, target.playerHand.getOre());
 }
 public void TestTradeWithBankWithLumberPort()
 {
     var target = new Player();
     target.incrementCities();
     target.generateOre();
     target.generateLumber();
     target.addPort(new Port("Lumber", 2));
     target.tradeWithBank("lumber", "ore");
     Assert.AreEqual(3, target.playerHand.getOre());
     Assert.AreEqual(0, target.playerHand.getLumber());
 }
        public void TestTradeForDevCardThrowsWhenBankHasNoDevCards()
        {
            var target = new Player();

            target.incrementCities();
            target.incrementCities();
            target.incrementSettlements();

            for (int i = 0; i < 5; i++)
            {
                target.generateGrain();
                target.generateOre();
                target.generateWool();

                for (int j = 0; j < 5; j++)
                {
                    target.tradeForDevCard();
                }
            }

            target.generateGrain();
            target.generateOre();
            target.generateWool();

            // should generate an exception
            target.tradeForDevCard();
        }
 public void TestMakeTrade()
 {
     var player1 = new Player();
     var player2 = new Player();
     player1.incrementCities();
     player1.generateOre();
     player2.incrementCities();
     player2.generateBrick();
     int[] player1Hand = new int[] {2, 0, 0, 0, 0};
     int[] player2Hand = new int[] {0, 0, 0, 0, 2};
     player1.proposeTrade(player2, player1Hand, player2Hand);
     player2.makeTrade();
 }
        public void TestTradeForGrainAtPortThrowsWhenBankHasNone()
        {
            World world = new World();
            var player1 = new Player("Bob", Color.Red, world);
            var player2 = new Player("Jim", Color.Blue, world);

            player1.incrementSettlements();

            player2.incrementCities();
            player2.incrementCities();
            player2.incrementCities();
            player2.incrementCities();
            player2.incrementSettlements();

            player1.generateGrain();
            player2.generateGrain();
            player2.generateGrain();
            Assert.AreEqual(0, world.bank.getGrainRemaining());

            player1.generateOre();
            player1.generateOre();
            player1.generateOre();
            player1.tradeAtPort(3, "grain", "ore");
        }
 public void TestTradeOreWithBankWithAnythingPort()
 {
     var target = new Player();
     target.incrementCities();
     target.incrementSettlements();
     target.generateOre();
     target.addPort(new Port("Anything", 3));
     target.tradeWithBank("ore", "wool");
     Assert.AreEqual(1, target.playerHand.getWool());
     Assert.AreEqual(0, target.playerHand.getOre());
 }