Exemple #1
0
    def get_next(self):
        assert self._current_game
        assert self.has_next

        result = {}
        cur_move = self._current_game['moves'][self._current_move]

        if self._current_table_index == self.INITIAL_CURRENT_TABLE_INDEX:
            result = self._get_new_move(cur_move)
        else:
            mr_len = len(cur_move['moves_and_responds'])
            if self._current_table_index < mr_len:
                result['card'] = (DurakCard(
                    cur_move['moves_and_responds'][self._current_table_index]))
                if self._current_table_index % 2:
                    to_move = self._get_opposite_player(cur_move['to_move'])
                    event_type = self.RESPOND
                else:
                    to_move = cur_move['to_move']
                    event_type = self.MOVE
                result['to_move'] = to_move
                result['event_type'] = event_type
            else:
                result['event_type'] = self.GIVE_MORE
                result['card'] = DurakCard(
                    cur_move['given_more'][self._current_table_index - mr_len])
                result['to_move'] = cur_move['to_move']

        self._increment()
        return result
Exemple #2
0
    def test_cards_property(self):
        cards = [DurakCard('6H'), DurakCard('7H'), DurakCard('8H')]
        card_values = [Mock(), Mock(), Mock()]

        self.panel._cards = OrderedDict(zip(cards, card_values))

        self.assertEqual(self.panel.cards, cards)
Exemple #3
0
    def test_remove_card_does_layout_if_do_layout_is_true(self):
        self.sizer._buttons_dict = {DurakCard('6H'): Mock()}

        with patch.object(self.sizer, 'Detach'):
            with patch.object(self.sizer, 'Layout') as Layout_mock:
                self.sizer.remove_card(DurakCard('6H'), do_layout=True)
                self.assertTrue(Layout_mock.called)
Exemple #4
0
 def test_card_groups_not_including_trumps(self):
     card_set = CardSet(['7H', '8S', '8C', '9C', '6H', '6C', '6D'],
                        self.trump)
     self.assertEqual(card_set.card_groups(including_trumps=False), [
         {DurakCard('6C'), DurakCard('6D')},
         {DurakCard('8S'), DurakCard('8C')},
     ])
Exemple #5
0
 def test_cards_that_can_beat_trump_including_trumps(self):
     card_set = CardSet(['7H', 'KH', 'AH', '6S', 'TS', 'QS', '8D', 'AC'],
                        self.trump)
     self.assertEqual(card_set.cards_that_can_beat('TH'), [
         DurakCard('KH'),
         DurakCard('AH'),
     ])
Exemple #6
0
    def test_pop_if_no_given_more(self):
        card_mock = Mock()
        self.panel._cards[DurakCard('6H')] = card_mock

        self.assertEqual(self.panel.pop(), DurakCard('6H'))
        self.assertDictEqual(self.panel._cards, {})
        card_mock.Destroy.assert_called()
Exemple #7
0
 def test_on_table_property(self):
     controller = GameController()
     controller._on_table = [
         DurakCard('6S'), DurakCard('6H'),
         DurakCard('8S')
     ]
     self.assertEqual(controller.on_table, controller._on_table)
Exemple #8
0
    def test_deal_with_no_response(self):
        controller = GameController()
        controller._trump = DurakCard('6H')
        controller._state = controller.States.DEALING
        controller._no_response = True
        controller._discarded = []
        controller._to_move = controller._player1
        controller._player1.cards = {DurakCard('JH')}
        controller._player2.cards = set()
        controller._deck = []
        controller._on_table = Table([DurakCard('6S'), DurakCard('6H')])
        controller._on_table.given_more = {DurakCard('7S'), DurakCard('7H')}
        controller._logger_enabled = False

        controller.deal()

        self.assertItemsEqual(controller._player2.cards, {
            DurakCard('6S'),
            DurakCard('6H'),
            DurakCard('7S'),
            DurakCard('7H')
        })
        self.assertFalse(controller._no_response)
        self.assertEqual(controller._to_move, controller._player1)
        self.assertEqual(controller._state, controller.States.MOVING)
