def test_closest_tile_angle(self): game_state = GameState() building = Drill(Vector(1, 1), Vector(10, 10)) actual = building.closest_tile_angle(game_state) self.assertEqual(0, actual) game_state = GameState() game_state.tile_map.tiles[(1, 0)].tile_type = TileType.PATH actual = building.closest_tile_angle(game_state) self.assertEqual(0, actual) game_state = GameState() game_state.tile_map.tiles[(0, 1)].tile_type = TileType.PATH actual = building.closest_tile_angle(game_state) self.assertEqual(-90, actual) game_state = GameState() game_state.tile_map.tiles[(1, 2)].tile_type = TileType.PATH actual = building.closest_tile_angle(game_state) self.assertEqual(180, actual) game_state = GameState() game_state.tile_map.tiles[(2, 1)].tile_type = TileType.PATH actual = building.closest_tile_angle(game_state) self.assertEqual(90, actual)
def test_mouse_click_handler(self): tile_map = GameTileMap() click = MouseClick() click.position = Vector(1, 1) click.button = 0 actual = tile_map.mouse_click_handler(None, click) self.assertFalse(actual) tile_map = GameTileMap() click = MouseClick() click.position = Vector(1, 1) click.button = 1 actual = tile_map.mouse_click_handler(None, click) self.assertTrue(actual) self.assertTrue(tile_map.tiles[(0, 0)].highlighted) actual = tile_map.mouse_click_handler(None, click) self.assertTrue(actual) self.assertFalse(tile_map.tiles[(0, 0)].highlighted) tile_map = GameTileMap() tile_map.tiles[(0, 0)].tile_type = TileType.PATH click = MouseClick() click.position = Vector(1, 1) click.button = 1 actual = tile_map.mouse_click_handler(None, click) self.assertTrue(actual) self.assertFalse(tile_map.tiles[(0, 0)].highlighted)
def test_render_highlight(self): game_state = GameState() game_state.window_size = Vector(100, 100) was_called = [] def dummy(*args): was_called.append(0) batch = pyglet.graphics.Batch() batch.add = dummy position = Vector() size = Vector(10, 10) tile_type = TileType.BUILDING_GROUND tile = Tile(position, size, tile_type) tile.render_highlight(game_state, batch) self.assertEqual(4, len(was_called)) def dummy(*args): was_called.append(0) batch = pyglet.graphics.Batch() batch.add = dummy game_state = GameState() was_called.clear() position = Vector() size = Vector(10, 10) tile_type = TileType.BUILDING_GROUND tile = Tile(position, size, tile_type) tile.render_highlight(game_state, batch) self.assertEqual(0, len(was_called))
def test_eq(self): position = Vector() size = Vector() tile_type = TileType.BUILDING_GROUND tile = Tile(position, size, tile_type) self.assertEqual(tile, tile) self.assertNotEqual("", tile)
def test_update_entities(self): game_state = GameState() was_called = [] def update(*_): was_called.append(0) entity = Entity(Vector(), Vector(), EntityType.LARGE_BOULDER) entity.update = update entity_manager = EntityManager() entity_manager.entities = [entity] entity_manager.update_entities(game_state) self.assertEqual(1, len(was_called)) before_health = game_state.player_health game_state.tile_map.tiles[(0, 0)].tile_type = TileType.FINISH entity_manager.entities = [entity] entity_manager.update_entities(game_state) self.assertEqual(0, len(entity_manager.entities)) self.assertEqual(before_health - 1, game_state.player_health) game_state = GameState() entity.health = 0 entity.entity_type = EntityType.SMALL_BOULDER entity_manager.entities = [entity] entity_manager.update_entities(game_state) self.assertEqual(0, len(entity_manager.entities))
def test_update_with_entity_hit(self): game_state = GameState() entity = Entity(Vector(0, 0), Vector(10, 10), EntityType.LARGE_BOULDER) game_state.entity_manager.entities = [entity] bullet = Bullet(Vector(), Vector(10, 10), Vector(1, 1)) result = bullet.update(game_state) self.assertTrue(result)
def test_update_reset_animation_speed(self): game_state = GameState() game_state.window_size = Vector(100, 100) building = Drill(Vector(), Vector(10, 10)) building.animation_speed = 5 building.update(game_state) self.assertEqual(0, building.animation_speed)
def test_update(self): game_state = GameState() game_state.tile_map.tiles[(0, 0)].tile_type = TileType.PATH game_state.tile_map.tiles[(0, 0)].directions = [(1, 0)] game_state.entity_manager.update(game_state) entity = Entity(Vector(1, 1), Vector(10, 10), EntityType.LARGE_BOULDER) entity.update(game_state) self.assertEqual((1, 0), entity.next_tile_index)
def test_update_split_large_boulder(self): game_state = GameState() entity = Entity(Vector(), Vector(), EntityType.LARGE_BOULDER) entity.health = 0 entity_manager = EntityManager() entity_manager.entities = [entity] entity_manager.update_entities(game_state) self.assertEqual(2, len(entity_manager.entities))
def test_update_key_event_bottom_right(self): game_state = GameState() game_state.key_presses.down = True game_state.key_presses.right = True game_state.window_size = Vector(1280, 720) game_state.update() actual = game_state.world_offset self.assertEqual(Vector(95, 105), actual)
def test_update_key_event_top_left(self): game_state = GameState() game_state.key_presses.up = True game_state.key_presses.left = True game_state.window_size = Vector(1280, 720) game_state.update() actual = game_state.world_offset self.assertEqual(Vector(105, 95), actual)
def test_update_cancel(): game_state = GameState() entity = Entity(Vector(-100, -100), Vector(10, 10), EntityType.LARGE_BOULDER) entity.update(game_state) entity = Entity(Vector(1, 1), Vector(10, 10), EntityType.LARGE_BOULDER) entity.update(game_state)
def test_shoot(self): building_manager = BuildingManager() world_position = Vector() direction = Vector(1, 0) building_manager.shoot(world_position, direction) self.assertEqual(1, len(building_manager.bullets)) bullet = building_manager.bullets[0] self.assertEqual(world_position, bullet.position) self.assertEqual(direction * 5, bullet.velocity)
def test_calculate_movement(self): game_state = GameState() entity = Entity(Vector(50, 50), Vector(10, 10), EntityType.LARGE_BOULDER) entity.next_tile_index = (1, 0) entity.calculate_movement(game_state) self.assertEqual(Vector(2, 0), entity.velocity, str(entity.velocity)) self.assertEqual(Vector(52, 50), entity.position, str(entity.position))
def test_length(self): vec = Vector() self.assertEqual(0, vec.length()) vec = Vector(2, 0) self.assertEqual(2, vec.length()) vec = Vector(3, 4) self.assertEqual(5, vec.length())
def test_index_to_world_space(self): game_state = GameState() actual = game_state.index_to_world_space((0, 0)) self.assertEqual(Vector(0, 0), actual, str(actual)) actual = game_state.index_to_world_space((1, 0)) self.assertEqual(Vector(100, 0), actual, str(actual)) actual = game_state.index_to_world_space(Vector(1, 0)) self.assertEqual(Vector(100, 0), actual, str(actual))
def test_update(self): was_called = [] def shoot(*_): was_called.append(0) game_state = GameState() game_state.window_size = Vector(100, 100) game_state.building_manager.shoot = shoot # no enemy to shoot at building = Laser(Vector(), Vector(10, 10)) building.cool_down = 0 building.update(game_state) self.assertEqual(0, len(was_called)) # on cool down building = Laser(Vector(), Vector(10, 10)) building.cool_down = 100 building.update(game_state) self.assertEqual(0, len(was_called)) # shooting game_state.entity_manager.entities = [ Entity(Vector(150, 0), Vector(10, 10), EntityType.LARGE_BOULDER) ] building = Laser(Vector(), Vector(10, 10)) building.cool_down = 0 building.update(game_state) self.assertEqual(1, len(was_called))
def test_world_to_index_space(self): game_state = GameState() actual = game_state.world_to_index_space(Vector()) self.assertEqual((0, 0), actual, str(actual)) actual = game_state.world_to_index_space(Vector(100, 100)) self.assertEqual((1, 1), actual, str(actual)) actual = game_state.world_to_index_space(Vector(50, 50)) self.assertEqual((0, 0), actual, str(actual))
def test_is_clicked(self): click = MouseClick() click.position = Vector(1, 1) input_component = Input(Vector(0, 10), Vector(10, 10)) input_component.is_clicked(click) self.assertTrue(input_component.has_focus) input_component = Input(Vector(), Vector(10, 10)) input_component.is_clicked(click) self.assertFalse(input_component.has_focus)
def test_render_no_label(self): game_state = GameState() game_state.window_size = Vector(100, 100) position = Vector(1, 1) size = Vector(10, 10) tile_type = TileType.BUILDING_GROUND tile = Tile(position, size, tile_type) batch = pyglet.graphics.Batch() tile.render_label(game_state, batch) self.assertEqual(0, len(batch.top_groups))
def test_init(self): vec = Vector() self.assertEqual(0, vec.x) self.assertEqual(0, vec.y) vec = Vector(1, 2) self.assertEqual(1, vec.x) self.assertEqual(2, vec.y) vec = Vector(point=(1, 2)) self.assertEqual(1, vec.x) self.assertEqual(2, vec.y)
def test_is_clicked(self): click = MouseClick() click.position = Vector(1, 1) highlight_component = HighlightableLabel("", Vector(0, 10), Vector(10, 10)) highlight_component.is_clicked(click) self.assertTrue(highlight_component.is_highlighted) highlight_component = HighlightableLabel("", Vector(), Vector(10, 10)) highlight_component.is_clicked(click) self.assertFalse(highlight_component.is_highlighted)
def test_render(self): was_called = [] def dummy(): was_called.append(0) text_component = Label("Hello", Vector(), Vector()) text_component._label.draw = dummy text_component.render(Vector()) self.assertEqual(1, len(was_called)) text_component.visible = False text_component.render(Vector()) self.assertEqual(1, len(was_called))
def test_render(self): game_state = GameState() was_called = [] def render(*_): was_called.append(0) position = Vector() size = Vector() entity = Entity(position, size, EntityType.LARGE_BOULDER) entity.render = render entity_manager = EntityManager() entity_manager.entities = [entity] entity_manager.render(game_state) self.assertEqual(1, len(was_called))
def test_generate_tiles(self): tile_size = Vector(100, 100) def tile(x, y): return Tile(Vector(x, y), tile_size, TileType.BUILDING_GROUND) expected = { (0, 0): tile(0, 0), (1, 0): tile(1, 0), (0, 1): tile(0, 1), (1, 1): tile(1, 1) } max_tiles = Vector(2, 2) actual = TileMap.generate_tiles(max_tiles, tile_size) self.assertEqual(expected, actual)
def test_spawn_building(self): game_state = GameState() tile_index = (1, 0) building_manager = BuildingManager() building_manager.spawn_building(game_state, tile_index, BuildingType.LASER) self.assertEqual(1, len(building_manager.buildings)) self.assertEqual((1, 0), list(building_manager.buildings.keys())[0]) building = building_manager.buildings[(1, 0)] self.assertEqual(Vector(1, 0), building.position) self.assertEqual(Laser, type(building)) building_manager.spawn_building(game_state, tile_index, BuildingType.DRILL) self.assertEqual(Drill, type(building_manager.buildings[(1, 0)])) building_manager.spawn_building(game_state, tile_index, BuildingType.HAMMER) self.assertEqual(Hammer, type(building_manager.buildings[(1, 0)])) building_manager.spawn_building(game_state, tile_index, -1) self.assertEqual(Building, type(building_manager.buildings[(1, 0)])) building_manager = BuildingManager() building_manager.gold = 0 building_manager.spawn_building(game_state, tile_index, BuildingType.HAMMER) self.assertEqual(0, len(building_manager.buildings.keys()))
def test_mouse_click_handler_not_on_map(self): tile_map = TileMap() click = MouseClick() click.position = Vector(-1, -1) actual = tile_map.mouse_click_handler(None, click) expected = False self.assertEqual(expected, actual)
def test_open(self): game_state = GameState() game_state.window_size = Vector(0, 500) dialog = Dialog(True) dialog.open(game_state) self.assertTrue(dialog.visible) self.assertEqual(300, dialog.position.y)
def test_render(self): game_state = GameState() game_state.init("./tower_defense/res") game_state.window_size = Vector(100, 100) building = Hammer(Vector(), Vector(10, 10)) batch = pyglet.graphics.Batch() building.render(game_state, batch) self.assertEqual(1, len(batch.top_groups)) self.assertEqual(pyglet.graphics.TextureGroup, type(batch.top_groups[0])) building = Hammer(Vector(20, 20), Vector(10, 10)) batch = pyglet.graphics.Batch() building.render(game_state, batch) self.assertEqual(0, len(batch.top_groups))
def test_process_clicks(self): game_state = GameState() game_state.mouse_clicks.append(MouseClick()) def false_processor(game_state, mouse_click): return False process_clicks(game_state, false_processor) self.assertEqual(1, len(game_state.mouse_clicks)) def offset_processor(game_state, mouse_click): self.assertEqual(Vector(-10, -10), mouse_click.position) return False process_clicks(game_state, offset_processor, map_to_world_space=False, offset=Vector(10, 10)) self.assertEqual(1, len(game_state.mouse_clicks)) def true_processor(game_state, mouse_click): return True process_clicks(game_state, true_processor) self.assertEqual(0, len(game_state.mouse_clicks))