Package rats :: Package test :: Module test_sig
[hide private]
[frames] | no frames]

Source Code for Module rats.test.test_sig

 1  #!/usr/bin/env python 
 2  """ 
 3  File:    signal.py 
 4  Author:  Thiago Marcos P. Santos 
 5  Created: August 28, 2008 
 6   
 7  Purpose: A signal/slot implementation 
 8  Source: http://code.activestate.com/recipes/576477/ 
 9   
10  A Signal calls all the callbacks registered in its slots whenever it state  
11  changes.  
12  """ 
13  from rats import sig 
14  import unittest 
15   
16  VERBOSE = False 
17   
18 -class Test_Signal_Slot(unittest.TestCase):
19 """ 20 Tests the signal/slot pattern. 21 """
22 - def test_sig(self):
23 class Model(object): 24 def __init__(self, value): 25 self._value = value 26 self.changed = sig.Signal()
27 28 def set_value(self, value): 29 self._value = value 30 self.changed() # Emit signal
31 32 def get_value(self): 33 return self._value 34 35 class View(object): 36 def __init__(self, model, test): 37 self.model = model 38 self.test = test 39 model.changed.connect(self.model_changed) 40 41 def model_changed(self): 42 self.new_value = self.model.get_value() 43 if VERBOSE: 44 print("New value : %d" % (self.new_value)) 45 46 # create a model and 3 listeners: 47 model = Model(10) 48 view1 = View(model, self) 49 view2 = View(model, self) 50 view3 = View(model, self) 51 # trigger one signal: 52 model.set_value(20) 53 # delete one listener: 54 del view1 55 model.set_value(30) 56 # To disconnect : 57 model.changed.disconnect(view2.model_changed) 58 model.set_value(15) 59 if view2.new_value == 15: 60 self.fail("view2 slot should not have been triggered.") 61 # remove all listeners: 62 model.changed.clear() 63 model.set_value(40) 64 if view3.new_value == 40: 65 self.fail("view3 slot should not have been triggered.") 66