Exemple #9
0
 def test_init_accepts_cards_and_trump(self):
     cards = [DurakCard('7', 'S'), 'TD', DurakCard('KC')]
     card_set = CardSet(cards, self.trump)
     self.assertEqual(card_set._trump, self.trump)
     self.assertItemsEqual(
         card_set, {DurakCard('7S'),
                    DurakCard('TD'),
                    DurakCard('KC')})
Exemple #10
0
    def test_durak_card_instances_are_immutable(self):
        card = DurakCard('7', 'S')

        with self.assertRaises(AttributeError):
            card.rank = '8'

        with self.assertRaises(AttributeError):
            card.suit = 'D'
Exemple #11
0
    def test_give_more_converts_output_to_cards(self):
        self.process.stdout.readline.return_value = '8H 9H'

        results = self.wrapper.give_more([DurakCard('7H')])

        self.assertItemsEqual(results, [DurakCard('8H'), DurakCard('9H')])
        self.process.stdin.write.assert_called_once_with('give_more 7H\n')
        self.assertTrue(self.process.stdout.readline.called)
Exemple #12
0
    def test_move_returns_none_if_no_output_given(self):
        self.process.stdout.readline.return_value = ''

        result = self.wrapper.move([DurakCard('7H'), DurakCard('8H')])

        self.assertTrue(result is None)
        self.process.stdin.write.assert_called_once_with('move 7H 8H\n')
        self.assertTrue(self.process.stdout.readline.called)
Exemple #13
0
    def test_disable_all(self):
        self.sizer._buttons_dict = {
            DurakCard('6H'): Mock(), DurakCard('7H'): Mock()
        }

        self.sizer.disable_all()
        for button in self.sizer._buttons_dict.itervalues():
            self.assertTrue(button.Disable.called)
Exemple #14
0
    def test_respond_converts_output_to_card(self):
        self.process.stdout.readline.return_value = '8H'

        result = self.wrapper.respond([DurakCard('7H')])

        self.assertEqual(result, DurakCard('8H'))
        self.process.stdin.write.assert_called_once_with('respond 7H\n')
        self.assertTrue(self.process.stdout.readline.called)
Exemple #15
0
    def test_register_move_goes_to_responding_if_card_is_none(self):
        controller = GameController()
        controller._state = controller.States.MOVING
        controller._on_table = [DurakCard('AC'), DurakCard('AH')]

        controller.register_move(None)

        self.assertEqual(controller._state, controller.States.DEALING)
Exemple #16
0
    def test_give_more_updates_given_more(self):
        table = Table()
        self.assertEqual(table.given_more, set())

        cards = {DurakCard('AH'), DurakCard('6H')}
        table.give_more(cards)

        self.assertEqual(table.given_more, cards)
Exemple #17
0
    def test_durak_card_instances_are_immutable(self):
        card = DurakCard('7', 'S')

        with self.assertRaises(AttributeError):
            card.rank = '8'

        with self.assertRaises(AttributeError):
            card.suit = 'D'
Exemple #18
0
    def test_str(self):
        card = DurakCard('6', 'H')
        self.assertEqual(str(card), '6H')

        card = DurakCard('T', 'S')
        self.assertEqual(str(card), 'TS')

        card = DurakCard('A', 'D')
        self.assertEqual(str(card), 'AD')
Exemple #19
0
 def test_sorted_cards_returns_trumps_last(self):
     card_set = CardSet(['7H', '8S', 'TC', '9C', '6H'], self.trump)
     self.assertEqual(card_set.sorted_cards(), [
         DurakCard('8S'),
         DurakCard('9C'),
         DurakCard('TC'),
         DurakCard('6H'),
         DurakCard('7H'),
     ])
Exemple #20
0
    def test_pop_with_given_more(self):
        card_mock = Mock()
        self.panel._cards[DurakCard('6H')] = Mock()
        self.panel._cards[DurakCard('7H')] = card_mock
        self.panel._given_more = [DurakCard('7H')]

        self.assertEqual(self.panel.pop(), DurakCard('7H'))
        self.assertItemsEqual(self.panel._cards.keys(), [DurakCard('6H')])
        card_mock.Destroy.assert_called()
