def test_level_generator_is_created(self): """ Test that level generator is created for newly created portal """ level = Level(size = (20, 20), floor_type = self.floor_rock, wall_type = self.wall_empty) level_generator = mock(LevelGenerator) for loc_y in range(8, 12): for loc_x in range(8, 12): level.set_location_type((loc_x, loc_y), 'room') portal_adder = PortalAdder((1, 2), 'room', level_generator, self.rng) portal_adder.add_portal(level) portals = level.portals portal = level.portals[0] assert_that(portal.level_generator, is_(same_instance(level_generator)))
def test_portal_has_icons(self): """ Test that portal created by adder has two icons set One to display and another to be used by opposite end """ level = Level(size = (20, 20), floor_type = self.floor_rock, wall_type = self.wall_empty) level_generator = mock(LevelGenerator) for loc_y in range(8, 12): for loc_x in range(8, 12): level.set_location_type((loc_x, loc_y), 'room') portal_adder = PortalAdder((1, 2), 'room', level_generator, self.rng) portal_adder.add_portal(level) portals = level.portals portal = level.portals[0] assert_that(portal.icon, is_(equal_to(1))) assert_that(portal.other_end_icon, is_(equal_to(2)))
def test_add_stairs_to_room(self): """ Test that stairs can be added to a room """ level = Level(size = (20, 20), floor_type = self.floor_rock, wall_type = self.wall_empty) for loc_y in range(8, 12): for loc_x in range(8, 12): level.set_location_type((loc_x, loc_y), 'room') portal_adder = PortalAdder((1, 2), 'room', mock(), self.rng) portal_adder.add_portal(level) portals = level.portals assert_that(portals, has_length(1)) portal = level.portals[0] assert_that(located_in_room(portal), is_(True))
class TestLevel: """ Tests for Level """ def __init__(self): """ Default constructor """ self.level = None def setup(self): """ Setup test case """ self.level = Level(size = (20, 10)) def test_get_size(self): """ Test that Level can report size """ size = self.level.get_size() assert size == (21, 11) def test_get_rooms(self): """ Test that level can report what areas of it are marked as being room """ self.level.set_location_type((5, 5), 'room') self.level.set_location_type((5, 6), 'room') self.level.set_location_type((8, 8), 'room') self.level.set_location_type((9, 8), 'room') rooms = self.level.get_locations_by_type('room') assert_that(rooms, contains_inanyorder((5, 5), (5, 6), (8, 8), (9, 8))) def test_get_locations_by_type_does_not_report_all_locations(self): """ Test that getting locations by type does not return all locations """ self.level.set_location_type((5, 5), 'room') self.level.set_location_type((5, 6), 'room') self.level.set_location_type((8, 8), 'room') self.level.set_location_type((9, 8), 'room') self.level.set_location_type((6, 5), 'corridor') self.level.set_location_type((6, 6), 'corridor') self.level.set_location_type((6, 7), 'corridor') self.level.set_location_type((6, 8), 'corridor') rooms = self.level.get_locations_by_type('room') assert_that(rooms, contains_inanyorder((5, 5), (5, 6), (8, 8), (9, 8)))
class TestItemAdder(): """ Tests for ItemAdder """ def __init__(self): """ Default constructor """ self.rng = None self.level = None self.item_generator = None self.configuration = None self.item_adder = None self.floor_rock = None self.wall_empty = None def setup(self): """ Setup the test case """ self.floor_rock = 1 self.wall_empty = 2 self.rng = Random() self.level = Level((60, 40), self.floor_rock, self.wall_empty) self.level.set_location_type((10, 10), 'room') for x_loc in range(11, 30): self.level.set_location_type((x_loc, 10), 'corridor') item_config = ItemConfigurations(Random()) item_config.add_item( ItemConfiguration(name = 'dagger', cost = 2, weight = 1, icons = [500], types = ['weapon', 'light weapon', 'melee', 'simple weapon'], rarity = 'common', weapon_configration = WeaponConfiguration( damage = 2, critical_range = 11, critical_damage = 2, damage_types = ['piercing', 'slashing'], weapon_class = 'simple'))) item_config.add_item( ItemConfiguration(name = 'red potion', cost = 150, weight = 1, icons = [100], types = ['potion'], rarity = 'rare', effect_handles = [EffectHandle( trigger = 'on drink', effect = 'cure medium wounds', parameters = None, charges = 1)])) self.item_generator = ItemGenerator(item_config) self.configuration = ItemAdderConfiguration(['crypt']) self.configuration.add_item(min_amount = 3, max_amount = 4, name = 'dagger') self.configuration.add_item(min_amount = 1, max_amount = 1, type = 'potion', location = 'room') self.item_adder = ItemAdder(self.item_generator, self.configuration, self.rng) self.item_adder.add_items(self.level) def test_adding_items(self): """ Test basic case of adding items on the level """ assert_that(self.level.items, has_length(greater_than(3))) assert_that(self.level.items, has_length(less_than(6))) assert_that(self.level, does_have_item('dagger', greater_than_or_equal_to(3))) assert_that(self.level, does_have_item('red potion', 1)) def test_adding_to_location(self): """ Test that ItemAdder will use location types passed to it """ potion = [x for x in self.level.items if x.name == 'red potion'][0] location = potion.location assert_that(located_in_room(potion))
class TestCreatureAdder(): """ Tests for CreatureAdder """ def __init__(self): """ Default constructor """ self.rng = None self.level = None self.mock_action_factory = None self.creature_generator = None self.configuration = None self.creature_adder = None def setup(self): """ Setup the test case """ self.rng = random.Random() self.level = Level((60, 40)) self.level.set_location_type((10, 10), 'room') creature_config = CreatureConfigurations(self.rng) creature_config.add_creature( CreatureConfiguration(name = 'rat', body = 4, finesse = 12, mind = 2, hp = 2, speed = 2, icons = 1, attack = 2, ai = None)) creature_config.add_creature( CreatureConfiguration(name = 'dragon', body = 4, finesse = 12, mind = 2, hp = 2, speed = 2, icons = 1, attack = 2, ai = None)) self.mock_action_factory = mock() self.model = mock() self.creature_generator = CreatureGenerator(creature_config, self.model, self.mock_action_factory, self.rng) self.configuration = CreatureAdderConfiguration(['crypt']) self.configuration.add_creature(min_amount = 3, max_amount = 4, name = 'rat') self.configuration.add_creature(min_amount = 1, max_amount = 1, name = 'dragon', location = 'room') self.creature_adder = CreatureAdder(self.creature_generator, self.configuration, self.rng) self.creature_adder.add_creatures(self.level) def test_adding_creatures(self): """ Test basic case of adding creatures on the level """ assert_that(self.level.creatures, has_length(greater_than(3))) assert_that(self.level.creatures, has_length(less_than(6))) assert_that(self.level, has_creature('rat', greater_than_or_equal_to(3))) assert_that(self.level, has_creature('dragon', 1)) def test_adding_to_location(self): """ Test that CreatureAdder will use location types passed to it """ dragon = [x for x in self.level.creatures if x.name == 'dragon'][0] location = dragon.location assert_that(located_in_room(dragon))