class StupidBotStrategyTest(unittest.TestCase): def setUp(self): self.redPlayer = Player(PlayerColor.Red, StupidBot()) self.bluePlayer = Player(PlayerColor.Blue, StupidBot()) self.board = Board() def testPlacePersonsWithoutResources(self): nPersonsBefore = self.board.person(self.redPlayer) self.redPlayer.placePersons(self.board) self.assertGreater(self.board.person(self.redPlayer), nPersonsBefore) def testPlacingOrderWhenTwoHutsAffordable(self): self.board = Board([SimpleHut(Resource.wood, Resource.wood, Resource.clay), SimpleHut(Resource.wood, Resource.stone, Resource.gold), SimpleHut(Resource.wood, Resource.wood, Resource.gold), SimpleHut(Resource.wood, Resource.clay, Resource.stone)]) self.redPlayer.addResources([Resource.wood, Resource.wood, Resource.clay, Resource.wood, Resource.clay, Resource.stone]) self.redPlayer.placePersons(self.board) self.assertEqual(1, self.board.person(self.redPlayer)) self.assertTrue(self.board.farmOccupied()) self.redPlayer.placePersons(self.board) self.assertEqual(3, self.board.person(self.redPlayer)) self.assertTrue(self.board.breedingHutOccupied()) # occupying the toolsmith with blue player self.assertFalse(self.board.toolSmithOccupied()) self.board.placeOnToolSmith(self.bluePlayer) self.assertEqual(1, self.board.person(self.bluePlayer)) self.assertTrue(self.board.toolSmithOccupied()) self.redPlayer.placePersons(self.board) self.assertEqual(4, self.board.person(self.redPlayer)) self.assertEqual(1, self.board.personsOnHuts(self.redPlayer)) self.redPlayer.placePersons(self.board) self.assertEqual(5, self.board.person(self.redPlayer)) self.assertEqual(2, self.board.personsOnHuts(self.redPlayer)) def testPlacingOfNoSimpleHutPersons(self): self.board = Board([SimpleHut(Resource.wood, Resource.wood, Resource.clay), SimpleHut(Resource.wood, Resource.wood, Resource.stone), SimpleHut(Resource.wood, Resource.wood, Resource.gold), SimpleHut(Resource.wood, Resource.clay, Resource.stone)]) self.redPlayer.addResources([Resource.wood, Resource.wood]) self.redPlayer.placePersons(self.board) self.assertEqual(1, self.board.person(self.redPlayer)) self.assertTrue(self.board.farmOccupied()) self.redPlayer.placePersons(self.board) self.assertEqual(3, self.board.person(self.redPlayer)) self.assertTrue(self.board.breedingHutOccupied()) self.redPlayer.placePersons(self.board) self.assertEqual(4, self.board.person(self.redPlayer)) self.assertTrue(self.board.toolSmithOccupied()) self.redPlayer.placePersons(self.board) self.assertEqual(5, self.board.person(self.redPlayer)) def testFeeding(self): self.assertEqual(0, self.redPlayer.foodMissing()) self.redPlayer.feed() self.assertEqual(0, self.redPlayer.foodMissing()) self.redPlayer.feed() self.assertEqual(3, self.redPlayer.foodMissing()) def testFeedingWithFoodStack(self): self.redPlayer.feed() self.redPlayer.feed() self.assertEqual(3, self.redPlayer.foodMissing()) self.redPlayer.addResources([Resource.foodtrack,Resource.foodtrack]) self.assertEqual(1, self.redPlayer.foodMissing()) def testIsPayableBug(self): self.redPlayer.addResources([Resource.wood, Resource.wood, Resource.wood, Resource.wood, Resource.wood, Resource.clay, Resource.clay, Resource.stone, Resource.gold,]) firstHut = CountHut(4, 2) self.redPlayer.strategy.updatePlannedCosts(firstHut, self.redPlayer.resources) self.assertDictEqual({firstHut : [Resource.wood,Resource.clay,Resource.wood,Resource.wood]}, self.redPlayer.strategy.plannedCosts) secondHut = CountHut(4, 3) self.assertTrue(self.redPlayer.isPayable(secondHut)) self.redPlayer.strategy.updatePlannedCosts(secondHut, self.redPlayer.resources) self.assertDictEqual({firstHut : [Resource.wood,Resource.clay,Resource.wood,Resource.wood], secondHut : [Resource.wood,Resource.clay,Resource.stone,Resource.wood]}, self.redPlayer.strategy.plannedCosts) thirdHut = SimpleHut(Resource.wood, Resource.stone, Resource.gold) self.assertTrue(self.redPlayer.isPayable(thirdHut)) fourthHut = CountHut(5, 2) self.assertTrue(self.redPlayer.isPayable(fourthHut)) def testBuyingHutsChangesScore(self): self.redPlayer.addResources([Resource.wood, Resource.wood, Resource.clay, Resource.wood, Resource.clay, Resource.stone]) hut1 = SimpleHut(Resource.wood, Resource.wood, Resource.clay) hut2 = SimpleHut(Resource.wood, Resource.clay, Resource.stone) self.redPlayer.strategy.plannedCosts = {hut1 : [Resource.wood,Resource.wood,Resource.clay], hut2 : [Resource.wood,Resource.clay,Resource.stone]} self.assertEqual(0, self.redPlayer.point) self.redPlayer.buyHuts([hut1, hut2]) self.assertEqual(22, self.redPlayer.point) def testFoodTrack(self): self.assertEqual(0, self.redPlayer.getFoodTrack()) self.redPlayer.addResources([Resource.foodtrack]) self.assertEqual(1, self.redPlayer.getFoodTrack()) self.redPlayer.addResources([Resource.wood,Resource.wood,Resource.foodtrack]) self.assertEqual(2, self.redPlayer.getFoodTrack()) self.assertEqual([Resource.wood,Resource.wood], self.redPlayer.getNonFood()) self.redPlayer.addResources([Resource.clay,Resource.foodtrack,Resource.foodtrack,Resource.wood]) self.assertEqual(4, self.redPlayer.getFoodTrack()) self.assertListEqual(sorted([Resource.wood,Resource.wood,Resource.clay,Resource.wood]), self.redPlayer.getNonFood()) def testFoodTrackMaximum(self): self.assertEqual(0, self.redPlayer.getFoodTrack()) self.redPlayer.addResources(10 * [Resource.foodtrack]) self.assertEqual(10, self.redPlayer.getFoodTrack()) self.redPlayer.addResources([Resource.foodtrack]) self.assertEqual(10, self.redPlayer.getFoodTrack()) def testBreeding(self): self.assertEqual(5, self.redPlayer.getPersonCount()) self.redPlayer.addResources([9]) self.assertEqual(6, self.redPlayer.getPersonCount()) def testBreedingMaximum(self): self.assertEqual(5, self.redPlayer.getPersonCount()) self.redPlayer.person = 10 self.redPlayer.addResources([Resource.foodtrack]) self.assertEqual(10, self.redPlayer.getPersonCount()) def testPlaceOnBreedingHut(self): self.assertEqual(5, self.redPlayer.personsLeft(self.board)) self.board.placeOnBreedingHut(self.redPlayer) self.assertEqual(3, self.redPlayer.personsLeft(self.board)) def testTools(self): self.assertEqual([0, 0, 0], self.redPlayer.getTools()) self.redPlayer.addResources([Resource.tool]) self.assertEqual([1, 0, 0], self.redPlayer.getTools()) def testToolsToUseWith_100(self): self.redPlayer.toolbox.upgrade() resource = Resource.wood eyes = 5 self.assertEqual(1, self.redPlayer.toolsToUse(resource, eyes)) resource = Resource.wood eyes = 4 self.assertEqual(0, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_110(self): self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() resource = Resource.wood eyes = 4 self.assertEqual(2, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_111(self): self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() resource = Resource.wood eyes = 4 self.assertEqual(2, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_221_rv4(self): self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() resource = Resource.clay eyes = 1 self.assertEqual(3, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_221(self): self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() resource = Resource.wood eyes = 5 self.assertEqual(4, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_222(self): self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() resource = Resource.gold eyes = 3 self.assertEqual(4, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_444(self): for index in range(1,13): self.redPlayer.toolbox.upgrade() resource = Resource.wood eyes = 4 self.assertEqual(12, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_322(self): self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() self.redPlayer.toolbox.upgrade() resource = Resource.gold eyes = 3 self.assertEqual(3, self.redPlayer.toolsToUse(resource, eyes)) def testToolsToUseWith_000_OneTimeTool_2(self): self.redPlayer.addOneTimeTool(2) self.assertTrue(len(self.redPlayer.oneTimeTools) == 1) resource = Resource.wood eyes = 4 self.assertEqual(2, self.redPlayer.toolsToUse(resource, eyes)) self.assertTrue(len(self.redPlayer.oneTimeTools) == 0) def testToolsToUseWith_000_OneTimeTool_3_notUsed(self): self.redPlayer.addOneTimeTool(3) self.assertTrue(len(self.redPlayer.oneTimeTools) == 1) resource = Resource.wood eyes = 4 self.assertEqual(0, self.redPlayer.toolsToUse(resource, eyes)) self.assertTrue(len(self.redPlayer.oneTimeTools) == 1) def testToolsToUseWith_000_OneTimeTool_3_Used(self): self.redPlayer.addOneTimeTool(3) self.assertTrue(len(self.redPlayer.oneTimeTools) == 1) resource = Resource.clay eyes = 5 self.assertEqual(3, self.redPlayer.toolsToUse(resource, eyes)) self.assertTrue(len(self.redPlayer.oneTimeTools) == 0) def testReapingOrder(self): self.assertEqual("g", self.redPlayer.chooseReapingResource("fsg")) self.assertEqual("s", self.redPlayer.chooseReapingResource("fs")) self.assertEqual("s", self.redPlayer.chooseReapingResource("fwcs")) self.assertEqual("c", self.redPlayer.chooseReapingResource("fwc")) def testChooseChristmas(self): self.assertEqual(0, self.redPlayer.getFoodTrack()) self.assertListEqual([Resource.wood, Resource.clay, Resource.tool], self.redPlayer.chooseChristmas([Resource.wood, Resource.clay, Resource.tool, Resource.foodtrack])) self.assertEqual(1, self.redPlayer.getFoodTrack()) self.assertEqual([0,0,0], self.redPlayer.getTools()) self.assertListEqual([Resource.wood, Resource.clay], self.redPlayer.chooseChristmas([Resource.wood, Resource.clay, Resource.tool])) self.assertEqual([1,0,0], self.redPlayer.getTools()) self.assertEqual([], self.redPlayer.getNonFood()) self.assertListEqual([Resource.wood], self.redPlayer.chooseChristmas([Resource.wood, Resource.clay])) self.assertEqual([Resource.clay], self.redPlayer.getNonFood()) def testBuyingCard(self): someSimpleHut = SimpleHut(Resource.wood, Resource.wood, Resource.clay) self.board = Board([someSimpleHut, someSimpleHut, someSimpleHut, someSimpleHut]) self.redPlayer.addResources([Resource.wood, Resource.wood]) self.assertEqual(0, len(self.redPlayer.cards)) # occupying the village with blue player self.board.placeOnFarm(self.bluePlayer) self.assertEqual(1, self.board.person(self.bluePlayer)) self.assertTrue(self.board.farmOccupied()) self.board.placeOnToolSmith(self.bluePlayer) self.assertEqual(2, self.board.person(self.bluePlayer)) self.assertTrue(self.board.toolSmithOccupied()) self.board.placeOnBreedingHut(self.bluePlayer) self.assertEqual(4, self.board.person(self.bluePlayer)) self.assertTrue(self.board.breedingHutOccupied()) self.redPlayer.placePersons(self.board) redPlayerOccupiedCards = self.board.reapResources([self.redPlayer])[1] self.assertEqual(1, len(redPlayerOccupiedCards)) boughtCards = self.redPlayer.buyCards(redPlayerOccupiedCards, [self.redPlayer], self.board.cardPile) self.assertEqual(1, len(boughtCards)) self.assertEqual(1, len(self.redPlayer.cards))
class BoardTest(unittest.TestCase): def setUp(self): self.board = Board() self.redPlayer = Player(PlayerColor.Red, StupidBot()) self.bluePlayer = Player(PlayerColor.Blue, StupidBot()) self.players = [self.redPlayer, self.bluePlayer] def testBoardInitialization(self): self.assertListEqual([7,7,7,7], self.board.numberOfHutsLeft()) self.assertEqual(36, self.board.numberOfCardsLeft()) def testAvailableHuts(self): ahs = self.board.availableHuts() self.assertEqual(4, len(ahs)) self.assertIsInstance(ahs[0], Hut) def testPlaceOnHut(self): ahs = self.board.availableHuts() targetHut = ahs[0] self.board.placeOnHutIndex(0, self.redPlayer) ahs = self.board.availableHuts() self.assertEqual(3, len(ahs), "should only be 3 huts left") self.assertNotIn(targetHut, ahs, "hut should not be available") def testPersonCountAfterPlacingOnHut(self): self.assertEqual(0, self.board.person(self.redPlayer)) self.assertEqual(0, self.board.personsOnHuts(self.redPlayer)) self.board.placeOnHutIndex(0, self.redPlayer) self.assertEqual(1, self.board.person(self.redPlayer)) self.assertEqual(1, self.board.personsOnHuts(self.redPlayer)) self.assertEqual(0, self.board.person(self.bluePlayer)) self.assertEqual(0, self.board.personsOnHuts(self.bluePlayer)) self.board.placeOnHutIndex(1, self.bluePlayer) self.assertEqual(1, self.board.person(self.bluePlayer)) self.assertEqual(1, self.board.personsOnHuts(self.bluePlayer)) def testPlacePersonsWithoutResources(self): self.assertEqual(0, self.board.person(self.redPlayer)) self.board.addHunters(2, self.redPlayer) self.board.addLumberjacks(2, self.redPlayer) self.assertEqual(4, self.board.person(self.redPlayer)) self.board.addClayDiggers(1, self.redPlayer) self.assertEqual(5, self.board.person(self.redPlayer)) def testIllegalPlacement(self): self.board.addStoneDiggers(2, self.redPlayer) self.assertEqual(2, self.board.person(self.redPlayer)) from Board import PlacementError with self.assertRaises(PlacementError): self.board.addStoneDiggers(1, self.redPlayer) self.assertEqual(2, self.board.person(self.redPlayer)) def testIsFinished(self): self.board = Board([SimpleHut(Resource.wood,Resource.wood,Resource.clay), SimpleHut(Resource.wood,Resource.wood,Resource.clay), SimpleHut(Resource.wood,Resource.wood,Resource.clay), SimpleHut(Resource.wood,Resource.wood,Resource.clay)]) self.assertFalse(self.board.isFinished()) self.board = Board([SimpleHut(Resource.wood,Resource.wood,Resource.clay), SimpleHut(Resource.wood,Resource.wood,Resource.clay), SimpleHut(Resource.wood,Resource.wood,Resource.clay)]) self.assertTrue(self.board.isFinished()) def testReapResources(self): hutForRed = SimpleHut(Resource.wood, Resource.wood, Resource.clay) hutForBlue = SimpleHut(Resource.wood, Resource.clay, Resource.clay) self.board = Board([hutForRed, hutForBlue, SimpleHut(Resource.wood,Resource.clay,Resource.stone), SimpleHut(Resource.clay,Resource.stone,Resource.gold)]) self.board.placeOnHut(hutForRed, self.redPlayer) self.board.placeOnHut(hutForBlue, self.bluePlayer) huts, cards = self.board.reapResources(self.players) self.assertEqual(1, len(huts)) self.assertEqual([hutForRed], huts) self.players.reverse() huts, cards = self.board.reapResources(self.players) self.assertEqual([hutForBlue], huts) def testBuyingFirstCard(self): firstCards = self.board.cardPile[:4] nextCards = self.board.cardPile[4:8] self.assertListEqual(firstCards, self.board.openCards()) # buy the cheapest card self.board.removeCards([firstCards[0]]) self.assertListEqual(firstCards[1:] + nextCards[:1], self.board.openCards()) def testBuyingFirstAndThirdCard(self): firstCards = self.board.cardPile[:4] nextCards = self.board.cardPile[4:8] # buy the cheapest card self.board.removeCards([firstCards[0], firstCards[2]]) self.assertListEqual([firstCards[1], firstCards[3]] + nextCards[:2], self.board.openCards()) def testReapResourcesWithFarm(self): self.board.placeOnFarm(self.redPlayer) self.board.addClayDiggers(4, self.redPlayer) huts = self.board.reapResources(self.players) self.assertEqual(1, self.redPlayer.getFoodTrack())