Exemple #21
0
 def test_card_setter(self):
     with patch('__builtin__.super'):
         button = CardButton(parent=None, card=DurakCard('6H'))
         with patch.object(button, 'SetBitmapLabel') as method_mock:
             button.card = DurakCard('7S')
             self.assertEqual(button._card, DurakCard('7S'))
             method_mock.assert_called_once_with(
                 self._image_manager.get_image.return_value
             )
Exemple #22
0
    def test_log_title(self):
        self.logger.log_before_game(
            'name1', 'name2', [DurakCard('6H')], DurakCard('7H')
        )
        self.logger.log_after_game(self.logger.PLAYER2)

        self.assertEqual(
            self.logger._log_title,
            '%s, name1 - name2 (0-1)' % self.logger._log['started_at'].split('.')[0]
        )
Exemple #23
0
 def test_cards_that_can_be_added_to_not_including_trumps(self):
     card_set = CardSet(['7H', '7S', 'AH', 'AD', 'TS', 'QS', '8D', 'AC'],
                        self.trump)
     results = card_set.cards_that_can_be_added_to(['9C', '7D', 'AS'],
                                                   including_trumps=False)
     self.assertEqual(results, [
         DurakCard('7S'),
         DurakCard('AC'),
         DurakCard('AD'),
     ])
Exemple #24
0
    def test_log_after_move(self):
        self.logger._log['moves'].append({})
        self.logger.log_after_move(
            [DurakCard('6H'), DurakCard('7H')], {DurakCard('QH')}
        )

        self.assertEqual(len(self.logger._log['moves']), 1)
        self.assertDictEqual(
            self.logger._log['moves'][0],
            {'moves_and_responds': ['6H', '7H'], 'given_more': ['QH']}
        )
Exemple #25
0
    def test_remove_all_destroys_all_the_cards(self):
        cards = [DurakCard('6H'), DurakCard('7H'), DurakCard('8H')]
        card_values = [Mock(), Mock(), Mock()]

        self.panel._cards = dict(zip(cards, card_values))
        self.panel._give_more_mode = True

        self.panel.remove_all()
        self.assertTrue(all(card.Destroy.called for card in card_values))
        self.assertEqual(self.panel._cards, {})
        self.assertEqual(self.panel._given_more, [])
Exemple #26
0
    def test_remove_card_detaches_and_destroys_button(self):
        button = Mock()
        self.sizer._buttons_dict = {DurakCard('6H'): button}

        with patch.object(self.sizer, 'Detach') as Detach_mock:
            with patch.object(self.sizer, 'Layout') as Layout_mock:
                self.sizer.remove_card(DurakCard('6H'))
                Detach_mock.assert_called_once_with(button)
                self.assertTrue(button.Destroy.called)
                self.assertEqual(self.sizer._buttons_dict, {})
                self.assertFalse(Layout_mock.called)
Exemple #27
0
    def test_register_move_is_error_if_player_does_have_this_card(self):
        controller = GameController()
        controller._state = controller.States.MOVING
        controller._to_move = controller._player1
        controller._trump = DurakCard('6H')
        controller._player1.cards = CardSet(cards=(DurakCard('AC'),
                                                   DurakCard('AH')),
                                            trump=controller._trump)
        controller._on_table = []

        with self.assertRaises(exes.PlayerDoesNotHaveCard):
            controller.register_move(DurakCard('6D'))
Exemple #28
0
    def test_register_response_goes_to_giving_more_if_card_is_none(self):
        controller = GameController()
        controller._state = controller.States.RESPONDING
        controller._to_move = controller._player1
        controller._trump = DurakCard('6H')
        controller._player1.cards = CardSet(cards=(DurakCard('AC'), ),
                                            trump=controller._trump)

        controller.register_response(None)

        self.assertEqual(controller._state, controller.States.GIVING_MORE)
        self.assertTrue(controller._no_response)
Exemple #29
0
    def test_get_image(self):
        self.manager._data = {}

        with patch('durak.gui.images.wx.Image') as wx_image_mock:
            result = self.manager.get_image(DurakCard('6H'))
            self.assertTrue(wx_image_mock.called)
            self.assertEqual(result, self.manager._data[DurakCard('6H')])

            wx_image_mock.reset_mock()
            result = self.manager.get_image(DurakCard('6H'))
            self.assertFalse(wx_image_mock.called)
            self.assertEqual(result, self.manager._data[DurakCard('6H')])
