Sophie

Sophie

distrib > PLD > ac > amd64 > media > dist > by-pkgid > 907e63cf471523ddf7adab61d948a8e1 > files > 10

python-dispatch-examples-1.0.2-4.noarch.rpm

from dispatch.saferef import *

import unittest
class Test1( object):
	def x( self ):
		pass
def test2(obj):
	pass
class Test2( object ):
	def __call__( self, obj ):
		pass
class Tester (unittest.TestCase):
	def setUp (self):
		ts = []
		ss = []
		for x in xrange( 5000 ):
			t = Test1()
			ts.append( t)
			s = safeRef(t.x, self._closure )
			ss.append( s)
		ts.append( test2 )
		ss.append( safeRef(test2, self._closure) )
		for x in xrange( 30 ):
			t = Test2()
			ts.append( t)
			s = safeRef(t, self._closure )
			ss.append( s)
		self.ts = ts
		self.ss = ss
		self.closureCount = 0
	def tearDown( self ):
		del self.ts
		del self.ss
	def testIn(self):
		"""Test the "in" operator for safe references (cmp)"""
		for t in self.ts[:50]:
			assert safeRef(t.x) in self.ss
	def testValid(self):
		"""Test that the references are valid (return instance methods)"""
		for s in self.ss:
			assert s()
	def testShortCircuit (self):
		"""Test that creation short-circuits to reuse existing references"""
		sd = {}
		for s in self.ss:
			sd[s] = 1
		for t in self.ts:
			if hasattr( t, 'x'):
				assert sd.has_key( safeRef(t.x))
			else:
				assert sd.has_key( safeRef(t))
	def testRepresentation (self):
		"""Test that the reference object's representation works

		XXX Doesn't currently check the results, just that no error
			is raised
		"""
		repr( self.ss[-1] )
		
	def test(self):
		self.closureCount = 0
		wholeI = len(self.ts)
		for i in xrange( len(self.ts)-1, -1, -1):
			del self.ts[i]
			if wholeI-i != self.closureCount:
				"""Unexpected number of items closed, expected %s, got %s closed"""%( wholeI-i,self.closureCount)
		
	def _closure(self, ref):
		"""Dumb utility mechanism to increment deletion counter"""
		self.closureCount +=1

def getSuite():
	return unittest.makeSuite(Tester,'test')

if __name__ == "__main__":
	unittest.main ()