Ejemplo n.º 1
0
    def test_SavageRoar(self):
        deck1 = StackedDeck([StonetuskBoar(), StonetuskBoar(), SavageRoar()], CHARACTER_CLASS.DRUID)
        deck2 = StackedDeck([StonetuskBoar()], CHARACTER_CLASS.MAGE)
        game = Game([deck1, deck2], [OneCardPlayingAgent(), OneCardPlayingAgent()])

        game.current_player = 1
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()

        minion_increase_mock = mock.Mock()

        game.other_player.minions[0].bind("attack_changed", minion_increase_mock)
        game.other_player.minions[1].bind("attack_changed", minion_increase_mock)

        player_increase_mock = mock.Mock()

        game.other_player.hero.bind("attack_changed", player_increase_mock)

        game.play_single_turn()

        self.assertEqual(0, game.current_player.mana)

        # Make sure the attack got increased
        self.assertListEqual([mock.call(2), mock.call(2)], minion_increase_mock.call_args_list)
        self.assertListEqual([mock.call(2)], player_increase_mock.call_args_list)

        # And make sure that it went down again
        self.assertEqual(1, game.current_player.minions[0].calculate_attack())
        self.assertEqual(1, game.current_player.minions[1].calculate_attack())
        self.assertEqual(0, game.current_player.hero.calculate_attack())
Ejemplo n.º 2
0
    def test_create_game(self):
        card_set1 = []
        card_set2 = []
        test_env = self

        for cardIndex in range(0, 30):
            card_set1.append(card_lookup("Stonetusk Boar"))
            card_set2.append(card_lookup("Novice Engineer"))

        deck1 = Deck(card_set1, Malfurion())
        deck2 = Deck(card_set2, Jaina())
        checked_cards = []

        class MockAgent1:
            def do_card_check(self, cards):
                test_env.assertEqual(len(cards), 3)
                checked_cards.append(list(cards))
                return [False, True, True]

            def set_game(self, game):
                pass

        class MockAgent2:
            def do_card_check(self, cards):
                test_env.assertEqual(len(cards), 4)
                checked_cards.append(list(cards))
                return [False, True, True, False]

            def set_game(self, game):
                pass

        agent1 = mock.Mock(spec=MockAgent1(), wraps=MockAgent1())
        agent2 = mock.Mock(spec=MockAgent2(), wraps=MockAgent2())
        game = Game([deck1, deck2], [agent1, agent2])
        game.pre_game()

        self.assertEqual(agent1.method_calls[0][0], "do_card_check",
                         "Agent not asked to select cards")
        self.assertEqual(agent2.method_calls[0][0], "do_card_check",
                         "Agent not asked to select cards")

        self.assertTrue(game.players[0].deck == deck1,
                        "Deck not assigned to player")
        self.assertTrue(game.players[1].deck == deck2,
                        "Deck not assigned to player")

        self.assertTrue(game.players[0].agent == agent1,
                        "Agent not stored in the hearthbreaker")
        self.assertTrue(game.players[1].agent == agent2,
                        "Agent not stored in the hearthbreaker")

        self.assertListEqual(checked_cards[0][1:], game.players[0].hand[1:],
                             "Cards not retained after request")
        self.assertListEqual(checked_cards[1][1:2], game.players[1].hand[1:2],
                             "Cards not retained after request")
Ejemplo n.º 3
0
 def test_bind_once(self):
     event = mock.Mock()
     event2 = mock.Mock()
     binder = Bindable()
     binder.bind_once("test", event)
     binder.bind("test", event2)
     binder.trigger("test", 1, 5, 6)
     event.assert_called_once_with(1, 5, 6)
     event2.assert_called_once_with(1, 5, 6)
     binder.trigger("test")
     event.assert_called_once_with(1, 5, 6)
     self.assertEqual(event2.call_count, 2)
Ejemplo n.º 4
0
    def test_first_turn(self):
        card_set1 = []
        card_set2 = []

        for cardIndex in range(0, 30):
            card_set1.append(card_lookup("Stonetusk Boar"))
            card_set2.append(card_lookup("Novice Engineer"))

        deck1 = Deck(card_set1, Malfurion())
        deck2 = Deck(card_set2, Jaina())

        agent1 = mock.Mock(spec=DoNothingAgent(), wraps=DoNothingAgent())
        agent2 = mock.Mock(spec=DoNothingAgent(), wraps=DoNothingAgent())
        game = Game([deck1, deck2], [agent1, agent2])

        game.start()
Ejemplo n.º 5
0
    def test_FreezingTrap_many_cards(self):
        class FreezingTrapAgent(DoNothingBot):
            def do_turn(self, player):
                if player.mana == 6:
                    game.play_card(player.hand[0])
                if player.mana == 7:
                    player.minions[0].attack()

        game = generate_game_for(FreezingTrap, BoulderfistOgre,
                                 SpellTestingAgent, FreezingTrapAgent)

        for turn in range(0, 12):
            game.play_single_turn()

        self.assertEqual(1, len(game.current_player.minions))
        death_mock = mock.Mock()
        game.players[1].minions[0].bind_once("died", death_mock)

        game.play_single_turn()
        game.play_single_turn()

        self.assertEqual(10, len(game.current_player.hand))
        self.assertEqual(0, len(game.current_player.minions))
        for card in game.current_player.hand:
            if card.name != "The Coin":
                self.assertEqual(6, card.mana_cost(game.current_player))
        self.assertEqual(30, game.other_player.hero.health)
        death_mock.assert_called_once_with(None)
