thirdparty/google_appengine/lib/django/tests/regressiontests/dispatch/tests/test_dispatcher.py
changeset 2866 a04b1e4126c4
parent 2864 2e0b0af889be
child 2868 9f7f269383f7
equal deleted inserted replaced
2864:2e0b0af889be 2866:a04b1e4126c4
     1 from django.dispatch.dispatcher import *
       
     2 from django.dispatch import dispatcher, robust
       
     3 import unittest
       
     4 import copy
       
     5 
       
     6 def x(a):
       
     7     return a
       
     8 
       
     9 class Dummy(object):
       
    10     pass
       
    11 
       
    12 class Callable(object):
       
    13     def __call__(self, a):
       
    14         return a
       
    15     
       
    16     def a(self, a):
       
    17         return a
       
    18 
       
    19 class DispatcherTests(unittest.TestCase):
       
    20     """Test suite for dispatcher (barely started)"""
       
    21     
       
    22     def setUp(self):
       
    23         # track the initial state, since it's possible that others have bleed receivers in
       
    24         self.sendersBack = copy.copy(dispatcher.sendersBack)
       
    25         self.connections = copy.copy(dispatcher.connections)
       
    26         self.senders = copy.copy(dispatcher.senders)
       
    27     
       
    28     def _testIsClean(self):
       
    29         """Assert that everything has been cleaned up automatically"""
       
    30         self.assertEqual(dispatcher.sendersBack, self.sendersBack)
       
    31         self.assertEqual(dispatcher.connections, self.connections)
       
    32         self.assertEqual(dispatcher.senders, self.senders)
       
    33     
       
    34     def testExact(self):
       
    35         a = Dummy()
       
    36         signal = 'this'
       
    37         connect(x, signal, a)
       
    38         expected = [(x,a)]
       
    39         result = send('this',a, a=a)
       
    40         self.assertEqual(result, expected)
       
    41         disconnect(x, signal, a)
       
    42         self.assertEqual(list(getAllReceivers(a,signal)), [])
       
    43         self._testIsClean()
       
    44     
       
    45     def testAnonymousSend(self):
       
    46         a = Dummy()
       
    47         signal = 'this'
       
    48         connect(x, signal)
       
    49         expected = [(x,a)]
       
    50         result = send(signal,None, a=a)
       
    51         self.assertEqual(result, expected)
       
    52         disconnect(x, signal)
       
    53         self.assertEqual(list(getAllReceivers(None,signal)), [])
       
    54         self._testIsClean()
       
    55     
       
    56     def testAnyRegistration(self):
       
    57         a = Dummy()
       
    58         signal = 'this'
       
    59         connect(x, signal, Any)
       
    60         expected = [(x,a)]
       
    61         result = send('this',object(), a=a)
       
    62         self.assertEqual(result, expected)
       
    63         disconnect(x, signal, Any)
       
    64         expected = []
       
    65         result = send('this',object(), a=a)
       
    66         self.assertEqual(result, expected)
       
    67         self.assertEqual(list(getAllReceivers(Any,signal)), [])
       
    68         
       
    69         self._testIsClean()
       
    70     
       
    71     def testAnyRegistration2(self):
       
    72         a = Dummy()
       
    73         signal = 'this'
       
    74         connect(x, Any, a)
       
    75         expected = [(x,a)]
       
    76         result = send('this',a, a=a)
       
    77         self.assertEqual(result, expected)
       
    78         disconnect(x, Any, a)
       
    79         self.assertEqual(list(getAllReceivers(a,Any)), [])
       
    80         self._testIsClean()
       
    81     
       
    82     def testGarbageCollected(self):
       
    83         a = Callable()
       
    84         b = Dummy()
       
    85         signal = 'this'
       
    86         connect(a.a, signal, b)
       
    87         expected = []
       
    88         del a
       
    89         result = send('this',b, a=b)
       
    90         self.assertEqual(result, expected)
       
    91         self.assertEqual(list(getAllReceivers(b,signal)), [])
       
    92         self._testIsClean()
       
    93     
       
    94     def testGarbageCollectedObj(self):
       
    95         class x:
       
    96             def __call__(self, a):
       
    97                 return a
       
    98         a = Callable()
       
    99         b = Dummy()
       
   100         signal = 'this'
       
   101         connect(a, signal, b)
       
   102         expected = []
       
   103         del a
       
   104         result = send('this',b, a=b)
       
   105         self.assertEqual(result, expected)
       
   106         self.assertEqual(list(getAllReceivers(b,signal)), [])
       
   107         self._testIsClean()
       
   108 
       
   109     
       
   110     def testMultipleRegistration(self):
       
   111         a = Callable()
       
   112         b = Dummy()
       
   113         signal = 'this'
       
   114         connect(a, signal, b)
       
   115         connect(a, signal, b)
       
   116         connect(a, signal, b)
       
   117         connect(a, signal, b)
       
   118         connect(a, signal, b)
       
   119         connect(a, signal, b)
       
   120         result = send('this',b, a=b)
       
   121         self.assertEqual(len(result), 1)
       
   122         self.assertEqual(len(list(getAllReceivers(b,signal))), 1)
       
   123         del a
       
   124         del b
       
   125         del result
       
   126         self._testIsClean()
       
   127     
       
   128     def testRobust(self):
       
   129         """Test the sendRobust function"""
       
   130         def fails():
       
   131             raise ValueError('this')
       
   132         a = object()
       
   133         signal = 'this'
       
   134         connect(fails, Any, a)
       
   135         result = robust.sendRobust('this',a, a=a)
       
   136         err = result[0][1]
       
   137         self.assert_(isinstance(err, ValueError))
       
   138         self.assertEqual(err.args, ('this',))
       
   139 
       
   140 def getSuite():
       
   141     return unittest.makeSuite(DispatcherTests,'test')
       
   142 
       
   143 if __name__ == "__main__":
       
   144     unittest.main ()