Changeset 391 for python/trunk/Lib/test/test_weakref.py
- Timestamp:
- Mar 19, 2014, 11:31:01 PM (11 years ago)
- Location:
- python/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
python/trunk
-
Property svn:mergeinfo
set to
/python/vendor/Python-2.7.6 merged eligible /python/vendor/current merged eligible
-
Property svn:mergeinfo
set to
-
python/trunk/Lib/test/test_weakref.py
r2 r391 34 34 35 35 36 class Object: 37 def __init__(self, arg): 38 self.arg = arg 39 def __repr__(self): 40 return "<Object %r>" % self.arg 41 def __eq__(self, other): 42 if isinstance(other, Object): 43 return self.arg == other.arg 44 return NotImplemented 45 def __ne__(self, other): 46 if isinstance(other, Object): 47 return self.arg != other.arg 48 return NotImplemented 49 def __hash__(self): 50 return hash(self.arg) 51 52 class RefCycle: 53 def __init__(self): 54 self.cycle = self 55 56 36 57 class TestBase(unittest.TestCase): 37 58 … … 55 76 o = C() 56 77 wr = weakref.ref(o) 57 `wr`78 repr(wr) 58 79 # Dead reference: 59 80 del o 60 `wr`81 repr(wr) 61 82 62 83 def test_basic_callback(self): … … 71 92 ref2 = weakref.ref(o, self.callback) 72 93 del o 73 self.assert _(ref1() is None,94 self.assertTrue(ref1() is None, 74 95 "expected reference to be invalidated") 75 self.assert _(ref2() is None,96 self.assertTrue(ref2() is None, 76 97 "expected reference to be invalidated") 77 self.assert _(self.cbcalled == 2,98 self.assertTrue(self.cbcalled == 2, 78 99 "callback not called the right number of times") 79 100 … … 109 130 self.assertRaises(weakref.ReferenceError, check, ref2) 110 131 self.assertRaises(weakref.ReferenceError, bool, weakref.proxy(C())) 111 self.assert _(self.cbcalled == 2)132 self.assertTrue(self.cbcalled == 2) 112 133 113 134 def check_basic_ref(self, factory): 114 135 o = factory() 115 136 ref = weakref.ref(o) 116 self.assert _(ref() is not None,137 self.assertTrue(ref() is not None, 117 138 "weak reference to live object should be live") 118 139 o2 = ref() 119 self.assert _(o is o2,140 self.assertTrue(o is o2, 120 141 "<ref>() should return original object if live") 121 142 … … 125 146 ref = weakref.ref(o, self.callback) 126 147 del o 127 self.assert _(self.cbcalled == 1,148 self.assertTrue(self.cbcalled == 1, 128 149 "callback did not properly set 'cbcalled'") 129 self.assert _(ref() is None,150 self.assertTrue(ref() is None, 130 151 "ref2 should be dead after deleting object reference") 131 152 … … 137 158 proxy = weakref.proxy(o) 138 159 ref2 = weakref.ref(o) 139 self.assert _(ref1 is ref2,160 self.assertTrue(ref1 is ref2, 140 161 "reference object w/out callback should be re-used") 141 162 … … 144 165 ref1 = weakref.ref(o) 145 166 ref2 = weakref.ref(o) 146 self.assert _(ref1 is ref2,167 self.assertTrue(ref1 is ref2, 147 168 "reference object w/out callback should be re-used") 148 self.assert _(weakref.getweakrefcount(o) == 2,169 self.assertTrue(weakref.getweakrefcount(o) == 2, 149 170 "wrong weak ref count for object") 150 171 del proxy 151 self.assert _(weakref.getweakrefcount(o) == 1,172 self.assertTrue(weakref.getweakrefcount(o) == 1, 152 173 "wrong weak ref count for object after deleting proxy") 153 174 … … 157 178 ref = weakref.ref(o) 158 179 proxy2 = weakref.proxy(o) 159 self.assert _(proxy1 is proxy2,180 self.assertTrue(proxy1 is proxy2, 160 181 "proxy object w/out callback should have been re-used") 161 182 … … 166 187 L = UserList.UserList() 167 188 p = weakref.proxy(L) 168 self. failIf(p, "proxy for empty UserList should be false")189 self.assertFalse(p, "proxy for empty UserList should be false") 169 190 p.append(12) 170 191 self.assertEqual(len(L), 1) 171 self.failUnless(p, "proxy for non-empty UserList should be true") 172 p[:] = [2, 3] 192 self.assertTrue(p, "proxy for non-empty UserList should be true") 193 with test_support.check_py3k_warnings(): 194 p[:] = [2, 3] 173 195 self.assertEqual(len(L), 2) 174 196 self.assertEqual(len(p), 2) 175 self.failUnless(3 in p, 176 "proxy didn't support __contains__() properly") 197 self.assertIn(3, p, "proxy didn't support __contains__() properly") 177 198 p[1] = 5 178 199 self.assertEqual(L[1], 5) … … 184 205 L3 = UserList.UserList(range(10)) 185 206 p3 = weakref.proxy(L3) 186 self.assertEqual(L3[:], p3[:]) 187 self.assertEqual(L3[5:], p3[5:]) 188 self.assertEqual(L3[:5], p3[:5]) 189 self.assertEqual(L3[2:5], p3[2:5]) 207 with test_support.check_py3k_warnings(): 208 self.assertEqual(L3[:], p3[:]) 209 self.assertEqual(L3[5:], p3[5:]) 210 self.assertEqual(L3[:5], p3[:5]) 211 self.assertEqual(L3[2:5], p3[2:5]) 190 212 191 213 def test_proxy_unicode(self): … … 197 219 return u"unicode" 198 220 instance = C() 199 self.assert True("__unicode__" indir(weakref.proxy(instance)))221 self.assertIn("__unicode__", dir(weakref.proxy(instance))) 200 222 self.assertEqual(unicode(weakref.proxy(instance)), u"unicode") 201 223 … … 238 260 p1 = makeref(o, None) 239 261 p2 = makeref(o, None) 240 self.assert _(p1 is p2, "both callbacks were None in the C API")262 self.assertTrue(p1 is p2, "both callbacks were None in the C API") 241 263 del p1, p2 242 264 p1 = makeref(o) 243 265 p2 = makeref(o, None) 244 self.assert _(p1 is p2, "callbacks were NULL, None in the C API")266 self.assertTrue(p1 is p2, "callbacks were NULL, None in the C API") 245 267 del p1, p2 246 268 p1 = makeref(o) 247 269 p2 = makeref(o) 248 self.assert _(p1 is p2, "both callbacks were NULL in the C API")270 self.assertTrue(p1 is p2, "both callbacks were NULL in the C API") 249 271 del p1, p2 250 272 p1 = makeref(o, None) 251 273 p2 = makeref(o) 252 self.assert _(p1 is p2, "callbacks were None, NULL in the C API")274 self.assertTrue(p1 is p2, "callbacks were None, NULL in the C API") 253 275 254 276 def test_callable_proxy(self): … … 258 280 self.check_proxy(o, ref1) 259 281 260 self.assert _(type(ref1) is weakref.CallableProxyType,282 self.assertTrue(type(ref1) is weakref.CallableProxyType, 261 283 "proxy is not of callable type") 262 284 ref1('twinkies!') 263 self.assert _(o.bar == 'twinkies!',285 self.assertTrue(o.bar == 'twinkies!', 264 286 "call through proxy not passed through to original") 265 287 ref1(x='Splat.') 266 self.assert _(o.bar == 'Splat.',288 self.assertTrue(o.bar == 'Splat.', 267 289 "call through proxy not passed through to original") 268 290 … … 275 297 def check_proxy(self, o, proxy): 276 298 o.foo = 1 277 self.assert _(proxy.foo == 1,299 self.assertTrue(proxy.foo == 1, 278 300 "proxy does not reflect attribute addition") 279 301 o.foo = 2 280 self.assert _(proxy.foo == 2,302 self.assertTrue(proxy.foo == 2, 281 303 "proxy does not reflect attribute modification") 282 304 del o.foo 283 self.assert _(not hasattr(proxy, 'foo'),305 self.assertTrue(not hasattr(proxy, 'foo'), 284 306 "proxy does not reflect attribute removal") 285 307 286 308 proxy.foo = 1 287 self.assert _(o.foo == 1,309 self.assertTrue(o.foo == 1, 288 310 "object does not reflect attribute addition via proxy") 289 311 proxy.foo = 2 290 self.assert _(312 self.assertTrue( 291 313 o.foo == 2, 292 314 "object does not reflect attribute modification via proxy") 293 315 del proxy.foo 294 self.assert _(not hasattr(o, 'foo'),316 self.assertTrue(not hasattr(o, 'foo'), 295 317 "object does not reflect attribute removal via proxy") 296 318 … … 316 338 ref1 = weakref.ref(o) 317 339 ref2 = weakref.ref(o, self.callback) 318 self.assert _(weakref.getweakrefcount(o) == 2,340 self.assertTrue(weakref.getweakrefcount(o) == 2, 319 341 "got wrong number of weak reference objects") 320 342 321 343 proxy1 = weakref.proxy(o) 322 344 proxy2 = weakref.proxy(o, self.callback) 323 self.assert _(weakref.getweakrefcount(o) == 4,345 self.assertTrue(weakref.getweakrefcount(o) == 4, 324 346 "got wrong number of weak reference objects") 325 347 326 348 del ref1, ref2, proxy1, proxy2 327 self.assert _(weakref.getweakrefcount(o) == 0,349 self.assertTrue(weakref.getweakrefcount(o) == 0, 328 350 "weak reference objects not unlinked from" 329 351 " referent when discarded.") 330 352 331 353 # assumes ints do not support weakrefs 332 self.assert _(weakref.getweakrefcount(1) == 0,354 self.assertTrue(weakref.getweakrefcount(1) == 0, 333 355 "got wrong number of weak reference objects for int") 334 356 … … 338 360 ref2 = weakref.ref(o, self.callback) 339 361 del ref1 340 self.assert _(weakref.getweakrefs(o) == [ref2],362 self.assertTrue(weakref.getweakrefs(o) == [ref2], 341 363 "list of refs does not match") 342 364 … … 345 367 ref2 = weakref.ref(o, self.callback) 346 368 del ref2 347 self.assert _(weakref.getweakrefs(o) == [ref1],369 self.assertTrue(weakref.getweakrefs(o) == [ref1], 348 370 "list of refs does not match") 349 371 350 372 del ref1 351 self.assert _(weakref.getweakrefs(o) == [],373 self.assertTrue(weakref.getweakrefs(o) == [], 352 374 "list of refs not cleared") 353 375 354 376 # assumes ints do not support weakrefs 355 self.assert _(weakref.getweakrefs(1) == [],377 self.assertTrue(weakref.getweakrefs(1) == [], 356 378 "list of refs does not match for int") 357 379 … … 361 383 f = F(2.0) 362 384 p = weakref.proxy(f) 363 self.assert _(p + 1.0 == 3.0)364 self.assert _(1.0 + p == 3.0) # this used to SEGV385 self.assertTrue(p + 1.0 == 3.0) 386 self.assertTrue(1.0 + p == 3.0) # this used to SEGV 365 387 366 388 def test_callbacks_protected(self): … … 615 637 d.wr = weakref.ref(callback, d.cb) # ditto 616 638 external_wr = weakref.ref(callback, safe_callback) # but this will 617 self.assert _(external_wr() is callback)639 self.assertTrue(external_wr() is callback) 618 640 619 641 # The weakrefs attached to c and d should get cleared, so that … … 683 705 self.assertRaises(TypeError, r.__init__, 0, 0, 0, 0, 0) 684 706 # No exception should be raised here 707 gc.collect() 708 709 def test_classes(self): 710 # Check that both old-style classes and new-style classes 711 # are weakrefable. 712 class A(object): 713 pass 714 class B: 715 pass 716 l = [] 717 weakref.ref(int) 718 a = weakref.ref(A, l.append) 719 A = None 720 gc.collect() 721 self.assertEqual(a(), None) 722 self.assertEqual(l, [a]) 723 b = weakref.ref(B, l.append) 724 B = None 725 gc.collect() 726 self.assertEqual(b(), None) 727 self.assertEqual(l, [a, b]) 728 729 def test_equality(self): 730 # Alive weakrefs defer equality testing to their underlying object. 731 x = Object(1) 732 y = Object(1) 733 z = Object(2) 734 a = weakref.ref(x) 735 b = weakref.ref(y) 736 c = weakref.ref(z) 737 d = weakref.ref(x) 738 # Note how we directly test the operators here, to stress both 739 # __eq__ and __ne__. 740 self.assertTrue(a == b) 741 self.assertFalse(a != b) 742 self.assertFalse(a == c) 743 self.assertTrue(a != c) 744 self.assertTrue(a == d) 745 self.assertFalse(a != d) 746 del x, y, z 747 gc.collect() 748 for r in a, b, c: 749 # Sanity check 750 self.assertIs(r(), None) 751 # Dead weakrefs compare by identity: whether `a` and `d` are the 752 # same weakref object is an implementation detail, since they pointed 753 # to the same original object and didn't have a callback. 754 # (see issue #16453). 755 self.assertFalse(a == b) 756 self.assertTrue(a != b) 757 self.assertFalse(a == c) 758 self.assertTrue(a != c) 759 self.assertEqual(a == d, a is d) 760 self.assertEqual(a != d, a is not d) 761 762 def test_hashing(self): 763 # Alive weakrefs hash the same as the underlying object 764 x = Object(42) 765 y = Object(42) 766 a = weakref.ref(x) 767 b = weakref.ref(y) 768 self.assertEqual(hash(a), hash(42)) 769 del x, y 770 gc.collect() 771 # Dead weakrefs: 772 # - retain their hash is they were hashed when alive; 773 # - otherwise, cannot be hashed. 774 self.assertEqual(hash(a), hash(42)) 775 self.assertRaises(TypeError, hash, b) 776 777 def test_trashcan_16602(self): 778 # Issue #16602: when a weakref's target was part of a long 779 # deallocation chain, the trashcan mechanism could delay clearing 780 # of the weakref and make the target object visible from outside 781 # code even though its refcount had dropped to 0. A crash ensued. 782 class C(object): 783 def __init__(self, parent): 784 if not parent: 785 return 786 wself = weakref.ref(self) 787 def cb(wparent): 788 o = wself() 789 self.wparent = weakref.ref(parent, cb) 790 791 d = weakref.WeakKeyDictionary() 792 root = c = C(None) 793 for n in range(100): 794 d[c] = c = C(c) 795 del root 685 796 gc.collect() 686 797 … … 698 809 o = Object("foo") 699 810 mr = MyRef(o, value=24) 700 self.assert _(mr() is o)701 self.assert _(mr.called)811 self.assertTrue(mr() is o) 812 self.assertTrue(mr.called) 702 813 self.assertEqual(mr.value, 24) 703 814 del o 704 self.assert _(mr() is None)705 self.assert _(mr.called)815 self.assertTrue(mr() is None) 816 self.assertTrue(mr.called) 706 817 707 818 def test_subclass_refs_dont_replace_standard_refs(self): … … 711 822 r1 = MyRef(o) 712 823 r2 = weakref.ref(o) 713 self.assert _(r1 is not r2)824 self.assertTrue(r1 is not r2) 714 825 self.assertEqual(weakref.getweakrefs(o), [r2, r1]) 715 826 self.assertEqual(weakref.getweakrefcount(o), 2) … … 718 829 refs = weakref.getweakrefs(o) 719 830 self.assertEqual(len(refs), 3) 720 self.assert _(r2 is refs[0])721 self.assert _(r1 inrefs[1:])722 self.assert _(r3 inrefs[1:])831 self.assertTrue(r2 is refs[0]) 832 self.assertIn(r1, refs[1:]) 833 self.assertIn(r3, refs[1:]) 723 834 724 835 def test_subclass_refs_dont_conflate_callbacks(self): … … 728 839 r1 = MyRef(o, id) 729 840 r2 = MyRef(o, str) 730 self.assert _(r1 is not r2)841 self.assertTrue(r1 is not r2) 731 842 refs = weakref.getweakrefs(o) 732 self.assert _(r1 inrefs)733 self.assert _(r2 inrefs)843 self.assertIn(r1, refs) 844 self.assertIn(r2, refs) 734 845 735 846 def test_subclass_refs_with_slots(self): … … 748 859 self.assertEqual(r.slot2, "def") 749 860 self.assertEqual(r.meth(), "abcdef") 750 self. failIf(hasattr(r, "__dict__"))861 self.assertFalse(hasattr(r, "__dict__")) 751 862 752 863 def test_subclass_refs_with_cycle(self): … … 789 900 790 901 791 class Object:792 def __init__(self, arg):793 self.arg = arg794 def __repr__(self):795 return "<Object %r>" % self.arg796 797 798 902 class MappingTestCase(TestBase): 799 903 800 904 COUNT = 10 905 906 def check_len_cycles(self, dict_type, cons): 907 N = 20 908 items = [RefCycle() for i in range(N)] 909 dct = dict_type(cons(o) for o in items) 910 # Keep an iterator alive 911 it = dct.iteritems() 912 try: 913 next(it) 914 except StopIteration: 915 pass 916 del items 917 gc.collect() 918 n1 = len(dct) 919 del it 920 gc.collect() 921 n2 = len(dct) 922 # one item may be kept alive inside the iterator 923 self.assertIn(n1, (0, 1)) 924 self.assertEqual(n2, 0) 925 926 def test_weak_keyed_len_cycles(self): 927 self.check_len_cycles(weakref.WeakKeyDictionary, lambda k: (k, 1)) 928 929 def test_weak_valued_len_cycles(self): 930 self.check_len_cycles(weakref.WeakValueDictionary, lambda k: (1, k)) 931 932 def check_len_race(self, dict_type, cons): 933 # Extended sanity checks for len() in the face of cyclic collection 934 self.addCleanup(gc.set_threshold, *gc.get_threshold()) 935 for th in range(1, 100): 936 N = 20 937 gc.collect(0) 938 gc.set_threshold(th, th, th) 939 items = [RefCycle() for i in range(N)] 940 dct = dict_type(cons(o) for o in items) 941 del items 942 # All items will be collected at next garbage collection pass 943 it = dct.iteritems() 944 try: 945 next(it) 946 except StopIteration: 947 pass 948 n1 = len(dct) 949 del it 950 n2 = len(dct) 951 self.assertGreaterEqual(n1, 0) 952 self.assertLessEqual(n1, N) 953 self.assertGreaterEqual(n2, 0) 954 self.assertLessEqual(n2, n1) 955 956 def test_weak_keyed_len_race(self): 957 self.check_len_race(weakref.WeakKeyDictionary, lambda k: (k, 1)) 958 959 def test_weak_valued_len_race(self): 960 self.check_len_race(weakref.WeakValueDictionary, lambda k: (1, k)) 801 961 802 962 def test_weak_values(self): … … 806 966 dict, objects = self.make_weak_valued_dict() 807 967 for o in objects: 808 self.assert _(weakref.getweakrefcount(o) == 1,968 self.assertTrue(weakref.getweakrefcount(o) == 1, 809 969 "wrong number of weak references to %r!" % o) 810 self.assert _(o is dict[o.arg],970 self.assertTrue(o is dict[o.arg], 811 971 "wrong object returned by weak dict!") 812 972 items1 = dict.items() … … 814 974 items1.sort() 815 975 items2.sort() 816 self.assert _(items1 == items2,976 self.assertTrue(items1 == items2, 817 977 "cloning of weak-valued dictionary did not work!") 818 978 del items1, items2 819 self.assert _(len(dict) == self.COUNT)979 self.assertTrue(len(dict) == self.COUNT) 820 980 del objects[0] 821 self.assert _(len(dict) == (self.COUNT - 1),981 self.assertTrue(len(dict) == (self.COUNT - 1), 822 982 "deleting object did not cause dictionary update") 823 983 del objects, o 824 self.assert _(len(dict) == 0,984 self.assertTrue(len(dict) == 0, 825 985 "deleting the values did not clear the dictionary") 826 986 # regression on SF bug #447152: … … 833 993 # 834 994 # This exercises d.copy(), d.items(), d[] = v, d[], del d[], 835 # len(d), d.has_key().995 # len(d), in d. 836 996 # 837 997 dict, objects = self.make_weak_keyed_dict() 838 998 for o in objects: 839 self.assert _(weakref.getweakrefcount(o) == 1,999 self.assertTrue(weakref.getweakrefcount(o) == 1, 840 1000 "wrong number of weak references to %r!" % o) 841 self.assert _(o.arg is dict[o],1001 self.assertTrue(o.arg is dict[o], 842 1002 "wrong object returned by weak dict!") 843 1003 items1 = dict.items() 844 1004 items2 = dict.copy().items() 845 self.assert _(set(items1) == set(items2),1005 self.assertTrue(set(items1) == set(items2), 846 1006 "cloning of weak-keyed dictionary did not work!") 847 1007 del items1, items2 848 self.assert _(len(dict) == self.COUNT)1008 self.assertTrue(len(dict) == self.COUNT) 849 1009 del objects[0] 850 self.assert _(len(dict) == (self.COUNT - 1),1010 self.assertTrue(len(dict) == (self.COUNT - 1), 851 1011 "deleting object did not cause dictionary update") 852 1012 del objects, o 853 self.assert _(len(dict) == 0,1013 self.assertTrue(len(dict) == 0, 854 1014 "deleting the keys did not clear the dictionary") 855 1015 o = Object(42) 856 1016 dict[o] = "What is the meaning of the universe?" 857 self.assert _(dict.has_key(o))858 self.assert _(not dict.has_key(34))1017 self.assertIn(o, dict) 1018 self.assertNotIn(34, dict) 859 1019 860 1020 def test_weak_keyed_iters(self): … … 868 1028 for wr in refs: 869 1029 ob = wr() 870 self.assert_(dict.has_key(ob)) 871 self.assert_(ob in dict) 1030 self.assertIn(ob, dict) 872 1031 self.assertEqual(ob.arg, dict[ob]) 873 1032 objects2.remove(ob) … … 879 1038 for wr in dict.iterkeyrefs(): 880 1039 ob = wr() 881 self.assert_(dict.has_key(ob)) 882 self.assert_(ob in dict) 1040 self.assertIn(ob, dict) 883 1041 self.assertEqual(ob.arg, dict[ob]) 884 1042 objects2.remove(ob) … … 915 1073 for item in dict.iteritems(): 916 1074 items.remove(item) 917 self.assert _(len(items) == 0, "iteritems() did not touch all items")1075 self.assertTrue(len(items) == 0, "iteritems() did not touch all items") 918 1076 919 1077 # key iterator, via __iter__(): … … 921 1079 for k in dict: 922 1080 keys.remove(k) 923 self.assert _(len(keys) == 0, "__iter__() did not touch all keys")1081 self.assertTrue(len(keys) == 0, "__iter__() did not touch all keys") 924 1082 925 1083 # key iterator, via iterkeys(): … … 927 1085 for k in dict.iterkeys(): 928 1086 keys.remove(k) 929 self.assert _(len(keys) == 0, "iterkeys() did not touch all keys")1087 self.assertTrue(len(keys) == 0, "iterkeys() did not touch all keys") 930 1088 931 1089 # value iterator: … … 933 1091 for v in dict.itervalues(): 934 1092 values.remove(v) 935 self.assert _(len(values) == 0,1093 self.assertTrue(len(values) == 0, 936 1094 "itervalues() did not touch all values") 937 1095 … … 939 1097 o = Object(3) 940 1098 dict = weakref.WeakKeyDictionary({o:364}) 941 self.assert _(dict[o] == 364)1099 self.assertTrue(dict[o] == 364) 942 1100 943 1101 def test_make_weak_keyed_dict_from_weak_keyed_dict(self): … … 945 1103 dict = weakref.WeakKeyDictionary({o:364}) 946 1104 dict2 = weakref.WeakKeyDictionary(dict) 947 self.assert _(dict[o] == 364)1105 self.assertTrue(dict[o] == 364) 948 1106 949 1107 def make_weak_keyed_dict(self): … … 965 1123 weakdict[key1] = value1 966 1124 weakdict[key2] = value2 967 self.assert _(len(weakdict) == 2)1125 self.assertTrue(len(weakdict) == 2) 968 1126 k, v = weakdict.popitem() 969 self.assert _(len(weakdict) == 1)1127 self.assertTrue(len(weakdict) == 1) 970 1128 if k is key1: 971 self.assert _(v is value1)1129 self.assertTrue(v is value1) 972 1130 else: 973 self.assert _(v is value2)1131 self.assertTrue(v is value2) 974 1132 k, v = weakdict.popitem() 975 self.assert _(len(weakdict) == 0)1133 self.assertTrue(len(weakdict) == 0) 976 1134 if k is key1: 977 self.assert _(v is value1)1135 self.assertTrue(v is value1) 978 1136 else: 979 self.assert _(v is value2)1137 self.assertTrue(v is value2) 980 1138 981 1139 def test_weak_valued_dict_popitem(self): … … 988 1146 989 1147 def check_setdefault(self, klass, key, value1, value2): 990 self.assert _(value1 is not value2,1148 self.assertTrue(value1 is not value2, 991 1149 "invalid test" 992 1150 " -- value parameters must be distinct objects") 993 1151 weakdict = klass() 994 1152 o = weakdict.setdefault(key, value1) 995 self.assert _(o isvalue1)996 self.assert _(weakdict.has_key(key))997 self.assert _(weakdict.get(key) isvalue1)998 self.assert _(weakdict[key] isvalue1)1153 self.assertIs(o, value1) 1154 self.assertIn(key, weakdict) 1155 self.assertIs(weakdict.get(key), value1) 1156 self.assertIs(weakdict[key], value1) 999 1157 1000 1158 o = weakdict.setdefault(key, value2) 1001 self.assert _(o isvalue1)1002 self.assert _(weakdict.has_key(key))1003 self.assert _(weakdict.get(key) isvalue1)1004 self.assert _(weakdict[key] isvalue1)1159 self.assertIs(o, value1) 1160 self.assertIn(key, weakdict) 1161 self.assertIs(weakdict.get(key), value1) 1162 self.assertIs(weakdict[key], value1) 1005 1163 1006 1164 def test_weak_valued_dict_setdefault(self): … … 1014 1172 def check_update(self, klass, dict): 1015 1173 # 1016 # This exercises d.update(), len(d), d.keys(), d.has_key(),1174 # This exercises d.update(), len(d), d.keys(), in d, 1017 1175 # d.get(), d[]. 1018 1176 # 1019 1177 weakdict = klass() 1020 1178 weakdict.update(dict) 1021 self.assert _(len(weakdict) ==len(dict))1179 self.assertEqual(len(weakdict), len(dict)) 1022 1180 for k in weakdict.keys(): 1023 self.assert _(dict.has_key(k),1181 self.assertIn(k, dict, 1024 1182 "mysterious new key appeared in weak dict") 1025 1183 v = dict.get(k) 1026 self.assert _(v isweakdict[k])1027 self.assert _(v isweakdict.get(k))1184 self.assertIs(v, weakdict[k]) 1185 self.assertIs(v, weakdict.get(k)) 1028 1186 for k in dict.keys(): 1029 self.assert _(weakdict.has_key(k),1187 self.assertIn(k, weakdict, 1030 1188 "original key disappeared in weak dict") 1031 1189 v = dict[k] 1032 self.assert _(v isweakdict[k])1033 self.assert _(v isweakdict.get(k))1190 self.assertIs(v, weakdict[k]) 1191 self.assertIs(v, weakdict.get(k)) 1034 1192 1035 1193 def test_weak_valued_dict_update(self): … … 1047 1205 d[o1] = 'something' 1048 1206 d[o2] = 'something' 1049 self.assert _(len(d) == 2)1207 self.assertTrue(len(d) == 2) 1050 1208 del d[o1] 1051 self.assert _(len(d) == 1)1052 self.assert _(d.keys() == [o2])1209 self.assertTrue(len(d) == 1) 1210 self.assertTrue(d.keys() == [o2]) 1053 1211 1054 1212 def test_weak_valued_delitem(self): … … 1058 1216 d['something'] = o1 1059 1217 d['something else'] = o2 1060 self.assert _(len(d) == 2)1218 self.assertTrue(len(d) == 2) 1061 1219 del d['something'] 1062 self.assert _(len(d) == 1)1063 self.assert _(d.items() == [('something else', o2)])1220 self.assertTrue(len(d) == 1) 1221 self.assertTrue(d.items() == [('something else', o2)]) 1064 1222 1065 1223 def test_weak_keyed_bad_delitem(self):
Note:
See TracChangeset
for help on using the changeset viewer.