Ejemplo n.º 6
0
    def test_first_turn(self):
        card_set1 = []
        card_set2 = []

        for cardIndex in range(0, 30):
            card_set1.append(card_lookup("Stonetusk Boar"))
            card_set2.append(card_lookup("Novice Engineer"))

        deck1 = Deck(card_set1, CHARACTER_CLASS.DRUID)
        deck2 = Deck(card_set2, CHARACTER_CLASS.MAGE)

        agent1 = mock.Mock(spec=DoNothingBot(), wraps=DoNothingBot())
        agent2 = mock.Mock(spec=DoNothingBot(), wraps=DoNothingBot())
        game = Game([deck1, deck2], [agent1, agent2])

        game.start()
Ejemplo n.º 7
0
 def test_bind(self):
     event = mock.Mock()
     binder = Bindable()
     binder.bind("test", event)
     binder.trigger("test", 1, 5, 6)
     event.assert_called_once_with(1, 5, 6)
     binder.unbind("test", event)
     binder.trigger("test")
     event.assert_called_once_with(1, 5, 6)
Ejemplo n.º 8
0
    def test_PowerOfTheWild(self):
        deck1 = StackedDeck(
            [StonetuskBoar(),
             StonetuskBoar(),
             PowerOfTheWild()], CHARACTER_CLASS.DRUID)
        deck2 = StackedDeck([StonetuskBoar()], CHARACTER_CLASS.MAGE)

        # This is a test of the +1/+1 option of the Power Of the Wild Card
        game = Game([deck1, deck2],
                    [OneCardPlayingAgent(),
                     OneCardPlayingAgent()])
        game.current_player = game.players[1]

        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        self.assertEqual(2, game.current_player.minions[0].calculate_attack())
        self.assertEqual(2, game.current_player.minions[0].health)
        self.assertEqual(2,
                         game.current_player.minions[0].calculate_max_health())
        self.assertEqual(2, game.current_player.minions[1].calculate_attack())
        self.assertEqual(2,
                         game.current_player.minions[1].calculate_max_health())

        # This is a test of the "Summon Panther" option of the Power of the Wild Card

        agent = OneCardPlayingAgent()
        agent.choose_option = mock.Mock(
            side_effect=lambda *options: options[1])

        deck1 = StackedDeck(
            [StonetuskBoar(),
             StonetuskBoar(),
             PowerOfTheWild()], CHARACTER_CLASS.DRUID)
        deck2 = StackedDeck([StonetuskBoar()], CHARACTER_CLASS.MAGE)
        game = Game([deck1, deck2], [agent, OneCardPlayingAgent()])
        game.current_player = game.players[1]

        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()

        self.assertEqual(
            "Panther", game.current_player.minions[2].card.__class__.__name__)
        self.assertEqual(3, game.current_player.minions[2].calculate_attack())
        self.assertEqual(2,
                         game.current_player.minions[2].calculate_max_health())
Ejemplo n.º 9
0
    def test_WildGrowth(self):
        game = generate_game_for(WildGrowth, StonetuskBoar, SelfSpellTestingAgent, DoNothingAgent)
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        self.assertEqual(3, game.current_player.max_mana)

        # Make sure that the case where the player is at 10 mana works as well.
        for turn in range(0, 5):
            game.play_single_turn()

        self.assertEqual(10, game.other_player.max_mana)
        card_draw_mock = mock.Mock(side_effect=game.other_player.draw)
        game.other_player.draw = card_draw_mock
        game.play_single_turn()
        # Each time the player draws, they will draw another wild growth, which will turn into excess mana,
        # which will draw another card.  However, because of the ordering of the cards, the last excess mana
        # will be after a wild growth, which prevents SpellTestingAgent from playing the card, so only
        # 5 draws are made instead of the possible 6
        self.assertEqual(5, card_draw_mock.call_count)
Ejemplo n.º 10
0
    def test_Swipe(self):
        deck1 = StackedDeck(
            [BloodfenRaptor(),
             StonetuskBoar(),
             StonetuskBoar()], CHARACTER_CLASS.DRUID)
        deck2 = StackedDeck(
            [Swipe()],
            CHARACTER_CLASS.DRUID,
        )
        game = Game([deck1, deck2],
                    [OneCardPlayingAgent(),
                     EnemyMinionSpellTestingAgent()])
        game.pre_game()
        game.current_player = game.players[1]
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        game.play_single_turn()
        spell_damage_mock = mock.Mock()
        game.current_player.minions[0].bind('damaged_by_spell',
                                            spell_damage_mock)
        game.current_player.minions[1].bind('damaged_by_spell',
                                            spell_damage_mock)
        game.current_player.minions[2].bind('damaged_by_spell',
                                            spell_damage_mock)
        swipe_card = game.other_player.hand[0]
        game.play_single_turn()

        self.assertListEqual([
            mock.call(4, swipe_card),
            mock.call(1, swipe_card),
            mock.call(1, swipe_card)
        ], spell_damage_mock.call_args_list)

        # The bloodfen raptor should be left, with one hp
        self.assertEqual(1, len(game.other_player.minions))
        self.assertEqual(1, game.other_player.minions[0].health)
        self.assertEqual(29, game.other_player.hero.health)