Package elisa :: Package core :: Package tests :: Module test_message_bus
[hide private]
[frames] | no frames]

Source Code for Module elisa.core.tests.test_message_bus

  1  # Elisa - Home multimedia server 
  2  # Copyright (C) 2006-2008 Fluendo Embedded S.L. (www.fluendo.com). 
  3  # All rights reserved. 
  4  # 
  5  # This file is available under one of two license agreements. 
  6  # 
  7  # This file is licensed under the GPL version 3. 
  8  # See "LICENSE.GPL" in the root of this distribution including a special 
  9  # exception to use Elisa with Fluendo's plugins. 
 10  # 
 11  # The GPL part of Elisa is also available under a commercial licensing 
 12  # agreement from Fluendo. 
 13  # See "LICENSE.Elisa" in the root directory of this distribution package 
 14  # for details on that license. 
 15   
 16  from twisted.trial import unittest 
 17  from elisa.core.tests.elisa_test_case import ElisaTestCase 
 18  from elisa.core import log 
 19   
 20  from elisa.core.bus import bus, bus_message 
 21  from twisted.internet import defer, reactor 
 22  import platform 
 23   
24 -class DataMessage(bus_message.Message):
25 - def __init__(self, data):
26 bus_message.Message.__init__(self) 27 self.data = data
28
29 -class FooMessage(bus_message.Message):
30 - def __init__(self, foo):
31 bus_message.Message.__init__(self) 32 self.foo = foo
33 34
35 -class TestMessageBus(ElisaTestCase):
36
37 - def __init__(self, methodName='runTest'):
38 ElisaTestCase.__init__(self, methodName) 39 if platform.system() == 'Windows': 40 self.skip = "test not supported under windows (Twisted lock)"
41
42 - def setUp(self):
43 ElisaTestCase.setUp(self) 44 self._bus = bus.Bus() 45 self._bus.start()
46
47 - def tearDown(self):
48 ElisaTestCase.setUp(self) 49 self._bus.stop()
50
51 - def test_delayed_dispatch(self):
52 global received_messages 53 received_messages = [] 54 mybus = bus.Bus() 55 56 def on_message(message, sender): 57 global received_messages 58 received_messages.append(message)
59 60 mybus.register(on_message) 61 62 for i in range(5): 63 data = '%s. Hello you' % i 64 mybus.send_message(DataMessage(data), sender=self) 65 66 def done(): 67 global received_messages 68 self.assertEqual(len(received_messages), 5) 69 mybus.unregister(on_message) 70 mybus.stop()
71 72 mybus.start() 73 reactor.callFromThread(done) 74
75 - def test_simple_emit(self):
76 """ Check a message receiver callback correctly gets called on 77 message bus dispatch. 78 """ 79 global received_messages 80 received_messages = [] 81 82 def on_message(message, sender): 83 global received_messages 84 received_messages.append(message)
85 86 self._bus.register(on_message) 87 88 for i in range(5): 89 self._bus.send_message(DataMessage("data"), sender=self) 90 91 def done(): 92 global received_messages 93 self.assertEqual(len(received_messages), 5) 94 95 reactor.callFromThread(done) 96
97 - def test_message_filter(self):
98 """ 99 """ 100 global received_messages 101 received_messages = [] 102 103 def on_message(message, sender): 104 global received_messages 105 received_messages.append(message)
106 107 self._bus.register(on_message, FooMessage) 108 109 for i in range(5): 110 data = '%s. Hello you' % i 111 self._bus.send_message(DataMessage(data), sender=self) 112 113 global sent_foo_messages 114 sent_foo_messages = [] 115 for i in range(5): 116 data = '%s. Hello you' % i 117 msg = FooMessage(data) 118 self._bus.send_message(msg, sender=self) 119 sent_foo_messages.append(msg) 120 121 def done(): 122 global received_messages 123 global sent_foo_messages 124 self.assertEqual(len(received_messages), 5) 125 for msg in received_messages: 126 self.failIf(msg not in sent_foo_messages) 127 self._bus.unregister(on_message) 128 129 reactor.callFromThread(done) 130
131 - def test_multiple_filters(self):
132 """ 133 """ 134 global received_messages 135 received_messages = [] 136 137 def on_message(message, sender): 138 global received_messages 139 received_messages.append(message)
140 141 self._bus.register(on_message, DataMessage,FooMessage) 142 143 global sent_messages 144 sent_messages = [] 145 for i in range(5): 146 data = '%s. Hello you' % i 147 msg = DataMessage(data) 148 self._bus.send_message(msg, sender=self) 149 sent_messages.append(msg) 150 151 for i in range(5): 152 data = '%s. Hello you' % i 153 msg = FooMessage(data) 154 self._bus.send_message(msg, sender=self) 155 sent_messages.append(msg) 156 157 def done(): 158 global received_messages 159 global sent_messages 160 self.assertEqual(len(received_messages), 10) 161 for msg in received_messages: 162 self.failIf(msg not in sent_messages) 163 164 reactor.callFromThread(done) 165
166 - def test_decorator(self):
167 """ 168 """ 169 global received_messages 170 received_messages = [] 171 172 @bus.bus_listener(self._bus, FooMessage) 173 def on_message(message, sender): 174 global received_messages 175 received_messages.append(message)
176 177 for i in range(5): 178 data = '%s. Hello you' % i 179 self._bus.send_message(DataMessage(data), sender=self) 180 181 global sent_foo_messages 182 sent_foo_messages = [] 183 for i in range(5): 184 data = '%s. Hello you' % i 185 msg = FooMessage(data) 186 self._bus.send_message(msg, sender=self) 187 sent_foo_messages.append(msg) 188 189 def done(): 190 global received_messages 191 global sent_foo_messages 192 self.assertEqual(len(received_messages), 5) 193 for msg in received_messages: 194 self.failIf(msg not in sent_foo_messages) 195 self._bus.unregister(on_message) 196 197 reactor.callFromThread(done) 198