Mercurial > cpython-lru_cache-weakref
diff Lib/test/test_codecs.py @ 53681:52a77ef069cd
Issue #3672: Reject surrogates in utf-8 codec; add surrogates error
handler.
| author | Martin v. Löwis <martin@v.loewis.de> |
|---|---|
| date | Sat, 02 May 2009 18:52:14 +0000 |
| parents | ec6f29608bf0 |
| children | ac209f132b17 |
line wrap: on
line diff
--- a/Lib/test/test_codecs.py Sat May 02 18:35:58 2009 +0000 +++ b/Lib/test/test_codecs.py Sat May 02 18:52:14 2009 +0000 @@ -541,6 +541,17 @@ self.check_state_handling_decode(self.encoding, u, u.encode(self.encoding)) + def test_lone_surrogates(self): + self.assertRaises(UnicodeEncodeError, "\ud800".encode, "utf-8") + self.assertRaises(UnicodeDecodeError, b"\xed\xa0\x80".decode, "utf-8") + + def test_surrogates_handler(self): + self.assertEquals("abc\ud800def".encode("utf-8", "surrogates"), + b"abc\xed\xa0\x80def") + self.assertEquals(b"abc\xed\xa0\x80def".decode("utf-8", "surrogates"), + "abc\ud800def") + self.assertTrue(codecs.lookup_error("surrogates")) + class UTF7Test(ReadTest): encoding = "utf-7" @@ -1023,12 +1034,12 @@ # Skipped continue # The Unicode strings are given in UTF-8 - orig = str(orig, "utf-8") + orig = str(orig, "utf-8", "surrogates") if prepped is None: # Input contains prohibited characters self.assertRaises(UnicodeError, nameprep, orig) else: - prepped = str(prepped, "utf-8") + prepped = str(prepped, "utf-8", "surrogates") try: self.assertEquals(nameprep(orig), prepped) except Exception as e:
