def setUp(self): self.pw_map = Mapa("test") self.score = Score() self.hcriat = CreaturesHandler() self.hcriat.jugadores = {} self.hcriat.pw_map = self.pw_map self.hcriat.score = self.score
class ActionsTest(TestCase): def setUp(self): self.pw_map = Mapa("test") self.score = Score() self.hcriat = CreaturesHandler() self.hcriat.jugadores = {} self.hcriat.pw_map = self.pw_map self.hcriat.score = self.score def tearDown(self): """Cancel all the pending calls to avoid problems""" pending = reactor.getDelayedCalls() for p in pending: if p.active(): p.cancel() def test_main(self): server = Server() self.assertTrue(isinstance(server.pw_map, Mapa)) self.assertTrue(isinstance(server.score, Score)) self.assertTrue(isinstance(server.hcriat, CreaturesHandler)) def test_login_blue(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) self.assertEqual(player.get_team(), 1) def test_login_red(self): player, _, _, _ = create_player(Team.RED, self.hcriat) self.assertEqual(player.get_team(), 2) def test_player_get_data(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) self.assertEqual(player.get_data(), [2, 1, 34, 2, 100, 100]) def test_wrong_player_uid(self): self.assertRaises(PlayerDoesNotExist, self.hcriat.get_creature_by_uid, 157) def test_lost_connection_handler(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) uid = player.uid self.hcriat.del_creature_by_uid(uid) self.assertRaises(PlayerDoesNotExist, self.hcriat.get_creature_by_uid, uid) def test_teleport_player(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) teleport_player(player.uid, 1, 1, self.hcriat) self.assertEqual((player.x, player.y), (1, 1)) def test_move_valid(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) for d in ('n', 's', 'o', 'e'): before_x, before_y = player.get_coor() moved_player = move_player(player.get_uid(), d, self.hcriat) self.assertTrue(before_x != moved_player.x or before_y != moved_player.y) player.bloqM.unblock() def test_move_invalid(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) self.assertRaises( InvalidMovementDirection, move_player, player.get_uid(), 'bad_direction', self.hcriat) def test_cant_move_exception(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) player.vivo = False self.assertRaises( CantMove, move_player, player.get_uid(), 'n', self.hcriat) def test_blocking_position(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) for d in ('o', 'o', 'o'): move_player(player.get_uid(), d, self.hcriat) player.bloqM.unblock() self.assertRaises(BlockedPosition, move_player, player.get_uid(), 'o', self.hcriat) def test_multiple_players_blue(self): _, others, _, _ = create_player(Team.BLUE, self.hcriat) self.assertEqual(others, []) _, others, _, _ = create_player(Team.BLUE, self.hcriat) self.assertEqual(len(others), 1) def test_multiple_players_red(self): _, others, _, _ = create_player(Team.RED, self.hcriat) self.assertEqual(others, []) _, others, _, _ = create_player(Team.RED, self.hcriat) self.assertEqual(len(others), 1) def test_full_team_base(self): for _ in range(9): create_player(Team.RED, self.hcriat) self.assertRaises(TeamBasePositionNotFound, create_player, Team.RED, self.hcriat) def test_shoot_directions(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) for d in ('n', 's', 'o', 'e', 'no', 'ne', 'so', 'se'): player, shoot_handler = shoot_action(player.get_uid(), d, self.hcriat, None, None) self.assertIsNot(shoot_handler, None) player.bloqD.unblock() def test_shoot_bad_direction(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) self.assertRaises( InvalidShootDirection, shoot_action, player.get_uid(), 'bad_dir', self.hcriat, None, None) def test_shoot_update(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) _, shoot_handler = shoot_action(player.get_uid(), 'n', self.hcriat, None, None) before_y = shoot_handler.bala.y shoot_handler.loop() self.assertEqual(before_y - 1, shoot_handler.bala.y) def test_shoot_hit_wall(self): player, _, _, _ = create_player(Team.BLUE, self.hcriat) _, shoot_handler = shoot_action(player.get_uid(), 'o', self.hcriat, None, None) for _ in range(3): self.assertTrue(shoot_handler.update()) self.assertFalse(shoot_handler.update()) def test_shoot_friend(self): player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat) player2, _, _, pw_map = create_player(Team.BLUE, self.hcriat) pw_map.move_player(player2, player1.x+2, player1.y) _, shoot_handler = shoot_action(player1.get_uid(), 'e', self.hcriat, None, None) for _ in range(3): self.assertTrue(shoot_handler.update()) def test_shoot_enemy(self): player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat) player2, _, _, pw_map = create_player(Team.RED, self.hcriat) pw_map.move_player(player2, player1.x+2, player1.y) _, shoot_handler = shoot_action(player1.get_uid(), 'e', self.hcriat, callback, None) health_before = player2.vida self.assertTrue(shoot_handler.update()) # move 1 sqm self.assertFalse(shoot_handler.update()) # hit the enemy self.assertLess(player2.vida, health_before) def test_cant_shoot_exception(self): player1, _, _, _ = create_player(Team.BLUE, self.hcriat) player1.vivo = False self.assertRaises( CantShoot, shoot_action, player1.get_uid(), 'e', self.hcriat, callback, None) def test_kill_and_revive_enemy(self): player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat) player2, _, _, pw_map = create_player(Team.RED, self.hcriat) pw_map.move_player(player2, player1.x+1, player1.y) _, shoot_handler = shoot_action( player1.get_uid(), 'e', self.hcriat, callback, callback) player2.vida = 1 shoot_handler.loop() self.assertFalse(player2.vivo) revive_player(player2.uid, self.hcriat) self.assertTrue(player2.vivo) self.assertEqual(player2.vida, CreaturesHandler.VIDA_MAX) def test_score_from_blue(self): player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat) player2, _, _, pw_map = create_player(Team.RED, self.hcriat) def die_callback(uid): return increase_score(uid, self.hcriat) pw_map.move_player(player2, player1.x+1, player1.y) _, shoot_handler = shoot_action( player1.get_uid(), 'e', self.hcriat, callback, die_callback) player2.vida = 1 self.assertEqual(self.score.blue_score, 0) shoot_handler.loop() self.assertEqual(self.score.blue_score, 1) def test_score_from_red(self): player1, _, _, pw_map = create_player(Team.RED, self.hcriat) player2, _, _, pw_map = create_player(Team.BLUE, self.hcriat) def die_callback(uid): return increase_score(uid, self.hcriat) pw_map.move_player(player2, player1.x+1, player1.y) _, shoot_handler = shoot_action( player1.get_uid(), 'e', self.hcriat, callback, die_callback) player2.vida = 1 self.assertEqual(self.score.red_score, 0) shoot_handler.loop() self.assertEqual(self.score.red_score, 1) def test_restart_round(self): # wrong player trying to restart self.assertIsNone(restart_round(153, self.hcriat)) # real case player1, _, _, pw_map = create_player(Team.BLUE, self.hcriat) player2, _, _, pw_map = create_player(Team.RED, self.hcriat) # move both once place teleport_player(player1.uid, player1.x+1, player1.y+1, self.hcriat) teleport_player(player2.uid, player2.x+1, player2.y+1, self.hcriat) # change life player1.vida = 1 player2.vida = 1 # change score self.score.murio_azul() self.score.murio_rojo() # restart players, new_score = restart_round(player1.uid, self.hcriat) # base positions new_blue = players.pop(0) if players[0].team == Team.BLUE else players.pop() new_red = players.pop() # blue self.assertEqual(new_blue.x, pw_map.x_azul) self.assertEqual(new_blue.y, pw_map.y_azul) self.assertEqual(new_blue.vida, self.hcriat.VIDA_MAX) # red self.assertEqual(new_red.x, pw_map.x_rojo) self.assertEqual(new_red.y, pw_map.y_rojo) self.assertEqual(new_red.vida, self.hcriat.VIDA_MAX) # score self.assertEqual(new_score[0], 0) self.assertEqual(new_score[1], 0)