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

Source Code for Module elisa.core.tests.test_observers

  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 elisa.core.tests.elisa_test_case import ElisaTestCase 
 17  from elisa.core.observers.observable import Observable 
 18  from elisa.core.observers.observer import Observer 
 19   
 20   
21 -class MyObserver(Observer):
22
23 - def __init__(self):
24 Observer.__init__(self) 25 self.origin = None
26
27 - def attribute_set(self, origin, key, old_value, new_value):
28 self.origin = origin
29
30 -class MyObserverRaisingException(Observer):
31
32 - def __init__(self):
33 Observer.__init__(self)
34
35 - def attribute_set(self, origin, key, old_value, new_value):
36 raise Exception()
37
38 -class TestObservers(ElisaTestCase):
39
40 - def test_trivial(self):
41 observer = MyObserver() 42 o = Observable() 43 44 o.add_observer(observer) 45 46 o.test = "test" 47 48 self.failUnlessEqual(observer.origin, o)
49
51 observer = MyObserver() 52 o1 = Observable() 53 o2 = Observable() 54 55 # attach 56 o1.add_observer(observer) 57 58 # attach to another one 59 o2.add_observer(observer) 60 61 observer.origin = None 62 o1.test = "test" 63 self.failUnlessEqual(observer.origin, o1) 64 observer.origin = None 65 o2.test = "test" 66 self.failUnlessEqual(observer.origin, o2) 67 68 # detach 69 o1.remove_observer(observer) 70 71 observer.origin = None 72 o1.test = "test" 73 self.failUnlessEqual(observer.origin, None) 74 observer.origin = None 75 o2.test = "test" 76 self.failUnlessEqual(observer.origin, o2) 77 78 # reattach 79 o1.add_observer(observer) 80 81 observer.origin = None 82 o1.test = "test" 83 self.failUnlessEqual(observer.origin, o1) 84 observer.origin = None 85 o2.test = "test" 86 self.failUnlessEqual(observer.origin, o2)
87
88 - def test_remove_observer(self):
89 observer = MyObserver() 90 o = Observable() 91 92 # try stop observing while it's not anyway 93 o.remove_observer(observer) 94 95 # observing 96 o.add_observer(observer) 97 98 o.test = "test" 99 self.failUnlessEqual(observer.origin, o) 100 101 # stop observing 102 o.remove_observer(observer) 103 observer.origin = None 104 o.test = "test" 105 self.failUnlessEqual(observer.origin, None)
106
107 - def test_multiple_observers(self):
108 observer = MyObserver() 109 o1 = Observable() 110 o2 = Observable() 111 112 # observe #1 113 o1.add_observer(observer) 114 115 observer.origin = None 116 o1.test = "test" 117 self.failUnlessEqual(observer.origin, o1) 118 observer.origin = None 119 o2.test = "test" 120 self.failUnlessEqual(observer.origin, None) 121 122 # observe #2 123 o2.add_observer(observer) 124 125 observer.origin = None 126 o1.test = "test" 127 self.failUnlessEqual(observer.origin, o1) 128 observer.origin = None 129 o2.test = "test" 130 self.failUnlessEqual(observer.origin, o2) 131 132 # stop observing #1 133 o1.remove_observer(observer) 134 135 observer.origin = None 136 o1.test = "test" 137 self.failUnlessEqual(observer.origin, None) 138 observer.origin = None 139 o2.test = "test" 140 self.failUnlessEqual(observer.origin, o2) 141 142 # stop observing #2 143 o2.remove_observer(observer) 144 145 observer.origin = None 146 o1.test = "test" 147 self.failUnlessEqual(observer.origin, None) 148 observer.origin = None 149 o2.test = "test" 150 self.failUnlessEqual(observer.origin, None)
151
152 - def test_exception(self):
153 observer = MyObserverRaisingException() 154 o = Observable() 155 156 o.add_observer(observer) 157 158 self.failUnlessRaises(Exception, o.__setattr__, "test", "test")
159
161 observer = MyObserver() 162 observable = Observable() 163 164 # add_observer 165 observable.add_observer(observer) 166 167 observer.origin = None 168 observable.test = "test" 169 self.failUnlessEqual(observer.origin, observable) 170 171 # add_observer again, it should be ignored 172 observable.add_observer(observer) 173 174 observer.origin = None 175 observable.test = "test" 176 self.failUnlessEqual(observer.origin, observable) 177 178 # remove_observer: no observation anymore 179 observable.remove_observer(observer) 180 181 observer.origin = None 182 observable.test = "test" 183 self.failUnlessEqual(observer.origin, None) 184 185 # remove_observer again, it should be ignored 186 observable.remove_observer(observer) 187 188 observer.origin = None 189 observable.test = "test" 190 self.failUnlessEqual(observer.origin, None)
191