Add files from the old svn, r101.
[matthijs/upstream/mobilegtd.git] / tests / specs / model / observable_spec.py
1 import unittest
2 from mock import Mock
3 from model.observable import ObservableList
4
5 class ObservableListBehaviour(unittest.TestCase):
6     def setUp(self):
7         self.list = ObservableList()
8         self.observer = Mock()
9         self.list.observers.append(self.observer)
10         
11     def add_item(self):
12         p = Mock()
13         self.list.append(p)
14         return p
15
16     def assert_observed(self,name,new=None,old=None):
17         self.observer.notify.assert_called_with(self.list,name,new=new,old=old)
18
19     def test_should_be_iterable(self):
20         for item in self.list:
21             pass
22
23     def test_should_notify_observers_if_item_was_added(self):
24         p = self.add_item()
25         self.assert_observed('add_item',new=p,old=None)
26
27     def test_should_remember_added_items(self):
28         p = self.add_item()
29         self.assertTrue(p in self.list)
30         
31
32
33 class EmptyObservableListBehaviour(ObservableListBehaviour):
34
35     def test_should_be_empty(self):
36         self.assertEqual(len(self.list),0)
37
38     def test_should_raise_exception_when_trying_to_remove_a_item(self):
39         self.assertRaises(ValueError,self.list.remove,Mock())
40
41     
42
43 class NotEmptyObservableListBehaviour(ObservableListBehaviour):
44
45     def setUp(self):
46         super(NotEmptyObservableListBehaviour,self).setUp()
47         self.add_item()
48     
49     def test_should_notify_observers_if_item_was_removed(self):
50         i = self.list[0]
51         self.list.remove(i)
52         self.assert_observed('remove_item', i, None)