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 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 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 TestGetSettlementLocations()
        {
            var target = new Player();
            target.incrementCities();
            target.generateGrain();
            target.generateWool();
            target.generateLumber();
            target.generateBrick();

            target.addSettlement(new Point(4, 4));
            List<Point> settlements = target.getSettlementLocations();
            Assert.AreEqual(new Point(4, 4), settlements[0]);
        }
        public void TestGetRoadsPlayed()
        {
            var target = new Player();
            target.incrementCities();
            target.generateBrick();
            target.generateLumber();

            target.buildRoad();
            target.buildRoad();

            Assert.AreEqual(2, target.getRoadsPlayed());
        }
        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 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 TestTradeBrickWithBankWithAnythingPort()
 {
     var target = new Player();
     target.incrementCities();
     target.incrementSettlements();
     target.generateBrick();
     target.addPort(new Port("Anything", 3));
     target.tradeWithBank("brick", "lumber");
     Assert.AreEqual(1, target.playerHand.getLumber());
     Assert.AreEqual(0, target.playerHand.getBrick());
 }
 public void TestTradeWoolWithBankWithAnythingPort()
 {
     var target = new Player();
     target.incrementCities();
     target.incrementSettlements();
     target.generateWool();
     target.addPort(new Port("Anything", 3));
     target.tradeWithBank("wool", "grain");
     Assert.AreEqual(1, target.playerHand.getGrain());
     Assert.AreEqual(0, target.playerHand.getWool());
 }
 public void TestTradeWithBankWithWoolPort()
 {
     var target = new Player();
     target.incrementCities();
     target.generateGrain();
     target.generateWool();
     target.addPort(new Port("Wool", 2));
     target.tradeWithBank("wool", "grain");
     Assert.AreEqual(3, target.playerHand.getGrain());
     Assert.AreEqual(0, target.playerHand.getWool());
 }
 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 TestTradeWithBankWithGrainPort()
 {
     var target = new Player();
     target.incrementCities();
     target.generateBrick();
     target.generateGrain();
     target.addPort(new Port("Grain", 2));
     target.tradeWithBank("grain", "brick");
     Assert.AreEqual(3, target.playerHand.getBrick());
     Assert.AreEqual(0, target.playerHand.getGrain());
 }
 public void TestTradeWithBankWithBrickPort()
 {
     var target = new Player();
     target.incrementCities();
     target.generateLumber();
     target.generateBrick();
     target.addPort(new Port("Brick", 2));
     target.tradeWithBank("brick", "lumber");
     Assert.AreEqual(3, target.playerHand.getLumber());
     Assert.AreEqual(0, target.playerHand.getBrick());
 }
        public void TestTradeWithBankForWoolThrowsWhenBankHasNone()
        {
            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.generateWool();
            player2.incrementSettlements();
            player2.generateWool();

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

            player1.generateBrick();

            player1.tradeWithBank("brick", "wool");
        }
        public void TestMustRemoveHalfWhenMoreThanSeven()
        {
            var target = new Player();
            target.incrementCities();
            target.generateGrain();
            target.generateWool();
            target.generateLumber();
            target.generateBrick();

            Assert.IsTrue(target.mustRemoveHalf());
        }
        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 TestGenerateResourcesWithOnlyCities()
        {
            var target = new Player();
            target.incrementCities();
            target.incrementCities();
            Assert.AreEqual(2, target.getCitiesRemaining());

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

            Assert.AreEqual(4, target.getHand().getBrick());
            Assert.AreEqual(4, target.getHand().getGrain());
            Assert.AreEqual(4, target.getHand().getLumber());
            Assert.AreEqual(4, target.getHand().getOre());
            Assert.AreEqual(4, target.getHand().getWool());
        }
        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 TestGenerateWoolWithCitiesThrowsWhenBankHasInsufficientResources()
        {
            var target = new Player();
            target.incrementCities();
            target.incrementCities();
            target.incrementCities();
            target.incrementCities();
            Assert.AreEqual(0, target.getCitiesRemaining());

            target.generateWool();
            target.generateWool();

            Assert.AreEqual(16, target.getHand().getWool());

            target.generateWool();
        }
        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 TestTradeForWoolAtPortThrowsWhenBankHasNone()
        {
            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.generateWool();
            player2.generateWool();
            player2.generateWool();
            Assert.AreEqual(0, world.bank.getWoolRemaining());

            player1.generateLumber();
            player1.generateLumber();
            player1.generateLumber();
            player1.tradeAtPort(3, "wool", "lumber");
        }