##// END OF EJS Templates
FIX: bare functions in callback registry on bogus unregister...
FIX: bare functions in callback registry on bogus unregister 7de483b5fdaa99fa289b418ce0efc5102287ba64 added checking for the case where the callback was wrapped by backcall, however if there are un-wrapped functions registered and a non-registered function is attempted to be unregistered then this fails by raise an uncaught AttributeError.

File last commit:

r23997:7de483b5
r24005:7775e29e
Show More
test_events.py
73 lines | 2.2 KiB | text/x-python | PythonLexer
Fabio Niephaus
Use `backcall` and introduce `ExecutionRequest`
r23996 from backcall import callback_prototype
Thomas Kluyver
Add tests for callback infrastructure
r15601 import unittest
Srinivas Reddy Thatiparthy
remove code specific to python2
r23063 from unittest.mock import Mock
Thomas Kluyver
Add tests for callback infrastructure
r15601
Thomas Kluyver
Rename callbacks -> events (mostly), fire -> trigger
r15605 from IPython.core import events
Thomas Kluyver
Add tests for callback infrastructure
r15601 import IPython.testing.tools as tt
Fabio Niephaus
Use `backcall` and introduce `ExecutionRequest`
r23996
Fabio Niephaus
Ensure post event callbacks are always called....
r23982 @events._define_event
Thomas Kluyver
Add tests for callback infrastructure
r15601 def ping_received():
pass
Fabio Niephaus
Use `backcall` and introduce `ExecutionRequest`
r23996
Fabio Niephaus
Ensure post event callbacks are always called....
r23982 @events._define_event
def event_with_argument(argument):
pass
Fabio Niephaus
Use `backcall` and introduce `ExecutionRequest`
r23996
Thomas Kluyver
Add tests for callback infrastructure
r15601 class CallbackTests(unittest.TestCase):
def setUp(self):
Fabio Niephaus
Ensure post event callbacks are always called....
r23982 self.em = events.EventManager(get_ipython(), {'ping_received': ping_received, 'event_with_argument': event_with_argument})
Thomas Kluyver
Add tests for callback infrastructure
r15601
def test_register_unregister(self):
cb = Mock()
Thomas Kluyver
Rename callbacks -> events (mostly), fire -> trigger
r15605 self.em.register('ping_received', cb)
self.em.trigger('ping_received')
Thomas Kluyver
Add tests for callback infrastructure
r15601 self.assertEqual(cb.call_count, 1)
Thomas Kluyver
Rename callbacks -> events (mostly), fire -> trigger
r15605 self.em.unregister('ping_received', cb)
self.em.trigger('ping_received')
Thomas Kluyver
Add tests for callback infrastructure
r15601 self.assertEqual(cb.call_count, 1)
def test_cb_error(self):
cb = Mock(side_effect=ValueError)
Thomas Kluyver
Rename callbacks -> events (mostly), fire -> trigger
r15605 self.em.register('ping_received', cb)
Thomas Kluyver
Add tests for callback infrastructure
r15601 with tt.AssertPrints("Error in callback"):
Nathaniel J. Smith
Remove EventManager reset methods, because they violate encapsulation....
r18547 self.em.trigger('ping_received')
Craig Citro
Make event triggering robust to (un)registration....
r22317
def test_unregister_during_callback(self):
invoked = [False] * 3
def func1(*_):
invoked[0] = True
self.em.unregister('ping_received', func1)
self.em.register('ping_received', func3)
def func2(*_):
invoked[1] = True
self.em.unregister('ping_received', func2)
def func3(*_):
invoked[2] = True
self.em.register('ping_received', func1)
self.em.register('ping_received', func2)
self.em.trigger('ping_received')
self.assertEqual([True, True, False], invoked)
self.assertEqual([func3], self.em.callbacks['ping_received'])
Fabio Niephaus
Ensure post event callbacks are always called....
r23982
def test_ignore_event_arguments_if_no_argument_required(self):
call_count = [0]
def event_with_no_argument():
call_count[0] += 1
Fabio Niephaus
Use `backcall` and introduce `ExecutionRequest`
r23996 self.em.register('event_with_argument', event_with_no_argument)
Fabio Niephaus
Ensure post event callbacks are always called....
r23982 self.em.trigger('event_with_argument', 'the argument')
self.assertEqual(call_count[0], 1)
self.em.unregister('event_with_argument', event_with_no_argument)
self.em.trigger('ping_received')
self.assertEqual(call_count[0], 1)