Esempio n. 1
0
class Test_Dirt(unittest.TestCase):
    def setUp(self):
        cells = [[0, 0, 1]]
        ctypes = [('Floor',), ('Water',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.dirt = self.level.add_sprite('Dirt', (1, 0))
        self.player = self.level.add_sprite('Player', (0, 0))


    def test_dirt_becomes_bridge_when_in_water(self):
        self.assertFalse(self.dirt.is_bridge)
        self.dirt.pos = 2, 0
        self.level.update_level()
        self.assertTrue(self.dirt.is_bridge)


    def test_dirt_doesnt_become_bridge_when_bridge_already_in_water(self):
        self.level.add_sprite('Dirt', (2, 0))
        self.level.update_level()
        self.dirt.pos = 2, 0
        self.level.update_level()
        self.assertFalse(self.dirt.is_bridge)


    def test_dirt_no_longer_solid_once_player_has_walked_on_it(self):
        self.dirt.pos = 2, 0
        self.level.update_level()
        self.assertTrue(self.dirt.is_solid)
        self.player.pos = 2, 0
        self.level.update_level()
        self.assertFalse(self.dirt.is_solid)
Esempio n. 2
0
class Test_Movable(unittest.TestCase):
    def setUp(self):
        cells = [[0, 0, 1, 0]]
        ctypes = [('Floor',), ('Fire',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.player = self.level.add_sprite('Player', (0, 0))
        self.movable = MockMovable(self.level, (1, 0))
        self.level.sprites.add(self.movable)

        self.celltime = 1000 / self.player.speed  # time to move 1 cell


    def test_movable_item_has_movable_attribute(self):
        self.assertTrue(self.movable.is_movable)


    def test_movable_item_moves_over_fire(self):
        self.player.attempt_move(1)
        self.level.update_level(self.celltime * 2)
        self.assertEqual(self.movable.pos, (3, 0))


    def test_movable_item_doesnt_move_over_fire_if_blocked(self):
        self.level.add_sprite('Crate', (3, 0))
        self.player.attempt_move(1)
        self.level.update_level(self.celltime * 2)
        self.assertEqual(self.movable.pos, (2, 0))
Esempio n. 3
0
class Test_Player(unittest.TestCase):
    def setUp(self):
        cells = [[0, 0, 0, 1],
                 [0, 2, 0, 0]]
        ctypes = [('Floor',), ('Wall',), ('SentryButton',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.player = self.level.add_sprite('Player', (0, 1))
        self.sentry = self.level.add_sprite('Sentry', (0, 0), 3)

        # time to move 1 cell
        self.playertime = 1000 / self.player.speed
        self.sentrytime = 1000 / self.sentry.speed


    def test_sentry_turns_when_button_triggered(self):
        self.player.attempt_move(1)
        self.level.update_level(self.playertime)
        self.assertEqual(self.sentry.rotate, 1)


    def test_sentry_moves_forward_when_possible(self):
        self.sentry.rotate = 1
        self.level.update_level(self.sentrytime)
        self.assertEqual(self.sentry.pos, (1, 0))
        self.level.update_level(self.sentrytime)
        self.assertEqual(self.sentry.pos, (2, 0))
        self.level.update_level(self.sentrytime)
        self.assertEqual(self.sentry.pos, (2, 0)) # stopped by wall
Esempio n. 4
0
class Test_Toggle(unittest.TestCase):
    def setUp(self):
        cells = [[0, 1, 0]]
        ctypes = [('Floor',), ('ToggleButton',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.toggle = self.level.add_sprite('Toggle', (2, 0), True)


    def test_player_stepping_on_button_reverses_toggle(self):
        self.assertTrue(self.toggle.is_solid)

        player = self.level.add_sprite('Player', (0, 0))
        player.attempt_move(1)
        self.level.update_level(1000 / player.speed)
        self.assertFalse(self.toggle.is_solid)
Esempio n. 5
0
class Test_Rover(unittest.TestCase):
    def setUp(self):
        cells = [[0, 0, 0]]
        ctypes = [('Floor',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.player = self.level.add_sprite('Player', (0, 0))
        self.rover = self.level.add_sprite('Rover', (2, 0))

        self.celltime = 1000 / self.player.speed  # time to move 1 cell


    def test_rover_follows_player_after_player_moves_adjacent(self):
        self.player.start_move(1)
        self.level.update_level(self.celltime)
        self.assertIn(self.rover, self.player.followers)


    def test_rover_faces_toward_players_last_position(self):
        self.player.pos = 1, 0
        self.player.followers.add(self.rover)
        self.player.start_move(3)
        self.level.update_level(self.celltime)
        self.assertEqual(self.rover.rotate, 3)
Esempio n. 6
0
class Test_Laser(unittest.TestCase):
    def setUp(self):
        cells = [[0, 0, 0, 0],
                 [0, 0, 0, 0],
                 [0, 0, 0, 0]]
        ctypes = [('Floor',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.laser = self.level.add_sprite('Laser', (0, 1), 1)


    def test_laser_creates_laserbeams(self):
        self.level.update_level()
        self.assertItemsEqual([beam.pos for beam in self.level.sprites['Laserbeam']],
                              [(1, 1), (2, 1), (3, 1)])


    def test_solid_object_blocks_laserbeams(self):
        self.level.add_sprite('Crate', (2, 1), 2)
        self.level.update_level()
        self.assertItemsEqual([beam.pos for beam in self.level.sprites['Laserbeam']],
                              [(1, 1)])


    def test_mirror_bounces_laserbeams(self):
        self.level.add_sprite('Mirror', (2, 1), 2)
        self.level.update_level()
        self.assertItemsEqual([beam.pos for beam in self.level.sprites['Laserbeam']],
                              [(1, 1), (2, 1), (2, 2)])


    def test_laserbeam_kills_destructible_sprites(self):
        player = self.level.add_sprite('Player', (1, 1))
        rover = self.level.add_sprite('Rover', (2, 1))
        robot = self.level.add_sprite('Robot', (3, 1))
        self.level.update_level()
        self.assertNotIn(player, self.level.sprites)
        self.assertNotIn(rover, self.level.sprites)
        self.assertNotIn(robot, self.level.sprites)
Esempio n. 7
0
class Test_Robot(unittest.TestCase):
    def setUp(self):
        cells = [[0, 0, 0],
                 [0, 0, 0],
                 [0, 0, 0]]
        ctypes = [('Floor',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.robot = self.level.add_sprite('Robot', (1, 1))

        self.celltime = 1000 / self.robot.speed


    def test_robot_rotates_left_if_follow_dir_is_zero(self):
        self.robot.start_turn()
        self.assertEqual(self.robot.rotate, 3)


    def test_robot_rotates_right_if_follow_dir_is_one(self):
        self.robot.follow_dir = 1
        self.robot.start_turn()
        self.assertEqual(self.robot.rotate, 1)


    def test_robot_move_dir_matches_rotate_dir(self):
        self.robot.start_turn()
        self.assertEqual(self.robot.move_dir, 3)


    def test_robot_moves_if_unobstructed(self):
        self.robot.start_turn()
        self.assertEqual(self.robot.to_move, 1)


    def test_robot_moves_straight_if_edge_in_follow_dir(self):
        self.robot.pos = (0, 1)
        self.robot.start_turn()
        self.assertEqual(self.robot.move_dir, 0)


    def test_robot_moves_straight_if_object_in_follow_dir(self):
        self.level.add_sprite('Crate', (0, 1))
        self.robot.start_turn()
        self.assertEqual(self.robot.move_dir, 0)


    def test_robot_rotates_opposite_way_if_obstructed_in_follow_dir_and_ahead(self):
        self.level.add_sprite('Crate', (0, 1))
        self.level.add_sprite('Crate', (1, 0))
        self.robot.start_turn()
        self.assertEqual(self.robot.move_dir, 1)


    def test_robot_does_180_if_obstructed_ahead_and_on_both_sides(self):
        self.robot.pos = (0, 0)
        self.level.add_sprite('Crate', (1, 0))
        self.robot.start_turn()
        self.assertEqual(self.robot.move_dir, 2)


    def test_robot_kills_player_on_entering_players_cell(self):
        player = self.level.add_sprite('Player', (0, 1))
        self.level.update_level(1)
        self.assertNotIn(player, self.level.sprites)
Esempio n. 8
0
class Test_Player(unittest.TestCase):
    def setUp(self):
        cells = [[1, 1, 1],
                 [0, 0, 0],
                 [0, 0, 0],
                 [0, 0, 0],
                 [0, 0, 0]]
        ctypes = [('Floor',), ('Wall',)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.player = self.level.add_sprite('Player', (0, 1))
        self.crate = self.level.add_sprite('Crate', (1, 1))

        self.celltime = 1000 / self.player.speed  # time to move 1 cell


    def test_player_enters_cells_with_movables(self):
        self.player.attempt_move(1)
        self.assertEqual(self.player.to_move, 1)


    def test_player_pushes_movable_objects(self):
        self.player.attempt_move(1)
        self.assertIn(self.crate, self.player.pushing)


    def test_player_moves_pushed_objects(self):
        self.level.update_level(self.celltime, [('move', 1)])
        self.assertEqual(self.crate.pos, (2, 1))


    def test_player_doesnt_push_movable_with_solid_in_cell_behind(self):
        self.level.add_sprite('Robot', (2, 1.5))
        self.player.attempt_move(1)
        self.assertEqual(self.player.to_move, 0)


    def test_player_doesnt_push_movable_with_level_edge_behind(self):
        self.level.add_sprite('Crate', (0, 0))
        self.player.attempt_move(0)
        self.assertEqual(self.player.to_move, 0)


    def test_player_doesnt_push_without_passable_cell_behind_on_key_event(self):
        self.level.add_sprite('Crate', (0, 0))
        self.level.update_level(self.celltime, [('move', 0)])
        self.assertEqual(self.player.pos, (0, 1))


    def test_followers_move_when_player_moves(self):
        self.player.followers.add(self.crate)
        self.player.attempt_move(2)
        self.assertEqual(self.crate.to_move, 1)


    def test_followers_move_toward_players_last_position(self):
        self.player.followers.add(self.crate)
        self.player.attempt_move(2)
        self.assertEqual(self.crate.move_dir, 3)


    def test_player_picks_up_items_when_arriving_in_their_cell(self):
        key = self.level.add_sprite('Key', (0, 2))
        self.player.attempt_move(2)
        self.level.update_level(self.celltime)
        self.assertIn(key, self.player.carrying)


    def test_carried_items_move_with_player(self):
        key = self.level.add_sprite('Key', (0, 1))
        self.player.carrying.add(key)
        self.player.attempt_move(2)
        self.level.update_level(self.celltime)
        self.assertEqual(key.pos, (0, 2))


    def test_player_starts_moving_after_move_event(self):
        self.player.handle_action('move', 2)
        self.player.start_turn()
        self.assertEqual(self.player.to_move, 1)


    def test_player_moves_after_move_event(self):
        self.level.update_level(self.celltime, [('move', 2)])
        self.assertEqual(self.player.pos, (0, 2))


    def test_player_keeps_moving_until_key_released(self):
        self.level.update_level(self.celltime, [('move', 2)])
        self.level.update_level(self.celltime)
        self.assertEqual(self.player.pos, (0, 3))


    def test_player_stops_moving_when_key_released(self):
        self.level.update_level(self.celltime, [('move', 2)])
        self.level.update_level(self.celltime)
        self.level.update_level(self.celltime, [('move', 2, False)])
        self.assertEqual(self.player.pos, (0, 3))


    def test_player_keeps_moving_in_1st_direction_when_2nd_key_pressed(self):
        self.level.update_level(self.celltime, [('move', 2)])
        self.level.update_level(self.celltime, [('move', 1)])
        self.assertEqual(self.player.pos, (0, 3))


    def test_player_starts_moving_in_2nd_direction_when_1st_key_released(self):
        self.level.update_level(self.celltime, [('move', 2)])
        self.level.update_level(self.celltime, [('move', 1)])
        self.level.update_level(self.celltime, [('move', 2, False)])
        self.assertEqual(self.player.pos, (1, 3))
Esempio n. 9
0
class Test_Shooter(unittest.TestCase):
    def setUp(self):
        cells = [[0, 0, 0, 1, 0], [0, 0, 0, 0, 0]]
        ctypes = [("Floor",), ("Wall",)]
        self.level = Level(MockDataFile(cells, ctypes))

        self.player = self.level.add_sprite("Player", (1, 0))
        self.level.add_sprite("Shooter", (0, 0), 1)

    def test_shooter_kills_player_in_front(self):
        self.level.update_level()
        self.assertNotIn(self.player, self.level.sprites)

    def test_shooter_kills_rover_in_front(self):
        self.player.pos = (2, 0)
        rover = self.level.add_sprite("Rover", (1, 0))
        self.level.update_level()
        self.assertNotIn(rover, self.level.sprites)

    def test_shooter_kills_player_farther_in_front(self):
        self.player.pos = (2, 0)
        self.level.update_level()
        self.assertNotIn(self.player, self.level.sprites)

    def test_shooter_doesnt_kill_player_beside(self):
        self.player.pos = (0, 1)
        self.level.update_level()
        self.assertIn(self.player, self.level.sprites)

    def test_shooter_doesnt_kill_player_behind_wall(self):
        self.player.pos = (4, 0)
        self.level.update_level()
        self.assertIn(self.player, self.level.sprites)

    def test_shooter_doesnt_kill_player_behind_crate(self):
        self.player.pos = (2, 0)
        self.level.add_sprite("Crate", (1, 0))
        self.level.update_level()
        self.assertIn(self.player, self.level.sprites)