Something went wrong on our end
Forked from
FSL / fslpy
849 commits behind the upstream repository.
-
Paul McCarthy authoredPaul McCarthy authored
test_notifier.py 4.86 KiB
#!/usr/bin/env python
#
# test_notifier.py -
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#
import pytest
import fsl.utils.notifier as notifier
def test_normal_usage():
class Thing(notifier.Notifier):
pass
t = Thing()
default_called = []
topic_called = []
def default_callback(thing, topic, value):
default_called.append((thing, topic, value))
def topic_callback(thing, topic, value):
topic_called.append((thing, topic, value))
t.register('default_callback', default_callback)
t.register('topic_callback', topic_callback, topic='topic')
with pytest.raises(notifier.Registered):
t.register('default_callback', default_callback)
with pytest.raises(notifier.Registered):
t.register('topic_callback', topic_callback, topic='topic')
t.notify()
t.notify(value='value')
t.notify(topic='topic')
t.notify(topic='topic', value='value')
# Invalid names are ignored when deregistering
t.deregister('default_callback')
t.deregister('default_callback')
t.deregister('topic_callback', topic='topic')
t.deregister('topic_callback', topic='topic')
t.notify()
t.notify(value='value')
t.notify(topic='topic')
t.notify(topic='topic', value='value')
assert len(default_called) == 4
assert len(topic_called) == 2
assert default_called[0] == (t, None, None)
assert default_called[1] == (t, None, 'value')
assert default_called[2] == (t, 'topic', None)
assert default_called[3] == (t, 'topic', 'value')
assert topic_called[ 0] == (t, 'topic', None)
assert topic_called[ 1] == (t, 'topic', 'value')
def test_enable_disable():
class Thing(notifier.Notifier):
pass
t = Thing()
default_called = [0]
topic_called = [0]
def default_callback(*a):
default_called[0] += 1
def topic_callback(*a):
topic_called[0] += 1
t.register('default_callback', default_callback)
t.register('topic_callback', topic_callback, topic='topic')
t.notify()
t.notify(topic='topic')
assert default_called[0] == 2
assert topic_called[ 0] == 1
t.disable('default_callback')
assert t.isEnabled('topic_callback', topic='topic')
assert not t.isEnabled('default_callback')
t.notify()
t.notify(topic='topic')
t.enable('default_callback')
assert default_called[0] == 2
assert topic_called[ 0] == 2
t.disable('topic_callback', topic='topic')
assert not t.isEnabled('topic_callback', topic='topic')
assert t.isEnabled('default_callback')
t.notify()
t.notify(topic='topic')
t.enable('topic_callback', topic='topic')
assert default_called[0] == 4
assert topic_called[ 0] == 2
assert t.isEnabled('topic_callback', topic='topic')
assert t.isEnabled('default_callback')
t.notify()
t.notify(topic='topic')
assert default_called[0] == 6
assert topic_called[ 0] == 3
t.disableAll()
assert not t.isAllEnabled()
t.notify()
t.notify(topic='topic')
t.enableAll()
assert default_called[0] == 6
assert topic_called[ 0] == 3
t.disableAll('topic')
assert not t.isAllEnabled('topic')
t.notify()
t.notify(topic='topic')
t.enableAll()
assert default_called[0] == 8
assert topic_called[ 0] == 3
def test_skip():
class Thing(notifier.Notifier):
pass
t = Thing()
default_called = [0]
topic_called = [0]
def default_callback(*a):
default_called[0] += 1
def topic_callback(*a):
topic_called[0] += 1
t.register('default_callback', default_callback)
t.register('topic_callback', topic_callback, topic='topic')
t.notify()
t.notify(topic='topic')
assert default_called[0] == 2
assert topic_called[ 0] == 1
with t.skip('default_callback'):
t.notify()
t.notify(topic='topic')
assert default_called[0] == 2
assert topic_called[ 0] == 2
t.notify()
t.notify(topic='topic')
assert default_called[0] == 4
assert topic_called[ 0] == 3
with t.skip('topic_callback', 'topic'):
t.notify()
t.notify(topic='topic')
assert default_called[0] == 6
assert topic_called[ 0] == 3
t.notify()
t.notify(topic='topic')
assert default_called[0] == 8
assert topic_called[ 0] == 4
with t.skipAll():
t.notify()
t.notify(topic='topic')
assert default_called[0] == 8
assert topic_called[ 0] == 4
t.notify()
t.notify(topic='topic')
assert default_called[0] == 10
assert topic_called[ 0] == 5
with t.skipAll('topic'):
t.notify()
t.notify(topic='topic')
assert default_called[0] == 12
assert topic_called[ 0] == 5
t.notify()
t.notify(topic='topic')
assert default_called[0] == 14
assert topic_called[ 0] == 6