dag: Adjust variable names
[git-cola.git] / test / test_cola_models_observable.py
blobda6de9de9eda29cd8f198053e4c3abadc4f4df17
1 #!/usr/bin/env python
2 import unittest
4 from cola.obsmodel import ObservableModel
6 class ConcreteModel(ObservableModel):
7 """A concrete model for testing."""
8 message_copy = 'copy'
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):
16 self.args = None
17 self.opts = None
18 model.add_message_observer(ConcreteModel.message_copy,
19 self.receive_message)
21 def reset(self):
22 """Reset test data back to a known good state."""
23 self.args = None
24 self.opts = None
26 def receive_message(self, *args, **opts):
27 """Receive notification from the model."""
28 self.args = args
29 self.opts = opts
32 class ObservableModelTestCase(unittest.TestCase):
33 """Tests the ObservableModel class."""
34 def setUp(self):
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__':
63 unittest.main()