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

Source Code for Module elisa.core.tests.test_list_observer

  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  import copy 
 17   
 18  from elisa.core.tests.elisa_test_case import ElisaTestCase 
 19  from elisa.core.observers.list import ListObservable, ListObserver 
 20  from elisa.core.observers.observable import Observable 
 21   
 22   
23 -class MyListObserver(ListObserver):
24
25 - def __init__(self):
26 ListObserver.__init__(self) 27 self.inserted_called = False 28 self.removed_called = False 29 self.modified_called = False 30 self.dirtied_called = False 31 self.element_set = None
32
33 - def inserted(self, elements, position):
34 self.inserted_called = (elements, position)
35
36 - def removed(self, elements, position):
37 self.removed_called = (elements, position)
38
39 - def modified(self, key, value):
40 self.modified_called = (key, value)
41
42 - def dirtied(self):
43 self.dirtied_called = True
44
45 - def element_attribute_set(self, position, key, old_value, new_value):
46 self.element_set = (position, key, old_value, new_value)
47
48 -class MyNotImplementedListObserver(ListObserver):
49 pass
50
51 -class TestListObservers(ElisaTestCase):
52
53 - def test_list_inserted(self):
54 l = ListObservable() 55 observer = MyListObserver() 56 l.add_observer(observer) 57 58 # append 59 observer.inserted_called = False 60 l.append("test") 61 self.failUnlessEqual(observer.inserted_called, (["test"], 0)) 62 63 # extend 64 observer.inserted_called = False 65 l.extend(["toto"]) 66 self.failUnlessEqual(observer.inserted_called, (["toto"], 1)) 67 68 # insert 69 observer.inserted_called = False 70 l.insert(1, "titi") 71 self.failUnlessEqual(observer.inserted_called, (["titi"], 1)) 72 73 # __iadd__ 74 observer.inserted_called = False 75 l += ["tata"] 76 self.failUnlessEqual(observer.inserted_called, (["tata"], 3)) 77 78 # __imul__ 79 # SKIPPED: __imul__ deactivated; requires investigation 80 """ 81 observer.inserted_called = False 82 elements = l[:] 83 l *= 2 84 self.failUnlessEqual(observer.inserted_called, (elements, 4)) 85 """
86
87 - def test_list_slicing(self):
88 l = ListObservable() 89 observer = MyListObserver() 90 l.add_observer(observer) 91 92 l.extend(["test1", "test2", "test3"]) 93 94 # __setslice__ 95 observer.inserted_called = False 96 observer.removed_called = False 97 removed = l[1:2] 98 added = ["test4", "test5"] 99 l[1:2] = added 100 self.failUnlessEqual(observer.inserted_called, (added, 1)) 101 self.failUnlessEqual(observer.removed_called, (removed, 1)) 102 103 # __delslice__ 104 observer.removed_called = False 105 removed = l[1:2] 106 del l[1:2] 107 self.failUnlessEqual(observer.removed_called, (removed, 1))
108 109 # FIXME: make tests for extended slices [1:3:5] 110
111 - def test_list_removed(self):
112 l = ListObservable() 113 observer = MyListObserver() 114 l.add_observer(observer) 115 116 l.extend(["test1", "test2", "test3"]) 117 118 # pop 119 observer.removed_called = False 120 element = l.pop() 121 self.failUnless(observer.removed_called == ([element], -1) or \ 122 observer.removed_called == ([element], 2)) 123 124 observer.removed_called = False 125 index = -2 126 element = l.pop(index) 127 self.failUnlessEqual(observer.removed_called, ([element], index)) 128 129 observer.removed_called = False 130 index = 0 131 element = l.pop(index) 132 self.failUnlessEqual(observer.removed_called, ([element], index)) 133 134 135 # re-initialize the list 136 l[:] = [] 137 l.extend(["test1", "test2", "test3"]) 138 139 # remove 140 observer.removed_called = False 141 l.remove("test2") 142 self.failUnlessEqual(observer.removed_called, (["test2"], 1)) 143 144 observer.removed_called = False 145 self.failUnlessRaises(ValueError, l.remove, "test2") 146 self.failUnlessEqual(observer.removed_called, False) 147 148 # __delitem__ 149 observer.removed_called = False 150 del l[0] 151 self.failUnlessEqual(observer.removed_called, (["test1"], 0))
152
153 - def test_list_modified(self):
154 l = ListObservable() 155 observer = MyListObserver() 156 l.add_observer(observer) 157 158 l.extend(["test1", "test2", "test3"]) 159 160 # __setitem__ 161 l[0] = "test4" 162 self.failUnlessEqual(observer.modified_called, (0, "test4"))
163
164 - def test_list_dirtied(self):
165 l = ListObservable() 166 observer = MyListObserver() 167 l.add_observer(observer) 168 169 l.extend(["test1", "test2", "test3"]) 170 171 # sort 172 observer.dirtied_called = False 173 l.sort() 174 self.failUnless(observer.dirtied_called) 175 176 # reverse 177 observer.dirtied_called = False 178 l.reverse() 179 self.failUnless(observer.dirtied_called)
180
181 - def test_multiple_observers(self):
182 l = ListObservable() 183 observers = [] 184 for i in xrange(15): 185 observer = MyListObserver() 186 l.add_observer(observer) 187 observers.append(observer) 188 189 # append 190 for observer in observers: 191 observer.inserted_called = False 192 l.append("test") 193 for observer in observers: 194 self.failUnlessEqual(observer.inserted_called, (["test"], 0)) 195 196 l.append("test") 197 for observer in observers: 198 self.failUnlessEqual(observer.inserted_called, (["test"], 1)) 199 200 # remove 201 observer.removed_called = False 202 l.pop(0) 203 for observer in observers: 204 self.failUnlessEqual(observer.removed_called, (["test"], 0)) 205 206 observer.removed_called = False 207 l.pop(0) 208 for observer in observers: 209 self.failUnlessEqual(observer.removed_called, (["test"], 0))
210
212 l = ListObservable() 213 observer = MyNotImplementedListObserver() 214 l.add_observer(observer) 215 l.extend(["test1", "test2", "test3"])
216 # FIXME: add more cases 217
218 - def test_children_observing(self):
219 l = ListObservable() 220 o = MyListObserver() 221 l.add_observer(o) 222 223 child = Observable() 224 l.append(child) 225 226 child.test = "value" 227 self.failUnlessEqual(o.element_set, (0, "test", None, "value")) 228 229 child.test = "ah ah value" 230 self.failUnlessEqual(o.element_set, (0, "test", "value", "ah ah value")) 231 232 for i in xrange(10): 233 child = Observable() 234 l.append(child) 235 236 child = Observable() 237 l.append(child) 238 239 child.another = "truc" 240 self.failUnlessEqual(o.element_set, (11, "another", None, "truc")) 241 242 child.another = None 243 self.failUnlessEqual(o.element_set, (11, "another", "truc", None)) 244 245 del child.another 246 child.another = "value" 247 self.failUnlessEqual(o.element_set, (11, "another", None, "value"))
248