| 5340 | self.assertEqual(obj.__reduce__(), reduce_value) |
| 5341 | |
| 5342 | def test_reduce(self): |
| 5343 | protocols = range(pickle.HIGHEST_PROTOCOL + 1) |
| 5344 | args = (-101, "spam") |
| 5345 | kwargs = {'bacon': -201, 'fish': -301} |
| 5346 | state = {'cheese': -401} |
| 5347 | |
| 5348 | class C1: |
| 5349 | def __getnewargs__(self): |
| 5350 | return args |
| 5351 | obj = C1() |
| 5352 | for proto in protocols: |
| 5353 | self._check_reduce(proto, obj, args) |
| 5354 | |
| 5355 | for name, value in state.items(): |
| 5356 | setattr(obj, name, value) |
| 5357 | for proto in protocols: |
| 5358 | self._check_reduce(proto, obj, args, state=state) |
| 5359 | |
| 5360 | class C2: |
| 5361 | def __getnewargs__(self): |
| 5362 | return "bad args" |
| 5363 | obj = C2() |
| 5364 | for proto in protocols: |
| 5365 | if proto >= 2: |
| 5366 | with self.assertRaises(TypeError): |
| 5367 | obj.__reduce_ex__(proto) |
| 5368 | |
| 5369 | class C3: |
| 5370 | def __getnewargs_ex__(self): |
| 5371 | return (args, kwargs) |
| 5372 | obj = C3() |
| 5373 | for proto in protocols: |
| 5374 | if proto >= 2: |
| 5375 | self._check_reduce(proto, obj, args, kwargs) |
| 5376 | |
| 5377 | class C4: |
| 5378 | def __getnewargs_ex__(self): |
| 5379 | return (args, "bad dict") |
| 5380 | class C5: |
| 5381 | def __getnewargs_ex__(self): |
| 5382 | return ("bad tuple", kwargs) |
| 5383 | class C6: |
| 5384 | def __getnewargs_ex__(self): |
| 5385 | return () |
| 5386 | class C7: |
| 5387 | def __getnewargs_ex__(self): |
| 5388 | return "bad args" |
| 5389 | for proto in protocols: |
| 5390 | for cls in C4, C5, C6, C7: |
| 5391 | obj = cls() |
| 5392 | if proto >= 2: |
| 5393 | with self.assertRaises((TypeError, ValueError)): |
| 5394 | obj.__reduce_ex__(proto) |
| 5395 | |
| 5396 | class C9: |
| 5397 | def __getnewargs_ex__(self): |
| 5398 | return (args, {}) |
| 5399 | obj = C9() |