4 from cola
.obsmodel
import ObservableModel
6 class ConcreteModel(ObservableModel
):
7 """A concrete model for testing."""
9 def copy(self
, *args
, **opts
):
10 """Send notification from the model."""
11 self
.notify_message_observers(self
.message_copy
, *args
, **opts
)
13 class ConcreteObserver(object):
14 """A concrete observer for testing."""
15 def __init__(self
, model
):
18 model
.add_message_observer(ConcreteModel
.message_copy
,
22 """Reset test data back to a known good state."""
26 def receive_message(self
, *args
, **opts
):
27 """Receive notification from the model."""
32 class ObservableModelTestCase(unittest
.TestCase
):
33 """Tests the ObservableModel class."""
35 self
.model
= ConcreteModel()
36 self
.observer
= ConcreteObserver(self
.model
)
38 def test_notify_message_observers(self
):
39 """Test that notifications are delivered."""
40 self
.model
.copy(hello
='world')
41 self
.assertEqual(self
.observer
.args
, (),)
42 self
.assertEqual(self
.observer
.opts
, {'hello': 'world'})
44 def test_observing_multiple_models(self
):
45 """Test that we can attach to multiple models."""
46 self
.model
.copy(self
.model
, foo
='bar')
47 self
.assertEqual(self
.observer
.args
, (self
.model
,))
48 self
.assertEqual(self
.observer
.opts
, {'foo': 'bar'})
50 model
= ConcreteModel()
51 model
.add_message_observer(model
.message_copy
,
52 self
.observer
.receive_message
)
53 model
.copy(model
, baz
='quux')
54 self
.assertEqual(self
.observer
.args
, (model
,))
55 self
.assertEqual(self
.observer
.opts
, {'baz': 'quux'})
57 self
.model
.copy(foo
='bar')
58 self
.assertEqual(self
.observer
.args
, (),)
59 self
.assertEqual(self
.observer
.opts
, {'foo': 'bar'})
62 if __name__
== '__main__':