(self)
| 392 | ill_formed_sequence_replace = "\ufffd" |
| 393 | |
| 394 | def test_lone_surrogates(self): |
| 395 | self.assertRaises(UnicodeEncodeError, "\ud800".encode, self.encoding) |
| 396 | self.assertEqual("[\uDC80]".encode(self.encoding, "backslashreplace"), |
| 397 | "[\\udc80]".encode(self.encoding)) |
| 398 | self.assertEqual("[\uDC80]".encode(self.encoding, "namereplace"), |
| 399 | "[\\udc80]".encode(self.encoding)) |
| 400 | self.assertEqual("[\uDC80]".encode(self.encoding, "xmlcharrefreplace"), |
| 401 | "[�]".encode(self.encoding)) |
| 402 | self.assertEqual("[\uDC80]".encode(self.encoding, "ignore"), |
| 403 | "[]".encode(self.encoding)) |
| 404 | self.assertEqual("[\uDC80]".encode(self.encoding, "replace"), |
| 405 | "[?]".encode(self.encoding)) |
| 406 | |
| 407 | # sequential surrogate characters |
| 408 | self.assertEqual("[\uD800\uDC80]".encode(self.encoding, "ignore"), |
| 409 | "[]".encode(self.encoding)) |
| 410 | self.assertEqual("[\uD800\uDC80]".encode(self.encoding, "replace"), |
| 411 | "[??]".encode(self.encoding)) |
| 412 | |
| 413 | bom = "".encode(self.encoding) |
| 414 | for before, after in [("\U00010fff", "A"), ("[", "]"), |
| 415 | ("A", "\U00010fff")]: |
| 416 | before_sequence = before.encode(self.encoding)[len(bom):] |
| 417 | after_sequence = after.encode(self.encoding)[len(bom):] |
| 418 | test_string = before + "\uDC80" + after |
| 419 | test_sequence = (bom + before_sequence + |
| 420 | self.ill_formed_sequence + after_sequence) |
| 421 | self.assertRaises(UnicodeDecodeError, test_sequence.decode, |
| 422 | self.encoding) |
| 423 | self.assertEqual(test_string.encode(self.encoding, |
| 424 | "surrogatepass"), |
| 425 | test_sequence) |
| 426 | self.assertEqual(test_sequence.decode(self.encoding, |
| 427 | "surrogatepass"), |
| 428 | test_string) |
| 429 | self.assertEqual(test_sequence.decode(self.encoding, "ignore"), |
| 430 | before + after) |
| 431 | self.assertEqual(test_sequence.decode(self.encoding, "replace"), |
| 432 | before + self.ill_formed_sequence_replace + after) |
| 433 | backslashreplace = ''.join('\\x%02x' % b |
| 434 | for b in self.ill_formed_sequence) |
| 435 | self.assertEqual(test_sequence.decode(self.encoding, "backslashreplace"), |
| 436 | before + backslashreplace + after) |
| 437 | |
| 438 | def test_incremental_surrogatepass(self): |
| 439 | # Test incremental decoder for surrogatepass handler: |
no test coverage detected