Exemple #1
0
class GameTestCase(unittest.TestCase):
    def setUp(self):
        self.player1 = Player('Evie')
        self.player2 = Player('Amelia')
        self.pg = Game()
        self.pg.add_player(self.player1)
        self.pg.add_player(self.player2)
        self.pg.setup_game(SETTINGS_LOCATION)

    def test_all_one_colour(self):
        card_names = [
            'London', 'Oxford', 'Cambridge', 'Brighton', 'Southampton'
        ]
        self.assertTrue(self.pg.all_one_colour(card_names))

        card_names[3] = 'Moscow'
        self.assertFalse(self.pg.all_one_colour(card_names))

    def test_all_diseases_cured(self):
        self.assertFalse(self.pg.all_diseases_cured())

        self.pg.diseases['Yellow'].cured = True
        self.assertFalse(self.pg.all_diseases_cured())

        self.pg.diseases['Blue'].cured = True
        self.pg.diseases['Black'].cured = True
        self.assertFalse(self.pg.all_diseases_cured())

        self.pg.diseases['Red'].cured = True
        self.assertTrue(self.pg.all_diseases_cured())

    def test_add_epidemics(self):
        self.pg.add_epidemics()
        self.assertFalse(self.pg.has_x_cube_city(3))
        for i in range(0, 11):
            self.pg.draw_card(self.player1)
        self.assertEqual(1, self.pg.epidemic_count)
        self.assertTrue(self.pg.has_x_cube_city(3))

    def test_infect_city(self):
        self.pg.infect_city('London', 'Blue')
        self.assertEqual(1, self.pg.city_map['London'].cubes['Blue'])

        self.pg.disease_cubes['Blue'] = 0
        with self.assertRaises(GameCrisisException):
            self.pg.infect_city('London', 'Blue')

    def test_infect_city_phase(self):
        self.pg.infect_city_phase()
        self.assertEqual(1, self.pg.city_map['London'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(2, len(self.pg.infect_deck.discard))
        self.assertEqual('London', self.pg.infect_deck.discard[0].name)
        self.assertEqual(28, self.pg.disease_cubes['Blue'])

    def test_epidemic_phase(self):
        self.pg.epidemic_phase()
        self.assertEqual(3, self.pg.city_map['Belgorod'].cubes['Black'])
        top_infect_card = self.pg.infect_deck.take_top_card()
        self.assertEqual('Belgorod', top_infect_card.name)
        self.assertEqual('Black', top_infect_card.colour)
        self.assertEqual(1, self.pg.epidemic_count)
        self.assertEqual(0, len(self.pg.infect_deck.discard))

    def test_outbreak_trigger(self):
        for i in range(4):
            self.pg.infect_city('London', 'Blue')
        self.assertEqual(3, self.pg.city_map['London'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Cambridge'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Brighton'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Washington'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Bejing'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Moscow'].cubes['Blue'])
        self.assertEqual(1, self.pg.outbreak_count)

    def test_outbreak(self):
        self.pg.outbreak('London', 'Blue')
        self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Cambridge'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Brighton'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Washington'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Bejing'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Moscow'].cubes['Blue'])

        self.pg.outbreak_count = 7
        self.pg.outbreak_stack.clear()
        with self.assertRaises(GameCrisisException):
            self.pg.outbreak('London', 'Blue')

    def test_shuffle(self):
        import random
        random.seed(42)

        self.assertEqual('London', self.pg.player_deck.take_top_card().name)
        self.pg.player_deck.shuffle()
        self.assertNotEqual('Oxford', self.pg.player_deck.take_top_card().name)

        self.assertEqual('London', self.pg.infect_deck.take_top_card().name)
        self.pg.infect_deck.shuffle()
        self.assertNotEqual('Oxford', self.pg.infect_deck.take_top_card().name)

    def test_start_game(self):
        self.pg.start_game()
        self.top_player_card = self.pg.player_deck.take_top_card()
        self.top_infect_card = self.pg.infect_deck.take_top_card()
        self.assertEqual(9, len(self.pg.infect_deck.discard))
        self.assertEqual(0, len(self.pg.player_deck.discard))
        self.assertTrue(self.pg.has_x_cube_city(3))
        self.assertEqual(3, self.pg.get_count_x_cube_city(3))
        self.assertTrue(self.pg.has_x_cube_city(2))
        self.assertEqual(3, self.pg.get_count_x_cube_city(2))
        self.assertTrue(self.pg.has_x_cube_city(1))
        self.assertEqual(3, self.pg.get_count_x_cube_city(1))
        self.assertEqual(4, len(self.player1.hand))
        self.assertEqual(4, len(self.player2.hand))
        self.assertNotEqual('London', self.top_player_card.name)
        self.assertNotEqual('London', self.top_infect_card.name)
        self.assertEqual('London', self.pg.players[0].location.name)
        self.assertEqual('London', self.pg.players[1].location.name)
        self.assertTrue(self.pg.city_map['London'].has_lab)

        for i in range(10):
            self.pg.draw_card(self.player1)
        self.assertEqual(1, self.pg.epidemic_count)

    def test_initial_infect_phase(self):
        self.pg.inital_infect_phase()
        self.assertEqual(3, self.pg.city_map['London'].cubes['Blue'])
        self.assertEqual(3, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(3, self.pg.city_map['Cambridge'].cubes['Blue'])
        self.assertEqual(2, self.pg.city_map['Brighton'].cubes['Blue'])
        self.assertEqual(2, self.pg.city_map['Southampton'].cubes['Blue'])
        self.assertEqual(2, self.pg.city_map['Bristol'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Plymouth'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Liverpool'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Manchester'].cubes['Blue'])
        self.assertEqual(9, len(self.pg.infect_deck.discard))
        self.assertEqual(12, self.pg.disease_cubes['Blue'])

    def test_draw_initial_hands(self):
        test_cards = self.pg.player_deck.cards[:8]
        self.pg.draw_initial_hands()

        for i, player in enumerate(self.pg.players):
            with self.subTest(i=i, player=player):
                self.assertEqual(4, len(player.hand))
                self.assertEqual(test_cards[i * 4 + 3].name,
                                 player.hand[3].name)

    def test_draw_card(self):
        self.pg.draw_card(self.player1)
        self.assertEqual('London', self.player1.hand[0].name)

        self.pg.player_deck.cards = []
        with self.assertRaises(GameCrisisException):
            self.pg.draw_card(self.player1)

    def test_get_new_diseaes(self):
        self.assertFalse(self.pg.diseases['Blue'].cured)
        self.assertFalse(self.pg.diseases['Red'].cured)
        self.pg.diseases['Blue'].cured = True
        self.assertTrue(self.pg.diseases['Blue'].cured)

    def test_reset_distances(self):
        self.pg.reset_distances()
        self.player1.set_location('London')
        self.pg.start_turn(self.player1)
        self.pg.draw_card(self.player1)
        self.assertTrue(self.player1.build_lab())
        self.assertEqual(999, self.pg.city_map['London'].distance)
        self.assertEqual(999, self.pg.city_map['Moscow'].distance)
        self.pg.set_lab_distances()
        self.assertNotEqual(999, self.pg.city_map['London'].distance)
        self.assertNotEqual(999, self.pg.city_map['Moscow'].distance)
        self.pg.reset_distances()
        self.assertEqual(999, self.pg.city_map['London'].distance)
        self.assertEqual(999, self.pg.city_map['Moscow'].distance)

    def test_set_city_distance_name(self):
        self.pg.set_city_distance_name('Leeds')
        self.assertEqual(2, self.pg.city_map['London'].distance)
        self.assertEqual(3, self.pg.city_map['Moscow'].distance)

    def test_set_cities_distances_names(self):
        cities = ['Leeds', 'Atlanta', 'Moscow']
        self.pg.set_cities_distances_names(cities)
        self.assertEqual(1, self.pg.city_map['London'].distance)
        self.assertEqual(0, self.pg.city_map['Moscow'].distance)

    def test_set_lab_distances(self):
        for i in range(21):
            self.pg.draw_card(self.player1)
        self.player1.set_location('London')
        self.pg.start_turn(self.player1)
        self.assertTrue(self.player1.build_lab())
        self.player1.set_location('New York')
        self.pg.draw_card(self.player1)
        self.assertTrue(self.player1.build_lab())
        self.player1.set_location('Jinan')
        self.pg.set_lab_distances()
        self.assertEqual(0, self.pg.city_map['London'].distance)
        self.assertEqual(1, self.pg.city_map['Moscow'].distance)
        self.assertEqual(3, self.player1.get_distance_from_lab())