Task_Handler unit test, after completion time only
Unit test for task handler tasks that complete after delay time. Required creating local reference for a clock. All evennia unit tests pass with `evennia test evennia`. All of my projects unit tests passed. They have a very heavy usage of reactor. Verified delays working with project manually Moving forward with creating method to call callbacks early.
This commit is contained in:
parent
f62ff2015f
commit
1a18b247e2
2 changed files with 17 additions and 5 deletions
|
|
@ -29,11 +29,17 @@ class TaskHandler(object):
|
||||||
`evennia.scripts.taskhandler.TASK_HANDLER`, which contains one
|
`evennia.scripts.taskhandler.TASK_HANDLER`, which contains one
|
||||||
instance of this class, and use its `add` and `remove` methods.
|
instance of this class, and use its `add` and `remove` methods.
|
||||||
|
|
||||||
|
Dev notes:
|
||||||
|
deferLater creates an instance of IDelayedCall using reactor.callLater.
|
||||||
|
deferLater uses the cancel method on the IDelayedCall instance to create
|
||||||
|
the defer instance it returns.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.tasks = {}
|
self.tasks = {}
|
||||||
self.to_save = {}
|
self.to_save = {}
|
||||||
|
self.clock = reactor
|
||||||
|
|
||||||
def load(self):
|
def load(self):
|
||||||
"""Load from the ServerConfig.
|
"""Load from the ServerConfig.
|
||||||
|
|
@ -170,10 +176,10 @@ class TaskHandler(object):
|
||||||
callback = self.do_task
|
callback = self.do_task
|
||||||
args = [task_id]
|
args = [task_id]
|
||||||
kwargs = {}
|
kwargs = {}
|
||||||
deferLater(reactor, timedelay, callback, *args, **kwargs)
|
deferLater(self.clock, timedelay, callback, *args, **kwargs)
|
||||||
return task_id
|
return task_id
|
||||||
|
|
||||||
return deferLater(reactor, timedelay, callback, *args, **kwargs)
|
return deferLater(self.clock, timedelay, callback, *args, **kwargs)
|
||||||
|
|
||||||
def remove(self, task_id):
|
def remove(self, task_id):
|
||||||
"""Remove a persistent task without executing it.
|
"""Remove a persistent task without executing it.
|
||||||
|
|
@ -219,7 +225,7 @@ class TaskHandler(object):
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
for task_id, (date, callbac, args, kwargs) in self.tasks.items():
|
for task_id, (date, callbac, args, kwargs) in self.tasks.items():
|
||||||
seconds = max(0, (date - now).total_seconds())
|
seconds = max(0, (date - now).total_seconds())
|
||||||
deferLater(reactor, seconds, self.do_task, task_id)
|
deferLater(self.clock, seconds, self.do_task, task_id)
|
||||||
|
|
||||||
|
|
||||||
# Create the soft singleton
|
# Create the soft singleton
|
||||||
|
|
|
||||||
|
|
@ -326,9 +326,15 @@ class TestDelay(EvenniaTest):
|
||||||
global _TASK_HANDLER
|
global _TASK_HANDLER
|
||||||
if _TASK_HANDLER is None:
|
if _TASK_HANDLER is None:
|
||||||
from evennia.scripts.taskhandler import TASK_HANDLER as _TASK_HANDLER
|
from evennia.scripts.taskhandler import TASK_HANDLER as _TASK_HANDLER
|
||||||
|
_TASK_HANDLER.clock = task.Clock()
|
||||||
self.char1.ndb.dummy_var = False
|
self.char1.ndb.dummy_var = False
|
||||||
# test a persistent deferral
|
# test a persistent deferral, that completes after delay time
|
||||||
task_id = utils.delay(1, dummy_func, self.char1.dbref, persistent=True)
|
task_id = utils.delay(1, dummy_func, self.char1.dbref, persistent=True)
|
||||||
_TASK_HANDLER.do_task(task_id) # run the deferred task
|
_TASK_HANDLER.clock.advance(1) # make time pass
|
||||||
|
self.assertEqual(self.char1.ndb.dummy_var, 'dummy_func ran')
|
||||||
|
self.char1.ndb.dummy_var = False
|
||||||
|
# test a non persisten deferral, that completes after delay time.
|
||||||
|
deferal_inst = utils.delay(1, dummy_func, self.char1.dbref)
|
||||||
|
_TASK_HANDLER.clock.advance(1) # make time pass
|
||||||
self.assertEqual(self.char1.ndb.dummy_var, 'dummy_func ran')
|
self.assertEqual(self.char1.ndb.dummy_var, 'dummy_func ran')
|
||||||
self.char1.ndb.dummy_var = False
|
self.char1.ndb.dummy_var = False
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue