| 5577 | self.assertEqual(obj.__reduce__(), reduce_value) |
| 5578 | |
| 5579 | def test_reduce(self): |
| 5580 | protocols = range(pickle.HIGHEST_PROTOCOL + 1) |
| 5581 | args = (-101, "spam") |
| 5582 | kwargs = {'bacon': -201, 'fish': -301} |
| 5583 | state = {'cheese': -401} |
| 5584 | |
| 5585 | class C1: |
| 5586 | def __getnewargs__(self): |
| 5587 | return args |
| 5588 | obj = C1() |
| 5589 | for proto in protocols: |
| 5590 | self._check_reduce(proto, obj, args) |
| 5591 | |
| 5592 | for name, value in state.items(): |
| 5593 | setattr(obj, name, value) |
| 5594 | for proto in protocols: |
| 5595 | self._check_reduce(proto, obj, args, state=state) |
| 5596 | |
| 5597 | class C2: |
| 5598 | def __getnewargs__(self): |
| 5599 | return "bad args" |
| 5600 | obj = C2() |
| 5601 | for proto in protocols: |
| 5602 | if proto >= 2: |
| 5603 | with self.assertRaises(TypeError): |
| 5604 | obj.__reduce_ex__(proto) |
| 5605 | |
| 5606 | class C3: |
| 5607 | def __getnewargs_ex__(self): |
| 5608 | return (args, kwargs) |
| 5609 | obj = C3() |
| 5610 | for proto in protocols: |
| 5611 | if proto >= 2: |
| 5612 | self._check_reduce(proto, obj, args, kwargs) |
| 5613 | |
| 5614 | class C4: |
| 5615 | def __getnewargs_ex__(self): |
| 5616 | return (args, "bad dict") |
| 5617 | class C5: |
| 5618 | def __getnewargs_ex__(self): |
| 5619 | return ("bad tuple", kwargs) |
| 5620 | class C6: |
| 5621 | def __getnewargs_ex__(self): |
| 5622 | return () |
| 5623 | class C7: |
| 5624 | def __getnewargs_ex__(self): |
| 5625 | return "bad args" |
| 5626 | for proto in protocols: |
| 5627 | for cls in C4, C5, C6, C7: |
| 5628 | obj = cls() |
| 5629 | if proto >= 2: |
| 5630 | with self.assertRaises((TypeError, ValueError)): |
| 5631 | obj.__reduce_ex__(proto) |
| 5632 | |
| 5633 | class C9: |
| 5634 | def __getnewargs_ex__(self): |
| 5635 | return (args, {}) |
| 5636 | obj = C9() |