From f52857e3a0fd9cc312095fa7c6bbc53a60426b17 Mon Sep 17 00:00:00 2001
From: Paul McCarthy <pauld.mccarthy@gmail.com>
Date: Mon, 10 Apr 2017 17:06:06 +0100
Subject: [PATCH] Notifier unit tests

---
 tests/test_notifier.py | 199 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 199 insertions(+)
 create mode 100644 tests/test_notifier.py

diff --git a/tests/test_notifier.py b/tests/test_notifier.py
new file mode 100644
index 000000000..ac18d3faa
--- /dev/null
+++ b/tests/test_notifier.py
@@ -0,0 +1,199 @@
+#!/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(ValueError):
+        t.register('default_callback', default_callback)
+    with pytest.raises(ValueError):
+        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
-- 
GitLab