def test_Rabble_Moat(self): tu.print_test_header("test Rabble moat") rabble = prosperity.Rabble(self.game, self.player1) moat2 = base.Moat(self.game, self.player2) moat3 = base.Moat(self.game, self.player3) self.player1.hand.add(rabble) self.player2.hand.add(moat2) self.player3.hand.add(moat3) player2decksize = len(self.player2.deck) player3decksize = len(self.player3.deck) yield tu.send_input(self.player1, "play", "Rabble") yield tu.send_input(self.player2, "post_selection", ["Reveal"]) self.assertTrue(self.player1.last_mode["mode"] == "wait") yield tu.send_input(self.player3, "post_selection", ["Reveal"]) yield gen.sleep(.2) self.assertTrue(self.player1.last_mode["mode"] != "wait") self.assertTrue(player2decksize == len(self.player2.deck)) self.assertTrue(player3decksize == len(self.player3.deck))
def test_block_sea_hag_3p(self): tu.print_test_header("Test block sea hag 3p") sea_hag = sea.Sea_Hag(self.game, self.player2) self.player2.hand.add(sea_hag) self.player1.hand.add(base.Moat(self.game, self.player1)) self.player3.hand.add(base.Moat(self.game, self.player3)) self.player1.gain_to_deck = unittest.mock.Mock(return_value=gen.Future()) player1_select_future = gen.Future() self.player1.select = unittest.mock.Mock(return_value=player1_select_future) self.player3.gain_to_deck = unittest.mock.Mock(return_value=gen.Future()) player3_select_future = gen.Future() self.player3.select = unittest.mock.Mock(return_value=player3_select_future) yield tu.send_input(self.player2, "play", "Sea Hag") yield gen.moment player1_select_future.set_result(["Reveal"]) yield gen.sleep(.1) player3_select_future.set_result(["Reveal"]) yield gen.sleep(.1) self.assertTrue(self.player1.gain_to_deck.call_count == 0) self.assertTrue(self.player3.gain_to_deck.call_count == 0)
def test_Moat_reaction(self): tu.print_test_header("test Moat Reaction") moat = base.Moat(self.game, self.player2) self.player2.hand.add(moat) moat.react = unittest.mock.Mock(moat, wraps=moat.react) self.player2.gain = unittest.mock.Mock() reveal_future = gen.Future() reveal_mock = unittest.mock.MagicMock(return_value=reveal_future) self.player2.select = reveal_mock base.Witch(self.game, self.player1).play() self.assertTrue(moat.react.called) reveal_future.set_result(["Reveal"]) yield gen.moment self.assertTrue(self.player2.protection == 1) self.assertFalse(self.player2.gain.called) self.assertTrue(self.player2.search_and_extract_card("Curse") == None)
def test_inn_gain(self): tu.print_test_header("test Inn on gain") village = base.Village(self.game, self.player1) moat = base.Moat(self.game, self.player1) copper = supply_cards.Copper(self.game, self.player1) self.player1.discard_pile = [village, moat, copper] self.player1.gain('Inn') self.assertTrue(self.player1.last_mode["mode"] == "select") self.assertTrue("Village" in self.player1.last_mode["select_from"]) self.assertTrue("Moat" in self.player1.last_mode["select_from"]) self.assertTrue("Inn" in self.player1.last_mode["select_from"]) self.assertTrue("Copper" not in self.player1.last_mode["select_from"]) yield tu.send_input(self.player1, "post_selection", ["Village", "Moat", "Inn"]) self.assertTrue(self.player1.discard_pile == [copper]) self.assertTrue(village in self.player1.deck) self.assertTrue(moat in self.player1.deck)
def test_Minion(self): tu.print_test_header("test Minion") minion = intrigue.Minion(self.game, self.player1) self.player1.hand.add(minion) moat = base.Moat(self.game, self.player3) self.player3.hand.add(moat) #top 4 cards of player2's deck will be drawn top4 = self.player2.deck[-4:] discard_size = len(self.player2.discard_pile) minion.play() yield tu.send_input(self.player1, "post_selection", ["discard hand and draw 4 cards"]) yield tu.send_input(self.player3, "post_selection", ["Reveal"]) yield gen.sleep(.2) self.assertTrue(len(self.player1.hand) == 4) self.assertTrue(len(self.player2.hand) == 4) for x in top4: self.assertTrue(x in self.player2.hand.card_array()) self.assertTrue(discard_size + 5 == len(self.player2.discard_pile)) self.assertTrue(len(self.player3.hand) > 4)
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")