Exemple #30
0
    def test_register_response_is_error_if_player_can_not_add_this_card(self):
        controller = GameController()
        controller._state = controller.States.RESPONDING
        controller._to_move = controller._player2
        controller._trump = DurakCard('6H')
        controller._player1.cards = CardSet(cards=(DurakCard('AC'),
                                                   DurakCard('AH')),
                                            trump=controller._trump)
        controller._on_table = [DurakCard('6D')]

        with self.assertRaises(exes.InvalidCard):
            controller.register_response(DurakCard('AC'))
Exemple #31
0
    def test_set_enabled_cards_enables_certain_cards(self):
        self.sizer._buttons_dict = {
            DurakCard('6H'): Mock(), DurakCard('7H'): Mock()
        }

        self.sizer.set_enabled_cards({DurakCard('7H'), })
        self.assertTrue(
            self.sizer._buttons_dict[DurakCard('6H')].Disable.called
        )
        self.assertTrue(
            self.sizer._buttons_dict[DurakCard('7H')].Enable.called
        )
Exemple #32
0
    def test_start_new_game_players_and_deck_cards(self):
        controller = GameController()
        controller.start_new_game()
        self.assertEqual(controller._trump, controller._deck[-1])

        all_cards = []
        all_cards.extend(controller._deck)
        all_cards.extend(controller._player1.cards)
        all_cards.extend(controller._player2.cards)
        self.assertItemsEqual(all_cards, DurakCard.all())
Exemple #33
0
    def start_new_game(self, ignore_winner=True):
        self._deck = list(DurakCard.all())
        random.shuffle(self._deck)
        self._trump = self._deck[-1]

        self._logger.reset()
        if self._logger_enabled:
            self._logger.log_before_game(
                self._player1.name,
                self._player2.name,
                self._deck,
                self._trump
            )

        self._player1.cards = CardSet(cards=self._deck[:6], trump=self._trump)
        self._player2.cards = CardSet(
            cards=self._deck[6:12], trump=self._trump
        )
        self._deck = self._deck[12:]

        if not ignore_winner and self._winner is not None:
            self._to_move = self._winner
        else:
            self._to_move = self._get_first_to_move_by_trump()

        self._winner = None
        self._discarded = []
        self._on_table = Table()

        self._state = self.States.MOVING
        self._no_response = False

        if self._logger_enabled:
            self._logger.log_before_move(
                set(self._player1.cards),
                set(self._player2.cards),
                self.to_move,
                self.deck_count,
            )

        return {
            'player1_cards': CardSet(self._player1.cards, trump=self._trump),
            'player2_cards': CardSet(self._player2.cards, trump=self._trump),
            'trump': DurakCard(self._trump),
        }
Exemple #34
0
    def _prepare_data(self):
        wx_bitmap = (
            wx.Image(self._image_path, wx.BITMAP_TYPE_GIF).ConvertToBitmap()
        )

        for card in DurakCard.all():
            left_top_x = card.numeric_rank * self._card_width
            left_top_y = card.numeric_suit * self._card_height
            self._data[card] = wx_bitmap.GetSubBitmap(
                (left_top_x, left_top_y, self._card_width, self._card_height)
            )

        hidden_bitmap = (
            wx.Image(self._hidden_image_path, wx.BITMAP_TYPE_GIF)
              .ConvertToBitmap()
        )
        self._data[self.HIDDEN] = hidden_bitmap

        wx_bitmap.Destroy()
Exemple #35
0
 def test_start_new_game_cards_are_shuffled(self):
     controller = GameController()
     with patch('durak.controller.random') as random_mock:
         controller.start_new_game()
         random_mock.shuffle.assert_called_once_with(list(DurakCard.all()))
Exemple #36
0
 def test_all(self):
     expected = set()
     for rank in DurakCard.RANKS:
         for suit in DurakCard.SUITS:
             expected.add(DurakCard(rank, suit))
     self.assertEqual(DurakCard.all(), expected)