Source code for evennia.contrib.tutorials.evadventure.tests.test_dungeon
"""
Test Dungeon orchestrator / procedurally generated dungeon rooms.
"""
from unittest.mock import MagicMock
from evennia.utils.create import create_object
from evennia.utils.test_resources import BaseEvenniaTest
from evennia.utils.utils import inherits_from
from .. import dungeon
from .mixins import EvAdventureMixin
[docs]class TestDungeon(EvAdventureMixin, BaseEvenniaTest):
"""
Test with a starting room and a character moving through the dungeon,
generating more and more rooms as they go.
"""
[docs] def setUp(self):
"""
Create a start room with exits leading away from it
"""
super().setUp()
droomclass = dungeon.EvAdventureDungeonStartRoom
droomclass.recycle_time = 0 # disable the tick
droomclass.branch_check_time = 0
self.start_room = create_object(droomclass, key="bottom of well")
self.assertEqual(
self.start_room.scripts.get("evadventure_dungeon_startroom_resetter")[0].interval, -1
)
self.start_north = create_object(
dungeon.EvAdventureDungeonStartRoomExit,
key="north",
location=self.start_room,
destination=self.start_room,
)
self.start_north
self.start_south = create_object(
dungeon.EvAdventureDungeonStartRoomExit,
key="south",
location=self.start_room,
destination=self.start_room,
)
self.character.location = self.start_room
def _move_character(self, direction):
old_location = self.character.location
for exi in old_location.exits:
if exi.key == direction:
# by setting target to old-location we trigger the
# special behavior of this Exit type
exi.at_traverse(self.character, exi.destination)
break
return self.character.location
[docs] def test_start_room(self):
"""
Test move through one of the start room exits.
"""
# begin in start room
self.assertEqual(self.character.location, self.start_room)
# first go north, this should generate a new room
new_room_north = self._move_character("north")
self.assertNotEqual(self.start_room, new_room_north)
self.assertTrue(inherits_from(new_room_north, dungeon.EvAdventureDungeonRoom))
# check if Orchestrator was created
orchestrator = new_room_north.db.dungeon_orchestrator
self.assertTrue(bool(orchestrator))
self.assertTrue(orchestrator.key.startswith("dungeon_orchestrator_north_"))
[docs] def test_different_start_directions(self):
# first go north, this should generate a new room
new_room_north = self._move_character("north")
self.assertNotEqual(self.start_room, new_room_north)
# back to start room
start_room = self._move_character("south")
self.assertEqual(self.start_room, start_room)
# next go south, this should generate a new room
new_room_south = self._move_character("south")
self.assertNotEqual(self.start_room, new_room_south)
self.assertNotEqual(new_room_north, new_room_south)
# back to start room again
start_room = self._move_character("north")
self.assertEqual(self.start_room, start_room)