Beispiel #1
0
    def test_sell_cards(self):
        j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                          players.RandomPlayer('Bob'))
        j.initial_setup()

        # Manual setup
        j.hands[j.player1] = ['Diamond', 'Gold', 'Cloth', 'Cloth', 'Cloth']

        # Invalid sell actions
        self.assertRaises(Exception, j.sell_cards,
                          ['Gold', 1])  # Can't sell 1 gold only
        self.assertRaises(Exception, j.sell_cards,
                          ['Cloth', 4])  # Not enough cloth to sell

        # Check cards and tokens
        start_cloth_tokens = int(len(j.goods_tokens['Cloth']))
        start_triple_tokens = int(len(j.bonus_tokens[3]))

        j.sell_cards('Cloth', 3)
        self.assertTrue('Cloth' in j.discard_pile)
        self.assertTrue('Cloth' not in j.hands[j.player1])
        self.assertEqual(len(j.tokens[j.player1]),
                         4)  # 3 goods tokens and 1 bonus token for p1
        self.assertEqual(len(j.goods_tokens['Cloth']),
                         start_cloth_tokens - 3)  # 3 less cloth tokens
        self.assertEqual(len(j.bonus_tokens[3]),
                         start_triple_tokens - 1)  # 1 less triple token
Beispiel #2
0
    def test_card_exchange(self):
        j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                          players.RandomPlayer('Bob'))
        j.initial_setup()

        # Manual setup
        j.market = ['Camel', 'Diamond', 'Silver', 'Gold', 'Gold']
        j.hands[j.player1] = ['Cloth', 'Spice', 'Leather']

        # Invalid actions
        self.assertRaises(Exception, j.exchange_cards,
                          [['Gold'], ['Spice']])  # Card not in the market
        self.assertRaises(Exception, j.exchange_cards,
                          [['Cloth', 'Spice', 'Leather'],
                           ['Gold', 'Gold', 'Gold']])  # Too many golds
        self.assertRaises(Exception, j.exchange_cards,
                          [['Cloth'], ['Diamond', 'Silver', 'Gold']
                           ])  # Exchange doesn't match

        # Try a valid exchange and see if the effects work
        j.exchange_cards(['Cloth', 'Spice'], ['Gold', 'Gold'])
        self.assertEqual(
            len([card for card in j.hands[j.player1] if card == 'Gold']), 2)
        self.assertTrue('Cloth' not in j.hands[j.player1]
                        and 'Spice' not in j.hands[j.player1])
Beispiel #3
0
    def test_copy(self):
        j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                          players.RandomPlayer('Bob'))
        j_copy = j.copy()
        j.take_camels()

        self.assertTrue(not j == j_copy)
Beispiel #4
0
    def test_camel_taking(self):
        j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                          players.RandomPlayer('Bob'))
        j.initial_setup()

        # At least 3 camels in the player's herd and no camels in the hands
        j.take_camels()
        self.assertTrue(len(j.herds[j.player1]) >= 3)
        self.assertTrue('Camel' not in j.hands[j.player1])
Beispiel #5
0
 def test_check_hands(self):
     j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                       players.RandomPlayer('Bob'))
     j.initial_setup()
     self.assertEqual(len(j.market), 5)
     # Check players hand at most 5 cards
     self.assertTrue(len(j.hands[j.player1]) <= 5)
     self.assertTrue(len(j.hands[j.player2]) <= 5)
     # No camels in hands
     self.assertTrue('Camel' not in j.hands[j.player1] + j.hands[j.player2])
Beispiel #6
0
    def test_card_taking(self):
        j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                          players.RandomPlayer('Bob'))
        j.initial_setup()

        # Arbitrary card from the market
        card = j.market[0]
        j.take_card(card)

        # Check if the card moves into the appropriate pile
        if card == 'Camel':
            self.assertTrue(card in j.herds[j.player1])
        else:
            self.assertTrue(card in j.hands[j.player1])

        # Create arbitrary hand to test the hand limit
        j.hands[j.player1] = [1, 1, 1, 1, 1, 1, 1]
        card = j.market[0]
        self.assertRaises(Exception, j.take_card(card))
Beispiel #7
0
    def test_board_replenish(self):
        j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                          players.RandomPlayer('Bob'))
        j.initial_setup()

        # Arbitrary card from the market
        card = j.market[0]
        j.take_card(card)

        # Check the market has been restored
        self.assertEqual(len(j.market), 5)
        # Swap players around
        j.active_player, j.inactive_player = j.inactive_player, j.active_player

        # Take a card
        card2 = j.market[0]
        j.take_card(card2)
        if card2 == 'Camel':
            self.assertTrue(card in j.herds[j.player2])
        else:
            self.assertTrue(card in j.hands[j.player2])

        self.assertEqual(len(j.market), 5)
Beispiel #8
0
    def test_play(self):
        j = jaipur.Jaipur(players.RandomPlayer('Alice'),
                          players.RandomPlayer('Bob'))
        winner, moves, outcome = j.play()

        self.assertTrue(winner in ('Alice', 'Bob'))