diff --git a/evennia/contrib/slow_exit.py b/evennia/contrib/slow_exit.py index 1994a87b67..c120728479 100644 --- a/evennia/contrib/slow_exit.py +++ b/evennia/contrib/slow_exit.py @@ -73,7 +73,7 @@ class SlowExit(DefaultExit): traversing_object.msg("You start moving %s at a %s." % (self.key, move_speed)) # create a delayed movement - deferred = utils.delay(move_delay, callback=move_callback) + deferred = utils.delay(move_delay, move_callback) # we store the deferred on the character, this will allow us # to abort the movement. We must use an ndb here since # deferreds cannot be pickled. diff --git a/evennia/contrib/tests.py b/evennia/contrib/tests.py index ff6b1b7767..9fe28e17f7 100644 --- a/evennia/contrib/tests.py +++ b/evennia/contrib/tests.py @@ -8,7 +8,7 @@ import sys import datetime from django.test import override_settings from evennia.commands.default.tests import CommandTest -from evennia.utils.test_resources import EvenniaTest +from evennia.utils.test_resources import EvenniaTest, mockdelay, mockdeferLater from mock import Mock, patch # Testing of rplanguage module @@ -809,13 +809,19 @@ from evennia.contrib import slow_exit slow_exit.MOVE_DELAY = {"stroll": 0, "walk": 0, "run": 0, "sprint": 0} +def _cancellable_mockdelay(time, callback, *args, **kwargs): + callback(*args, **kwargs) + return Mock() + class TestSlowExit(CommandTest): + @patch("evennia.utils.delay", _cancellable_mockdelay) def test_exit(self): exi = create_object(slow_exit.SlowExit, key="slowexit", location=self.room1, destination=self.room2) exi.at_traverse(self.char1, self.room2) self.call(slow_exit.CmdSetSpeed(), "walk", "You are now walking.") self.call(slow_exit.CmdStop(), "", "You stop moving.") + # test talking npc contrib @@ -858,23 +864,8 @@ from twisted.internet.base import DelayedCall DelayedCall.debug = True -def _mockdelay(tim, func, *args, **kwargs): - func(*args, **kwargs) - return MagicMock() - - -def _mockdeferLater(reactor, timedelay, callback, *args, **kwargs): - callback(*args, **kwargs) - return MagicMock() - - class TestTutorialWorldObjects(TwistedTestCase, CommandTest): - def setUp(self): - self.patch(sys.modules['evennia.contrib.tutorial_world.objects'], 'delay', _mockdelay) - self.patch(sys.modules['evennia.scripts.taskhandler'], 'deferLater', _mockdeferLater) - super(TestTutorialWorldObjects, self).setUp() - def test_tutorialobj(self): obj1 = create_object(tutobjects.TutorialObject, key="tutobj") obj1.reset() @@ -885,6 +876,7 @@ class TestTutorialWorldObjects(TwistedTestCase, CommandTest): 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) @@ -894,11 +886,15 @@ class TestTutorialWorldObjects(TwistedTestCase, CommandTest): obelisk = create_object(tutobjects.Obelisk, key="obelisk", location=self.room1) self.assertEqual(obelisk.return_appearance(self.char1).startswith("|cobelisk("), True) + @patch("evennia.contrib.tutorial_world.objects.delay", mockdelay) + @patch("evennia.scripts.taskhandler.deferLater", mockdeferLater) def test_lightsource(self): light = create_object(tutobjects.LightSource, key="torch", location=self.room1) self.call(tutobjects.CmdLight(), "", "A torch on the floor flickers and dies.|You light torch.", obj=light) self.assertFalse(light.pk) + @patch("evennia.contrib.tutorial_world.objects.delay", mockdelay) + @patch("evennia.scripts.taskhandler.deferLater", mockdeferLater) def test_crumblingwall(self): wall = create_object(tutobjects.CrumblingWall, key="wall", location=self.room1) self.assertFalse(wall.db.button_exposed) @@ -917,10 +913,7 @@ class TestTutorialWorldObjects(TwistedTestCase, CommandTest): # we patch out the delay, so these are closed immediately self.assertFalse(wall.db.button_exposed) self.assertFalse(wall.db.exit_open) - wall.reset() - wall.delete() - return wall.deferred - + 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") diff --git a/evennia/utils/test_resources.py b/evennia/utils/test_resources.py index a8abf8f7ee..2d810f9f75 100644 --- a/evennia/utils/test_resources.py +++ b/evennia/utils/test_resources.py @@ -3,9 +3,10 @@ Various helper resources for writing unittests. """ import sys +from twisted.internet.defer import Deferred from django.conf import settings from django.test import TestCase -from mock import Mock +from mock import Mock, patch from evennia.objects.objects import DefaultObject, DefaultCharacter, DefaultRoom, DefaultExit from evennia.accounts.accounts import DefaultAccount from evennia.scripts.scripts import DefaultScript @@ -15,6 +16,18 @@ from evennia.utils import create from evennia.utils.idmapper.models import flush_cache +# mocking of evennia.utils.utils.delay +def mockdelay(timedelay, callback, *args, **kwargs): + callback(*args, **kwargs) + return Deferred() + + +# mocking of twisted's deferLater +def mockdeferLater(reactor, timedelay, callback, *args, **kwargs): + callback(*args, **kwargs) + return Deferred() + + def unload_module(module): """ Reset import so one can mock global constants. @@ -49,6 +62,11 @@ def unload_module(module): del sys.modules[modulename] +def _mock_deferlater(reactor, timedelay, callback, *args, **kwargs): + callback(*args, **kwargs) + return Deferred() + + class EvenniaTest(TestCase): """ Base test for Evennia, sets up a basic environment. @@ -60,6 +78,7 @@ class EvenniaTest(TestCase): room_typeclass = DefaultRoom script_typeclass = DefaultScript + @patch("evennia.scripts.taskhandler.deferLater", _mock_deferlater) def setUp(self): """ Sets up testing environment