Exemple #1
0
    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)
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
    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)
Exemple #5
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)
Exemple #6
0
	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 = []
Exemple #7
0
    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")