From: Mike C. F. <mcf...@us...> - 2004-11-26 06:37:43
|
Update of /cvsroot/pydispatcher/dispatch/tests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1551/tests Modified Files: test_dispatcher.py Log Message: Fixes for some very slow memory leaks showing up in one of our applications. Includes addition to the test suite that asserts that everything has been cleaned up after *every* dispatcher test. This is again a back-reference table leak, hopefully the last one. Index: test_dispatcher.py =================================================================== RCS file: /cvsroot/pydispatcher/dispatch/tests/test_dispatcher.py,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** test_dispatcher.py 1 Jul 2003 03:52:28 -0000 1.1.1.1 --- test_dispatcher.py 26 Nov 2004 06:37:33 -0000 1.2 *************** *** 1,11 **** from dispatch.dispatcher import * ! import unittest def x(a): return a class DispatcherTests(unittest.TestCase): """Test suite for dispatcher (barely started)""" def testExact (self): ! a = object() signal = 'this' connect( x, signal, a ) --- 1,28 ---- from dispatch.dispatcher import * + from dispatch import dispatcher ! import unittest, pprint def x(a): return a + + class Dummy( object ): + pass + class Callable(object): + def __call__( self, a ): + return a + def a( self, a ): + return a + class DispatcherTests(unittest.TestCase): """Test suite for dispatcher (barely started)""" + + def _isclean( self ): + """Assert that everything has been cleaned up automatically""" + assert len(dispatcher.sendersBack) == 0, dispatcher.sendersBack + assert len(dispatcher.connections) == 0, dispatcher.connections + assert len(dispatcher.senders) == 0, dispatcher.senders + def testExact (self): ! a = Dummy() signal = 'this' connect( x, signal, a ) *************** *** 15,29 **** disconnect( x, signal, a ) assert len(list(getAllReceivers(a,signal))) == 0 def testAnonymousSend(self): ! a = object() signal = 'this' connect( x, signal ) expected = [(x,a)] ! result = send('this',None, a=a) assert result == expected,"""Send didn't return expected result:\n\texpected:%s\n\tgot:%s"""% (expected, result) disconnect( x, signal ) assert len(list(getAllReceivers(None,signal))) == 0 def testAnyRegistration(self): ! a = object() signal = 'this' connect( x, signal, Any ) --- 32,48 ---- disconnect( x, signal, a ) assert len(list(getAllReceivers(a,signal))) == 0 + self._isclean() def testAnonymousSend(self): ! a = Dummy() signal = 'this' connect( x, signal ) expected = [(x,a)] ! result = send(signal,None, a=a) assert result == expected,"""Send didn't return expected result:\n\texpected:%s\n\tgot:%s"""% (expected, result) disconnect( x, signal ) assert len(list(getAllReceivers(None,signal))) == 0 + self._isclean() def testAnyRegistration(self): ! a = Dummy() signal = 'this' connect( x, signal, Any ) *************** *** 36,42 **** assert result == expected,"""Send didn't return expected result:\n\texpected:%s\n\tgot:%s"""% (expected, result) assert len(list(getAllReceivers(Any,signal))) == 0 def testAnyRegistration2(self): ! a = object() signal = 'this' connect( x, Any, a ) --- 55,63 ---- assert result == expected,"""Send didn't return expected result:\n\texpected:%s\n\tgot:%s"""% (expected, result) assert len(list(getAllReceivers(Any,signal))) == 0 + + self._isclean() def testAnyRegistration2(self): ! a = Dummy() signal = 'this' connect( x, Any, a ) *************** *** 46,55 **** disconnect( x, Any, a ) assert len(list(getAllReceivers(a,Any))) == 0 def testGarbageCollected(self): ! class x: ! def a( self, a ): ! return a ! a = x() ! b = object() signal = 'this' connect( a.a, signal, b ) --- 67,74 ---- disconnect( x, Any, a ) assert len(list(getAllReceivers(a,Any))) == 0 + self._isclean() def testGarbageCollected(self): ! a = Callable() ! b = Dummy() signal = 'this' connect( a.a, signal, b ) *************** *** 59,68 **** assert result == expected,"""Send didn't return expected result:\n\texpected:%s\n\tgot:%s"""% (expected, result) assert len(list(getAllReceivers(b,signal))) == 0, """Remaining handlers: %s"""%(getAllReceivers(b,signal),) def testGarbageCollectedObj(self): class x: def __call__( self, a ): return a ! a = x() ! b = object() signal = 'this' connect( a, signal, b ) --- 78,88 ---- assert result == expected,"""Send didn't return expected result:\n\texpected:%s\n\tgot:%s"""% (expected, result) assert len(list(getAllReceivers(b,signal))) == 0, """Remaining handlers: %s"""%(getAllReceivers(b,signal),) + self._isclean() def testGarbageCollectedObj(self): class x: def __call__( self, a ): return a ! a = Callable() ! b = Dummy() signal = 'this' connect( a, signal, b ) *************** *** 72,75 **** --- 92,116 ---- assert result == expected,"""Send didn't return expected result:\n\texpected:%s\n\tgot:%s"""% (expected, result) assert len(list(getAllReceivers(b,signal))) == 0, """Remaining handlers: %s"""%(getAllReceivers(b,signal),) + self._isclean() + + + def testMultipleRegistration(self): + a = Callable() + b = Dummy() + signal = 'this' + connect( a, signal, b ) + connect( a, signal, b ) + connect( a, signal, b ) + connect( a, signal, b ) + connect( a, signal, b ) + connect( a, signal, b ) + result = send('this',b, a=b) + assert len( result ) == 1, result + assert len(list(getAllReceivers(b,signal))) == 1, """Remaining handlers: %s"""%(getAllReceivers(b,signal),) + del a + del b + del result + self._isclean() + def getSuite(): return unittest.makeSuite(DispatcherTests,'test') |