test_events.py
73 lines
| 2.2 KiB
| text/x-python
|
PythonLexer
Fabio Niephaus
|
r23996 | from backcall import callback_prototype | ||
Thomas Kluyver
|
r15601 | import unittest | ||
Srinivas Reddy Thatiparthy
|
r23063 | from unittest.mock import Mock | ||
Thomas Kluyver
|
r15601 | |||
Thomas Kluyver
|
r15605 | from IPython.core import events | ||
Thomas Kluyver
|
r15601 | import IPython.testing.tools as tt | ||
Fabio Niephaus
|
r23996 | |||
Fabio Niephaus
|
r23982 | @events._define_event | ||
Thomas Kluyver
|
r15601 | def ping_received(): | ||
pass | ||||
Fabio Niephaus
|
r23996 | |||
Fabio Niephaus
|
r23982 | @events._define_event | ||
def event_with_argument(argument): | ||||
pass | ||||
Fabio Niephaus
|
r23996 | |||
Thomas Kluyver
|
r15601 | class CallbackTests(unittest.TestCase): | ||
def setUp(self): | ||||
Fabio Niephaus
|
r23982 | self.em = events.EventManager(get_ipython(), {'ping_received': ping_received, 'event_with_argument': event_with_argument}) | ||
Thomas Kluyver
|
r15601 | |||
def test_register_unregister(self): | ||||
cb = Mock() | ||||
Thomas Kluyver
|
r15605 | self.em.register('ping_received', cb) | ||
self.em.trigger('ping_received') | ||||
Thomas Kluyver
|
r15601 | self.assertEqual(cb.call_count, 1) | ||
Thomas Kluyver
|
r15605 | self.em.unregister('ping_received', cb) | ||
self.em.trigger('ping_received') | ||||
Thomas Kluyver
|
r15601 | self.assertEqual(cb.call_count, 1) | ||
def test_cb_error(self): | ||||
cb = Mock(side_effect=ValueError) | ||||
Thomas Kluyver
|
r15605 | self.em.register('ping_received', cb) | ||
Thomas Kluyver
|
r15601 | with tt.AssertPrints("Error in callback"): | ||
Nathaniel J. Smith
|
r18547 | self.em.trigger('ping_received') | ||
Craig Citro
|
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
|
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
|
r23996 | self.em.register('event_with_argument', event_with_no_argument) | ||
Fabio Niephaus
|
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) | ||||