[Python-checkins] python/dist/src/Lib/test test_weakref.py, 1.28.6.3, 1.28.6.4

fdrake at users.sourceforge.net fdrake at users.sourceforge.net
Tue Feb 3 15:18:43 EST 2004


Update of /cvsroot/python/python/dist/src/Lib/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv22377/Lib/test
Modified Files:
 Tag: release23-maint
	test_weakref.py 
Log Message:
- add tests that exercise fixes for the PyWeakref_NewRef() and
 PyWeakref_NewProxy() constructors from the C API
- elaborate the getweakrefcount() and getweakrefs() tests slightly,
 including additional checks pulled from the trunk
Index: test_weakref.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_weakref.py,v
retrieving revision 1.28.6.3
retrieving revision 1.28.6.4
diff -C2 -d -r1.28.6.3 -r1.28.6.4
*** test_weakref.py	20 Nov 2003 22:13:50 -0000	1.28.6.3
--- test_weakref.py	3 Feb 2004 20:18:20 -0000	1.28.6.4
***************
*** 185,188 ****
--- 185,220 ----
 self.assertEqual(L3[2:5], p3[2:5])
 
+ # The PyWeakref_* C API is documented as allowing either NULL or
+ # None as the value for the callback, where either means "no
+ # callback". The "no callback" ref and proxy objects are supposed
+ # to be shared so long as they exist by all callers so long as
+ # they are active. In Python 2.3.3 and earlier, this guaranttee
+ # was not honored, and was broken in different ways for
+ # PyWeakref_NewRef() and PyWeakref_NewProxy(). (Two tests.)
+ 
+ def test_shared_ref_without_callback(self):
+ self.check_shared_without_callback(weakref.ref)
+ 
+ def test_shared_proxy_without_callback(self):
+ self.check_shared_without_callback(weakref.proxy)
+ 
+ def check_shared_without_callback(self, makeref):
+ o = Object(1)
+ p1 = makeref(o, None)
+ p2 = makeref(o, None)
+ self.assert_(p1 is p2, "both callbacks were None in the C API")
+ del p1, p2
+ p1 = makeref(o)
+ p2 = makeref(o, None)
+ self.assert_(p1 is p2, "callbacks were NULL, None in the C API")
+ del p1, p2
+ p1 = makeref(o)
+ p2 = makeref(o)
+ self.assert_(p1 is p2, "both callbacks were NULL in the C API")
+ del p1, p2
+ p1 = makeref(o, None)
+ p2 = makeref(o)
+ self.assert_(p1 is p2, "callbacks were None, NULL in the C API")
+ 
 def test_callable_proxy(self):
 o = Callable()
***************
*** 251,254 ****
--- 283,295 ----
 "got wrong number of weak reference objects")
 
+ del ref1, ref2, proxy1, proxy2
+ self.assert_(weakref.getweakrefcount(o) == 0,
+ "weak reference objects not unlinked from"
+ " referent when discarded.")
+ 
+ # assumes ints do not support weakrefs
+ self.assert_(weakref.getweakrefcount(1) == 0,
+ "got wrong number of weak reference objects for int")
+ 
 def test_getweakrefs(self):
 o = C()
***************
*** 266,269 ****
--- 307,318 ----
 "list of refs does not match")
 
+ del ref1
+ self.assert_(weakref.getweakrefs(o) == [],
+ "list of refs not cleared")
+ 
+ # assumes ints do not support weakrefs
+ self.assert_(weakref.getweakrefs(1) == [],
+ "list of refs does not match for int")
+ 
 def test_newstyle_number_ops(self):
 class F(float):


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /