def test_Thief_3_players(self): tu.print_test_header("test Thief 3 players") thief_card = base.Thief(self.game, self.player1) self.player1.hand.add(thief_card) player2gold = supply_cards.Gold(self.game, self.player2) player3copper = supply_cards.Copper(self.game, self.player3) self.player2.deck = [ supply_cards.Estate(self.game, self.player2), player2gold ] self.player3.deck = [ player3copper, supply_cards.Estate(self.game, self.player3) ] select_gain_gold_future = gen.Future() select_gain_copper_future = gen.Future() gain_future = gen.Future() self.player1.select = unittest.mock.MagicMock( side_effect=[select_gain_gold_future, select_gain_copper_future]) self.player1.gain = unittest.mock.Mock(return_value=gain_future) thief_card.play() self.assertTrue(player2gold in self.game.trash_pile) select_gain_gold_future.set_result(["Yes"]) yield gen.moment self.player1.gain.assert_called_with("Gold", False) gain_future.set_result("finish gaining gold") yield gen.moment self.assertTrue(player3copper in self.game.trash_pile) select_gain_copper_future.set_result(["Yes"]) yield gen.moment self.player1.gain.assert_called_with("Copper", False)
def test_Mandarin(self): tu.print_test_header("test Mandarin") tu.add_many_to_hand(self.player1, supply_cards.Silver(self.game, self.player1), 3) tu.add_many_to_hand(self.player1, supply_cards.Gold(self.game, self.player1), 2) tu.send_input(self.player1, "play", "Gold") tu.send_input(self.player1, "play", "Silver") tu.send_input(self.player1, "play", "Silver") yield tu.send_input(self.player1, "buyCard", "Mandarin") self.assertTrue(self.player1.last_mode["mode"] == "select") yield tu.send_input(self.player1, "post_selection", ["Silver", "Silver", "Gold"]) self.assertTrue(len(self.player1.played_cards) == 0) self.assertTrue(self.player1.deck[-1].title == "Gold") self.assertTrue(self.player1.deck[-2].title == "Silver") self.assertTrue(self.player1.deck[-3].title == "Silver") self.player1.end_turn() self.player2.hand.add(hl.Mandarin(self.game, self.player2)) self.player2.hand.add(supply_cards.Silver(self.game, self.player2)) tu.send_input(self.player2, "play", "Mandarin") self.assertTrue(self.player2.balance == 3) self.assertTrue(self.player2.last_mode["mode"] == "select") yield tu.send_input(self.player2, "post_selection", ["Copper"]) self.assertTrue(self.player2.deck[-1].title == "Copper") self.assertTrue(len(self.player2.hand) == 5)
def test_Forge(self): tu.print_test_header("test Forge") forge = prosperity.Forge(self.game, self.player1) steward = intrigue.Steward(self.game, self.player1) minion = intrigue.Minion(self.game, self.player1) torturer = intrigue.Torturer(self.game, self.player1) secret_chamber = intrigue.Secret_Chamber(self.game, self.player1) gold = supply_cards.Gold(self.game, self.player1) self.player1.hand.add(steward) self.player1.hand.add(minion) self.player1.hand.add(torturer) self.player1.hand.add(secret_chamber) self.player1.hand.add(gold) forge.play() # trash prices total to 8 yield tu.send_input(self.player1, "post_selection", ["Steward", "Copper", "Copper", "Minion"]) self.assertTrue(len(self.game.trash_pile) == 4) yield tu.send_input(self.player1, "selectSupply", ["Province"]) self.assertTrue(self.player1.discard_pile[0].title == "Province") forge.play() # trash prices total to 13 -- nothing to gain yield tu.send_input(self.player1, "post_selection", ["Torturer", "Secret Chamber", "Gold"]) self.assertTrue(self.player1.cb is None)
def test_Adventurer_empty_deck(self): tu.print_test_header("test Adventurer") estate = supply_cards.Estate(self.game, self.player1) gold = supply_cards.Gold(self.game, self.player1) adventurer = base.Adventurer(self.game, self.player1) self.player1.deck = [] self.player1.discard_pile = [gold] self.player1.hand.add(adventurer) adventurer.play() self.assertTrue(self.player1.hand.get_count("Gold") == 1) self.assertTrue(len(self.player1.deck) == 0) self.assertTrue(len(self.player1.discard_pile) == 0)
def test_Thief_1_treasure(self): tu.print_test_header("test Thief on 1 treasure") thief_card = base.Thief(self.game, self.player1) self.player1.hand.add(thief_card) self.player2.deck.append(supply_cards.Estate(self.game, self.player2)) self.player2.deck.append(supply_cards.Gold(self.game, self.player2)) select_gain_future = gen.Future() self.player1.select = unittest.mock.MagicMock( return_value=select_gain_future) self.player1.gain = unittest.mock.Mock(return_value=gen.Future()) thief_card.play() self.assertTrue(self.game.trash_pile[-1].title == "Gold") select_gain_future.set_result(["Yes"]) yield gen.moment self.player1.gain.assert_called_with("Gold", False)
def __init__(self, players, required_cards, excluded_cards, req_supply="default", test=False): Game.__init__(self, players, req_supply) if not test: self.logger = logHandler.LogHandler(", ".join(map(lambda x: x.name, self.players)) + " " + time.ctime(time.time())) else: self.logger = logHandler.TestLogHandler() # randomize turn order random.shuffle(self.players) self.trash_pile = [] self.empty_piles = 0 self.mat = {} if req_supply == "default": rand = random.randint(1, 10) if rand < 2: req_supply = "prosperity" # kingdom = dictionary {card.title => [card, count]} i.e {"Copper": [card.Copper(self,None),10]} base_supply = [supply_cards.Curse(self, None), supply_cards.Estate(self, None), supply_cards.Duchy(self, None), supply_cards.Province(self, None), supply_cards.Copper(self, None), supply_cards.Silver(self, None), supply_cards.Gold(self, None)] if req_supply == "prosperity": base_supply.append(supply_cards.Colony(self, None)) base_supply.append(supply_cards.Platinum(self, None)) self.base_supply = self.init_supply(base_supply) generator = kg.kingdomGenerator(self, required_cards, excluded_cards) if not test: self.kingdom = self.init_supply(generator.gen_kingdom()) else: self.kingdom = self.init_supply(generator.every_card_kingdom()) self.supply = cp.CardPile() self.supply.combine(self.base_supply) self.supply.combine(self.kingdom) for x in self.kingdom.unique_cards(): x.on_supply_init() #dictionary of card title => price modifier for that card self.price_modifier = {} for x in self.supply.unique_cards(): self.price_modifier[x.title] = 0 #record of game announcements for public viewing / archiving self.game_log = []
def test_Cartographer(self): tu.print_test_header("test Cartographer") cart = hl.Cartographer(self.game, self.player1) village = base.Village(self.game, self.player1) silver = supply_cards.Silver(self.game, self.player1) self.player1.deck += [village, silver, village, village] #draw the gold with cartographer self.player1.deck.append(supply_cards.Gold(self.game, self.player1)) self.player1.hand.add(cart) cart.play() self.assertTrue(self.player1.last_mode["mode"] == "select") self.assertTrue(self.player1.last_mode["max_cards"] == 4) yield tu.send_input(self.player1, "post_selection", ["Village", "Village"]) self.assertTrue(self.player1.discard_pile[-1].title == "Village") self.assertTrue(self.player1.discard_pile[-2].title == "Village") self.assertTrue(self.player1.last_mode["mode"] == "select") self.assertTrue(self.player1.last_mode["max_cards"] == 2) yield tu.send_input(self.player1, "post_selection", ["Silver", "Village"]) self.assertTrue(self.player1.deck[-1].title == "Village") self.assertTrue(self.player1.deck[-2].title == "Silver")