(self)
| 994 | self.assertRaises(TypeError, codecs.charmap_decode, b"\xff", "strict", {0xff: sys.maxunicode+1}) |
| 995 | |
| 996 | def test_encodehelper(self): |
| 997 | # enhance coverage of: |
| 998 | # Objects/unicodeobject.c::unicode_encode_call_errorhandler() |
| 999 | # and callers |
| 1000 | self.assertRaises(LookupError, "\xff".encode, "ascii", "test.unknown") |
| 1001 | |
| 1002 | def badencodereturn1(exc): |
| 1003 | return 42 |
| 1004 | codecs.register_error("test.badencodereturn1", badencodereturn1) |
| 1005 | self.assertRaises(TypeError, "\xff".encode, "ascii", "test.badencodereturn1") |
| 1006 | |
| 1007 | def badencodereturn2(exc): |
| 1008 | return ("?", None) |
| 1009 | codecs.register_error("test.badencodereturn2", badencodereturn2) |
| 1010 | self.assertRaises(TypeError, "\xff".encode, "ascii", "test.badencodereturn2") |
| 1011 | |
| 1012 | handler = PosReturn() |
| 1013 | codecs.register_error("test.posreturn", handler.handle) |
| 1014 | |
| 1015 | # Valid negative position |
| 1016 | handler.pos = -1 |
| 1017 | self.assertEqual("\xff0".encode("ascii", "test.posreturn"), b"<?>0") |
| 1018 | |
| 1019 | # Valid negative position |
| 1020 | handler.pos = -2 |
| 1021 | self.assertEqual("\xff0".encode("ascii", "test.posreturn"), b"<?><?>") |
| 1022 | |
| 1023 | # Negative position out of bounds |
| 1024 | handler.pos = -3 |
| 1025 | self.assertRaises(IndexError, "\xff0".encode, "ascii", "test.posreturn") |
| 1026 | |
| 1027 | # Valid positive position |
| 1028 | handler.pos = 1 |
| 1029 | self.assertEqual("\xff0".encode("ascii", "test.posreturn"), b"<?>0") |
| 1030 | |
| 1031 | # Largest valid positive position (one beyond end of input |
| 1032 | handler.pos = 2 |
| 1033 | self.assertEqual("\xff0".encode("ascii", "test.posreturn"), b"<?>") |
| 1034 | |
| 1035 | # Invalid positive position |
| 1036 | handler.pos = 3 |
| 1037 | self.assertRaises(IndexError, "\xff0".encode, "ascii", "test.posreturn") |
| 1038 | |
| 1039 | handler.pos = 0 |
| 1040 | |
| 1041 | class D(dict): |
| 1042 | def __getitem__(self, key): |
| 1043 | raise ValueError |
| 1044 | for err in ("strict", "replace", "xmlcharrefreplace", |
| 1045 | "backslashreplace", "namereplace", "test.posreturn"): |
| 1046 | self.assertRaises(UnicodeError, codecs.charmap_encode, "\xff", err, {0xff: None}) |
| 1047 | self.assertRaises(ValueError, codecs.charmap_encode, "\xff", err, D()) |
| 1048 | self.assertRaises(TypeError, codecs.charmap_encode, "\xff", err, {0xff: 300}) |
| 1049 | |
| 1050 | # TODO: RUSTPYTHON |
| 1051 | @unittest.expectedFailure |
nothing calls this directly
no test coverage detected