def test_tiles_included_two_adjacencies_away(self): blank_board(self.game) self.game["lonely_tiles"] = ["1A", "2A"] tile = self.player["rack"][0] = "1B" gametools.play_tile(self.game, self.player, tile) gametools.create_hotel(self.game, self.player, self.zeta) self.assertTrue("2A" in self.zeta["tiles"])
def test_turn_rotates_after_creating_hotel(self): self.game["lonely_tiles"] = ["1A"] tile = self.player["rack"][0] = "1B" gametools.play_tile(self.game, self.player, tile) gametools.create_hotel(self.game, self.player, self.zeta) gametools.purchase(self.game, self.player, {}) self.assertEqual(gametools.active_player(self.game), self.game["players"][1])
def test_many_tiles_added_to_hotel(self): for tile in ["2D", "1B", "1A", "2A"]: player = gametools.active_player(self.game) player["rack"][0] = tile gametools.play_tile(self.game, player, tile) gametools.purchase(self.game, player, {}) self.assertEqual(gametools.where_is_tile(self.game, tile), "phoenix") self.assertEqual(len(self.phoenix["tiles"]), 6)
def test_offer_purchase_after_hotel_creation(self): self.game["lonely_tiles"] = ["7C"] tile = self.player["rack"][0] = "8C" gametools.play_tile(self.game, self.player, tile) gametools.create_hotel(self.game, self.player, self.quantum) first_action = self.game["action_queue"][0] self.assertEqual(first_action["action"], "purchase") self.assertEqual(first_action["player"], self.player["name"])
def test_bonuses_awarded_at_game_end(self): self.sackson["tiles"] = [str(i) + "A" for i in xrange(1, 13)] self.player["shares"]["sackson"] = 1 tile = self.player["rack"][0] = "1D" self.remember_cash() gametools.play_tile(self.game, self.player, tile) gametools.purchase(self.game, self.player, {}, end_game=True) self.assertEqual(self.cash_difference(), [11200, 0, 0])
def test_playing_creation_tile_when_no_available_hotels(self): blank_board(self.game) tilesets = [["1A", "2A"], ["4A", "5A"], ["7A", "8A"], ["10A", "11A"], ["1C", "2C"], ["4C", "5C"], ["7C", "8C"]] for hotel, tileset in zip(self.game["hotels"], tilesets): hotel["tiles"] = tileset self.game["lonely_tiles"] = ["1I"] tile = self.player["rack"][0] = "2I" with self.assertRaises(gametools.GamePlayNotAllowedError): gametools.play_tile(self.game, self.player, tile)
def test_legit_play_tile(self): tile = None for rack_tile in self.player["rack"]: if rack_tile not in gametools.tiles_that_create_hotels(self.game): tile = rack_tile break gametools.play_tile(self.game, self.player, tile) self.assertTrue(tile in self.game["lonely_tiles"]) self.assertTrue(tile not in self.player["rack"])
def test_discard_and_replenish_unplayable_rack_tiles(self): blank_board(self.game) self.zeta["tiles"] = [str(i) + "A" for i in xrange(1, 13)] self.america["tiles"] = [str(i) + "C" for i in xrange(1, 13)] unplayable = [str(i) + "B" for i in xrange(1, 6)] self.player["rack"][1:6] = unplayable for tile in unplayable: if tile in self.game["tilebag"]: self.game["tilebag"].remove(tile) tile = self.player["rack"][0] = "10D" gametools.play_tile(self.game, self.player, tile) gametools.purchase(self.game, self.player, {}) for tile in unplayable: self.assertTrue(tile not in self.player["rack"]) self.assertEqual(len(self.player["rack"]), 6)
def play_tile_message(self, message): """Someone played a tile.""" player_name = message['player'] game = self.game_for_player(player_name) if not game: return try: player = gametools.player_named(game, player_name) stock_market_shares = gametools.play_tile(game, player, message['tile']) except gametools.GamePlayNotAllowedError, e: self.send_error(player_name, 'Cannot play tile', e) return
def merge_america_and_hydra(self): gametools.play_tile(self.game, self.player, "1B")
def merge_quantum_and_fusion(self, survivor=None): gametools.play_tile(self.game, self.player, self.tile) if survivor: gametools.choose_survivor(self.game, self.player, survivor)
def test_do_not_offer_purchase_when_no_shares_in_bank(self): self.hydra["tiles"] = ["2I", "3I"] self.game["players"][1]["shares"]["hydra"] = 25 gametools.play_tile(self.game, self.player, self.player["rack"][0]) self.assertNotEqual(self.game["action_queue"][0]["action"], "purchase")
def test_do_not_offer_purchase_when_no_shares_affordable(self): self.fusion["tiles"] = ["8H", "9H"] self.player["cash"] = 200 gametools.play_tile(self.game, self.player, self.player["rack"][0]) self.assertNotEqual(self.game["action_queue"][0]["action"], "purchase")
def test_playing_safe_hotel_merge_tile(self): self.quantum["tiles"] = [str(i) + "A" for i in xrange(1, 13)] self.phoenix["tiles"] = [str(i) + "C" for i in xrange(1, 13)] tile = self.player["rack"][0] = "4B" with self.assertRaises(gametools.GamePlayNotAllowedError): gametools.play_tile(self.game, self.player, tile)
def test_other_player_play_tile(self): other_player = self.game["players"][1] tile = other_player["rack"][0] with self.assertRaises(gametools.GamePlayNotAllowedError): gametools.play_tile(self.game, other_player, tile)
def test_tile_rack_replenished_at_end_of_turn(self): self.game["lonely_tiles"] = ["9D"] tile = self.player["rack"][0] = "8D" gametools.play_tile(self.game, self.player, tile) self.assertEqual(len(self.player["rack"]), 5)
def test_play_tile_not_in_rack(self): tile = self.game["tilebag"][0] with self.assertRaises(gametools.GamePlayNotAllowedError): gametools.play_tile(self.game, self.player, tile) self.assertEqual(self.game["tilebag"][0], tile)
def test_turn_rotates_after_playing_tile(self): gametools.play_tile(self.game, self.player, self.player["rack"][0]) self.assertEqual(gametools.active_player(self.game), gametools.player_after(self.game, self.player))
def test_adjacent_lonely_tiles_added_to_hotel(self): self.game["lonely_tiles"] = ["4C"] tile = self.player["rack"][0] = "3C" gametools.play_tile(self.game, self.player, tile) self.assertTrue("4C" in self.phoenix["tiles"]) self.assertTrue("4C" not in self.game["lonely_tiles"])
def test_nonexistent_tile_play(self): nonexistent_tiles = ["0E", "11", "1J", "13C"] for tile in nonexistent_tiles: with self.assertRaises(gametools.GamePlayNotAllowedError): gametools.play_tile(self.game, self.player, tile)
def test_one_tile_added_to_hotel(self): tile = self.player["rack"][0] = "2D" gametools.play_tile(self.game, self.player, tile) self.assertEqual(len(self.phoenix["tiles"]), 3) self.assertEqual(gametools.where_is_tile(self.game, tile), "phoenix")
def test_inappropriate_game_end(self): self.sackson["tiles"] = ["1A", "2A"] gametools.play_tile(self.game, self.player, self.player["rack"][0]) gametools.purchase(self.game, self.player, {}, end_game=True) self.assertFalse(self.game["ended"])
def test_appropriate_game_end(self): self.sackson["tiles"] = [str(i) + "A" for i in xrange(1, 13)] tile = self.player["rack"][0] = "1D" gametools.play_tile(self.game, self.player, tile) gametools.purchase(self.game, self.player, {}, end_game=True) self.assertTrue(self.game["ended"])
def test_rack_replenishment(self): blank_board(self.game) tile = self.player["rack"][0] gametools.play_tile(self.game, self.player, tile) self.assertEqual(len(self.player["rack"]), 6)
def test_do_not_offer_purchase_when_no_hotels_on_board(self): gametools.play_tile(self.game, self.player, self.player["rack"][0]) self.assertNotEqual(self.game["action_queue"][0]["action"], "purchase")
def force_active_player_to_create_hotel(self): tile_to_play = gametools.tiles_that_create_hotels(self.game)[0] player = gametools.active_player(self.game) player["rack"][0] = tile_to_play gametools.play_tile(self.game, player, tile_to_play)