mirror of
https://github.com/evennia/evennia.git
synced 2026-04-05 23:47:16 +02:00
Add unittests to tutorial world mob, objects and most rooms as per #1105.
This commit is contained in:
parent
fd4f72f4d0
commit
5a723697e7
4 changed files with 108 additions and 10 deletions
|
|
@ -38,7 +38,7 @@ class CommandTest(EvenniaTest):
|
|||
Tests a command
|
||||
"""
|
||||
|
||||
def call(self, cmdobj, args, msg=None, cmdset=None, noansi=True, caller=None, receiver=None, cmdstring=None):
|
||||
def call(self, cmdobj, args, msg=None, cmdset=None, noansi=True, caller=None, receiver=None, cmdstring=None, obj=None):
|
||||
"""
|
||||
Test a command by assigning all the needed
|
||||
properties to cmdobj and running
|
||||
|
|
@ -58,7 +58,7 @@ class CommandTest(EvenniaTest):
|
|||
cmdobj.session = SESSIONS.session_from_sessid(1)
|
||||
cmdobj.player = self.player
|
||||
cmdobj.raw_string = cmdobj.key + " " + args
|
||||
cmdobj.obj = caller if caller else self.char1
|
||||
cmdobj.obj = obj or (caller if caller else self.char1)
|
||||
# test
|
||||
old_msg = receiver.msg
|
||||
try:
|
||||
|
|
|
|||
|
|
@ -624,7 +624,103 @@ from evennia.contrib import talking_npc
|
|||
|
||||
class TestTalkingNPC(CommandTest):
|
||||
def test_talkingnpc(self):
|
||||
create_object(talking_npc.TalkingNPC, key="npctalker", location=self.room1)
|
||||
npc = create_object(talking_npc.TalkingNPC, key="npctalker", location=self.room1)
|
||||
self.call(talking_npc.CmdTalk(), "","(You walk up and talk to Char.)|")
|
||||
npc.delete()
|
||||
|
||||
|
||||
# tests for the tutorial world
|
||||
|
||||
# test tutorial_world/mob
|
||||
|
||||
from evennia.contrib.tutorial_world import mob
|
||||
|
||||
class TestTutorialWorldMob(EvenniaTest):
|
||||
def test_mob(self):
|
||||
mobobj = create_object(mob.Mob, key="mob")
|
||||
self.assertEqual(mobobj.db.is_dead, True)
|
||||
mobobj.set_alive()
|
||||
self.assertEqual(mobobj.db.is_dead, False)
|
||||
mobobj.set_dead()
|
||||
self.assertEqual(mobobj.db.is_dead, True)
|
||||
mobobj._set_ticker(0, "foo", stop=True)
|
||||
#TODO should be expanded with further tests of the modes and damage etc.
|
||||
|
||||
# test tutorial_world/objects
|
||||
|
||||
from evennia.contrib.tutorial_world import objects as tutobjects
|
||||
|
||||
class TestTutorialWorldObjects(CommandTest):
|
||||
def test_tutorialobj(self):
|
||||
obj1 = create_object(tutobjects.TutorialObject, key="tutobj")
|
||||
obj1.reset()
|
||||
self.assertEqual(obj1.location, obj1.home)
|
||||
def test_readable(self):
|
||||
readable = create_object(tutobjects.Readable, key="book", location=self.room1)
|
||||
readable.db.readable_text = "Text to read"
|
||||
self.call(tutobjects.CmdRead(), "book","You read book:\n Text to read", obj=readable)
|
||||
def test_climbable(self):
|
||||
climbable = create_object(tutobjects.Climbable, key="tree", location=self.room1)
|
||||
self.call(tutobjects.CmdClimb(), "tree", "You climb tree. Having looked around, you climb down again.", obj=climbable)
|
||||
self.assertEqual(self.char1.tags.get("tutorial_climbed_tree", category="tutorial_world"), "tutorial_climbed_tree")
|
||||
def test_obelisk(self):
|
||||
obelisk = create_object(tutobjects.Obelisk, key="obelisk", location=self.room1)
|
||||
self.assertEqual(obelisk.return_appearance(self.char1).startswith("|cobelisk("), True)
|
||||
def test_lightsource(self):
|
||||
light = create_object(tutobjects.LightSource, key="torch", location=self.room1)
|
||||
self.call(tutobjects.CmdLight(), "", "You light torch.", obj=light)
|
||||
light._burnout()
|
||||
if hasattr(light, "deferred"):
|
||||
light.deferred.cancel()
|
||||
self.assertFalse(light.pk)
|
||||
def test_crumblingwall(self):
|
||||
wall = create_object(tutobjects.CrumblingWall, key="wall", location=self.room1)
|
||||
self.assertFalse(wall.db.button_exposed)
|
||||
self.assertFalse(wall.db.exit_open)
|
||||
wall.db.root_pos = {"yellow":0, "green":0,"red":0,"blue":0}
|
||||
self.call(tutobjects.CmdShiftRoot(), "blue root right",
|
||||
"You shove the root adorned with small blue flowers to the right.", obj=wall)
|
||||
self.call(tutobjects.CmdShiftRoot(), "red root left",
|
||||
"You shift the reddish root to the left.", obj=wall)
|
||||
self.call(tutobjects.CmdShiftRoot(), "yellow root down",
|
||||
"You shove the root adorned with small yellow flowers downwards.", obj=wall)
|
||||
self.call(tutobjects.CmdShiftRoot(), "green root up",
|
||||
"You shift the weedy green root upwards.|Holding aside the root you think you notice something behind it ...", obj=wall)
|
||||
self.call(tutobjects.CmdPressButton(), "",
|
||||
"You move your fingers over the suspicious depression, then gives it a decisive push. First", obj=wall)
|
||||
self.assertTrue(wall.db.button_exposed)
|
||||
self.assertTrue(wall.db.exit_open)
|
||||
wall.reset()
|
||||
if hasattr(wall, "deferred"):
|
||||
wall.deferred.cancel()
|
||||
wall.delete()
|
||||
def test_weapon(self):
|
||||
weapon = create_object(tutobjects.Weapon, key="sword", location=self.char1)
|
||||
self.call(tutobjects.CmdAttack(), "Char", "You stab with sword.", obj=weapon, cmdstring="stab")
|
||||
self.call(tutobjects.CmdAttack(), "Char", "You slash with sword.", obj=weapon, cmdstring="slash")
|
||||
def test_weaponrack(self):
|
||||
rack = create_object(tutobjects.WeaponRack, key="rack", location=self.room1)
|
||||
rack.db.available_weapons = ["sword"]
|
||||
self.call(tutobjects.CmdGetWeapon(), "", "You find Rusty sword.", obj=rack)
|
||||
|
||||
# test tutorial_world/
|
||||
from evennia.contrib.tutorial_world import rooms as tutrooms
|
||||
|
||||
class TestTutorialWorldRooms(CommandTest):
|
||||
def test_cmdtutorial(self):
|
||||
room = create_object(tutrooms.TutorialRoom, key="tutroom")
|
||||
self.char1.location = room
|
||||
self.call(tutrooms.CmdTutorial(), "", "Sorry, there is no tutorial help available here.")
|
||||
self.call(tutrooms.CmdTutorialSetDetail(), "detail;foo;foo2 = A detail", "Detail set: 'detail;foo;foo2': 'A detail'", obj=room)
|
||||
self.call(tutrooms.CmdTutorialLook(), "", "tutroom(", obj=room)
|
||||
self.call(tutrooms.CmdTutorialLook(), "detail", "A detail", obj=room)
|
||||
self.call(tutrooms.CmdTutorialLook(), "foo", "A detail", obj=room)
|
||||
room.delete()
|
||||
def test_weatherroom(self):
|
||||
room = create_object(tutrooms.WeatherRoom, key="weatherroom")
|
||||
room.update_weather()
|
||||
tutrooms.TICKER_HANDLER.remove(interval=room.db.interval, callback=room.update_weather, idstring="tutorial")
|
||||
room.delete()
|
||||
def test_introroom(self):
|
||||
room = create_object(tutrooms.IntroRoom, key="introroom")
|
||||
room.at_object_receive(self.char1, self.room1)
|
||||
|
|
|
|||
|
|
@ -367,8 +367,9 @@ class LightSource(TutorialObject):
|
|||
pass
|
||||
finally:
|
||||
# start the burn timer. When it runs out, self._burnout
|
||||
# will be called.
|
||||
utils.delay(60 * 3, self._burnout)
|
||||
# will be called. We store the deferred so it can be
|
||||
# killed in unittesting.
|
||||
self.deferred = utils.delay(60 * 3, self._burnout)
|
||||
return True
|
||||
|
||||
|
||||
|
|
@ -636,9 +637,10 @@ class CrumblingWall(TutorialObject, DefaultExit):
|
|||
self.caller.msg("The exit leads nowhere, there's just more stone behind it ...")
|
||||
else:
|
||||
self.destination = eloc[0]
|
||||
self.exit_open = True
|
||||
# start a 45 second timer before closing again
|
||||
utils.delay(45, self.reset)
|
||||
self.db.exit_open = True
|
||||
# start a 45 second timer before closing again. We store the deferred so it can be
|
||||
# killed in unittesting.
|
||||
self.deferred = utils.delay(45, self.reset)
|
||||
|
||||
def _translate_position(self, root, ipos):
|
||||
"""Translates the position into words"""
|
||||
|
|
|
|||
|
|
@ -313,8 +313,8 @@ class WeatherRoom(TutorialRoom):
|
|||
# subscribe ourselves to a ticker to repeatedly call the hook
|
||||
# "update_weather" on this object. The interval is randomized
|
||||
# so as to not have all weather rooms update at the same time.
|
||||
interval = random.randint(50, 70)
|
||||
TICKER_HANDLER.add(interval=interval, callback=self.update_weather, idstring="tutorial")
|
||||
self.db.interval = random.randint(50, 70)
|
||||
TICKER_HANDLER.add(interval=self.db.interval, callback=self.update_weather, idstring="tutorial")
|
||||
# this is parsed by the 'tutorial' command on TutorialRooms.
|
||||
self.db.tutorial_info = \
|
||||
"This room has a Script running that has it echo a weather-related message at irregular intervals."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue