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_Spice_Merchant(self): tu.print_test_header("test Spice Merchant") spice_merchant1 = hl.Spice_Merchant(self.game, self.player1) spice_merchant2 = hl.Spice_Merchant(self.game, self.player1) copper = supply_cards.Copper(self.game, self.player1) silver = supply_cards.Silver(self.game, self.player1) self.player1.hand.add(spice_merchant1) self.player1.hand.add(spice_merchant2) self.player1.deck = [silver] * 5 self.player1.hand.add(copper) yield tu.send_input(self.player1, "play", "Spice Merchant") yield tu.send_input(self.player1, "post_selection", ["Copper"]) yield tu.send_input(self.player1, "post_selection", ["+2 cards +1 action"]) self.assertTrue(copper in self.game.trash_pile) self.assertTrue( len(self.player1.hand.card_array()) == 8 ) # We started with 5 cards and then added 2 SMs and a copper (8 cards), then put one in yield tu.send_input( self.player1, "play", "Spice Merchant" ) # play and trashed the copper, then drew 2 brining us back to 8 yield tu.send_input(self.player1, "post_selection", ["Copper"]) yield tu.send_input(self.player1, "post_selection", ["+$2 +1 buy"]) self.assertTrue(len(self.game.trash_pile) == 2) self.assertTrue(self.player1.buys == 2) self.assertTrue(self.player1.balance == 2)
def test_Mint_Select_None(self): tu.print_test_header("test Mint with select none") mint = prosperity.Mint(self.game, self.player1) silver = supply_cards.Silver(self.game, self.player1) self.player1.hand.add(mint) self.player1.hand.add(silver) starting_hand = self.player1.hand.card_array() mint.play() yield tu.send_input(self.player1, "post_selection", []) new_hand = self.player1.hand.card_array() self.assertTrue(not self.player1.discard_pile) self.assertTrue( ((set(starting_hand) - set(new_hand)).pop().title == "Mint"))
def test_Mint(self): tu.print_test_header("test Mint") mint = prosperity.Mint(self.game, self.player1) silver = supply_cards.Silver(self.game, self.player1) self.player1.hand.add(mint) self.player1.hand.add(silver) mint.play() yield tu.send_input(self.player1, "post_selection", ["Silver"]) self.assertTrue(self.player1.discard_pile[0].title == "Silver") num_money = len(self.player1.hand.get_cards_by_type("Treasure")) self.player1.spend_all_money() self.player1.buy_card('Mint') self.assertTrue(len(self.game.trash_pile) >= num_money)
def test_Wishing_Well(self): tu.print_test_header("test Wishing Well") wishing_well = intrigue.Wishing_Well(self.game, self.player1) tu.add_many_to_hand(self.player1, wishing_well, 2) province = supply_cards.Province(self.game, self.player1) self.player1.deck.append(province) self.player1.deck.append(supply_cards.Silver(self.game, self.player1)) self.player1.deck.append(province) wishing_well.play() yield tu.send_input(self.player1, "selectSupply", ["Curse"]) self.assertTrue(self.player1.hand.get_count('Province') == 1) wishing_well.play() yield tu.send_input(self.player1, "selectSupply", ["Province"]) self.assertTrue(self.player1.hand.get_count('Province') == 2)
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_Upgrade_Selection_issue_21(self): tu.print_test_header("test Upgrade selection issue 21") upgrade = intrigue.Upgrade(self.game, self.player1) throne_room = base.Throne_Room(self.game, self.player1) self.player1.deck.append(supply_cards.Estate(self.game, self.player1)) self.player1.deck.append(supply_cards.Silver(self.game, self.player1)) self.player1.hand.add(upgrade) self.player1.hand.add(throne_room) throne_room.play() yield tu.send_input(self.player1, "post_selection", ["Upgrade"]) yield tu.send_input(self.player1, "post_selection", ["Silver"]) yield tu.send_input(self.player1, "selectSupply", ["Coppersmith"]) self.assertTrue(self.player1.discard_pile[-1].title == "Coppersmith") yield gen.moment yield tu.send_input(self.player1, "post_selection", ["Estate"]) yield tu.send_input(self.player1, "selectSupply", ["Silver"]) self.assertTrue(self.player1.discard_pile[-1].title == "Silver")
def test_Noble_Brigand(self): tu.print_test_header("test Noble Brigand") silver = supply_cards.Silver(self.game, self.player2) estate = supply_cards.Estate(self.game, self.player3) self.player2.deck.append(silver) self.player3.deck += [estate, estate] nb = hl.Noble_Brigand(self.game, self.player1) deck2size = len(self.player2.deck) deck3size = len(self.player3.deck) nb.play() yield tu.send_input(self.player1, "post_selection", ["Silver"]) self.assertTrue(self.player1.discard_pile[-1].title == "Silver") self.assertTrue(len(self.player2.discard_pile) == 1) self.assertTrue(len(self.player2.deck) == deck2size - 2) self.assertTrue(self.player2.deck[-1].title != "Silver") self.assertTrue(len(self.player3.deck) == deck3size - 2) self.assertTrue(len(self.player3.discard_pile) == 3) self.assertTrue(self.player3.discard_pile[-1].title == "Copper")
def test_Venture(self): tu.print_test_header("test Venture") venture = prosperity.Venture(self.game, self.player1) estate = supply_cards.Estate(self.game, self.player1) loan = prosperity.Loan(self.game, self.player1) silver = supply_cards.Silver(self.game, self.player1) self.player1.deck += [loan, estate, estate, silver, estate] venture.play() self.assertTrue(len(self.player1.discard_pile) == 1) self.assertTrue(self.player1.balance == 3) venture.play() # self.assertTrue(len(self.player1.discard_pile) == 4) self.assertTrue(self.player1.balance == 5) self.assertTrue(silver in self.player1.all_cards())
def test_Thief_2_treasures(self): tu.print_test_header("test Thief on 2 treasures") thief_card = base.Thief(self.game, self.player1) self.player1.hand.add(thief_card) self.player2.deck.append(supply_cards.Copper(self.game, self.player2)) self.player2.deck.append(supply_cards.Silver(self.game, self.player2)) select_trash_future = gen.Future() select_gain_future = gen.Future() self.player1.select = unittest.mock.MagicMock( side_effect=[select_trash_future, select_gain_future]) self.player1.gain = unittest.mock.Mock(return_value=gen.Future()) thief_card.play() self.player1.select.assert_called_with(1, 1, ["Silver", "Copper"], unittest.mock.ANY) select_trash_future.set_result(["Silver"]) yield gen.moment self.assertTrue(self.game.trash_pile[-1].title == "Silver") select_gain_future.set_result(["Yes"]) yield gen.moment self.player1.gain.assert_called_with("Silver", False)
def test_Scout(self): tu.print_test_header("test Scout") scout = intrigue.Scout(self.game, self.player1) scout2 = intrigue.Scout(self.game, self.player1) province = supply_cards.Province(self.game, self.player1) greathall = intrigue.Great_Hall(self.game, self.player1) silver = supply_cards.Silver(self.game, self.player1) self.player1.hand.add(scout) self.player1.deck.append(province) self.player1.deck.append(greathall) self.player1.deck.append(scout2) self.player1.deck.append(silver) decklength = len(self.player1.deck) scout.play() self.assertTrue(greathall.title in self.player1.hand) self.assertTrue(province.title in self.player1.hand) self.assertFalse(silver.title in self.player1.hand) self.assertFalse(scout2.title in self.player1.hand) yield tu.send_input(self.player1, "post_selection", ["Scout", "Silver"]) self.assertTrue(self.player1.deck[-1].title == "Silver") self.assertTrue(self.player1.deck[-2].title == "Scout") #decksize should be 2 less since we took province and great hall out self.assertTrue(len(self.player1.deck) == decklength - 2)
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")
def test_2_reaction_waits(self): tu.print_test_header("test 2 reaction waits") militia = base.Militia(self.game, self.player1) moat = base.Moat(self.game, self.player2) secret_chamber = intrigue.Secret_Chamber(self.game, self.player2) self.player2.hand.add(moat) self.player2.hand.add(secret_chamber) self.player2.deck.append(supply_cards.Estate(self.game, self.player2)) self.player2.deck.append(supply_cards.Estate(self.game, self.player2)) moat3 = base.Moat(self.game, self.player3) secret_chamber3 = intrigue.Secret_Chamber(self.game, self.player3) silver = supply_cards.Silver(self.game, self.player3) tu.set_player_hand(self.player3, [silver, silver, silver, moat3, secret_chamber3]) militia.play() self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 2 choose order, moat then secret chamber yield tu.send_input(self.player2, "post_selection", ["Secret Chamber", "Moat"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 2 reveals moat yield tu.send_input(self.player2, "post_selection", ["Reveal"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 3 chooses same order, moat then secret chamber yield tu.send_input(self.player3, "post_selection", ["Secret Chamber", "Moat"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 2 reveals secret chamber yield tu.send_input(self.player2, "post_selection", ["Reveal"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 2 draws 2 estates, puts back 1 and a copper yield tu.send_input(self.player2, "post_selection", ["Estate", "Copper"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 3 reveals moat yield tu.send_input(self.player3, "post_selection", ["Reveal"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 3 hides secret chamber yield tu.send_input(self.player3, "post_selection", ["Hide"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 2 drew cards so is reprompted and chooses order again yield tu.send_input(self.player2, "post_selection", ["Secret Chamber", "Moat"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 2 hides moat yield tu.send_input(self.player2, "post_selection", ["Hide"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] != "wait") self.assertTrue(self.player3.last_mode["mode"] != "wait") #player 2 hides secret chamber yield tu.send_input(self.player2, "post_selection", ["Hide"]) yield gen.sleep(.1) self.assertTrue(self.player1.last_mode["mode"] != "wait")
def test_2_Reactions(self): tu.print_test_header("test 2 reaction secret chamber moat") militia = base.Militia(self.game, self.player1) moat = base.Moat(self.game, self.player2) secret_chamber = intrigue.Secret_Chamber(self.game, self.player2) estate = supply_cards.Estate(self.game, self.player2) self.player2.hand.add(moat) self.player2.hand.add(secret_chamber) self.player2.deck.append(estate) self.player2.deck.append(estate) moat3 = base.Moat(self.game, self.player3) secret_chamber3 = intrigue.Secret_Chamber(self.game, self.player3) silver = supply_cards.Silver(self.game, self.player3) tu.set_player_hand(self.player3, [silver, silver, silver, moat3, secret_chamber3]) militia.play() self.assertTrue(self.player1.last_mode["mode"] == "wait") self.assertTrue(self.player2.last_mode["mode"] == "select") self.assertTrue( "Secret Chamber" in self.player2.last_mode["select_from"]) self.assertTrue("Moat" in self.player2.last_mode["select_from"]) yield tu.send_input(self.player2, "post_selection", ["Secret Chamber", "Moat"]) #moat trigger first self.assertTrue("Moat" in self.player2.last_mode["msg"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") #while player2 is deciding to reveal moat or not, #player3 chose order Secret chamber first self.assertTrue(self.player3.last_mode["mode"] == "select") yield tu.send_input(self.player3, "post_selection", ["Moat", "Secret Chamber"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") #player3 reveals secret chamber self.assertTrue("Secret Chamber" in self.player3.last_mode["msg"]) yield tu.send_input(self.player3, "post_selection", ["Reveal"]) #player3 chooses to put back secret chamber and moat in secret chamber reaction yield tu.send_input(self.player3, "post_selection", ["Secret Chamber", "Moat"]) self.assertTrue(self.player3.deck[-1].title == "Moat") self.assertTrue(self.player3.deck[-2].title == "Secret Chamber") self.assertTrue(self.player1.last_mode["mode"] == "wait") #player2 reveals moat self.assertTrue(self.player2.last_mode["mode"] == "select") yield tu.send_input(self.player2, "post_selection", ["Reveal"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") #player2 reveals secret chamber yield tu.send_input(self.player2, "post_selection", ["Reveal"]) #player2 puts back Estate, moat self.assertTrue(self.player2.protection == 1) self.assertTrue(self.player1.last_mode["mode"] == "wait") yield tu.send_input(self.player2, "post_selection", ["Moat", "Estate"]) self.assertTrue(self.player2.deck[-1].title == "Estate") self.assertTrue(self.player2.deck[-2].title == "Moat") #workaround to allow ioloop to process nested yields in time yield gen.sleep(.2) self.assertTrue(self.player1.last_mode["mode"] == "wait") #player3 discards 2 silver yield tu.send_input(self.player3, "post_selection", ["Silver", "Silver"]) self.assertTrue(len(self.player3.hand) == 3) #player1 resumes self.assertTrue(self.player1.last_mode["mode"] == "buy")