@@ -792,14 +792,23 @@ def test_ord() -> None:
792792 ord('')
793793
794794[case testDecode]
795+ from testutil import assertRaises
796+
795797def test_decode() -> None:
796798 assert "\N{GREEK CAPITAL LETTER DELTA}" == '\u0394'
797799 assert "\u0394" == "\u0394"
798800 assert "\U00000394" == '\u0394'
799801 assert b'\x80abc'.decode('utf-8', 'replace') == '\ufffdabc'
800802 assert b'\x80abc'.decode('utf-8', 'backslashreplace') == '\\x80abc'
803+ assert b''.decode() == ''
804+ assert b'a'.decode() == 'a'
801805 assert b'abc'.decode() == 'abc'
802806 assert b'abc'.decode('utf-8') == 'abc'
807+ assert b'abc'.decode('utf-8' + str()) == 'abc'
808+ assert b'abc\x00\xce'.decode('latin-1') == 'abc\x00\xce'
809+ assert b'abc\x00\xce'.decode('latin-1' + str()) == 'abc\x00\xce'
810+ assert b'abc\x00\x7f'.decode('ascii') == 'abc\x00\x7f'
811+ assert b'abc\x00\x7f'.decode('ascii' + str()) == 'abc\x00\x7f'
803812 assert b'\x80abc'.decode('utf-8', 'ignore') == 'abc'
804813 assert b'\x80abc'.decode('UTF-8', 'ignore') == 'abc'
805814 assert b'\x80abc'.decode('Utf-8', 'ignore') == 'abc'
@@ -808,16 +817,71 @@ def test_decode() -> None:
808817 assert b'\xd2\xbb\xb6\xfe\xc8\xfd'.decode('gbk', 'ignore') == '一二三'
809818 assert b'\xd2\xbb\xb6\xfe\xc8\xfd'.decode('latin1', 'ignore') == 'Ò»¶þÈý'
810819 assert b'Z\xc3\xbcrich'.decode("utf-8") == 'Zürich'
811- try:
812- b'Z\xc3\xbcrich'.decode('ascii')
813- assert False
814- except UnicodeDecodeError:
815- pass
820+ assert b'Z\xc3\xbcrich'.decode("utf-8" + str()) == 'Zürich'
821+
816822 assert bytearray(range(5)).decode() == '\x00\x01\x02\x03\x04'
817823 b = bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd')
818824 assert b.decode() == '你好'
819825 assert b.decode('gbk') == '浣犲ソ'
820826 assert b.decode('latin1') == 'ä½\xa0好'
827+ assert b.decode('latin1' + str()) == 'ä½\xa0好'
828+
829+ def test_decode_error() -> None:
830+ try:
831+ b'Z\xc3\xbcrich'.decode('ascii')
832+ assert False
833+ except UnicodeDecodeError:
834+ pass
835+ try:
836+ b'Z\xc3\xbcrich'.decode('ascii' + str())
837+ assert False
838+ except UnicodeDecodeError:
839+ pass
840+ try:
841+ b'Z\xc3y'.decode('utf8')
842+ assert False
843+ except UnicodeDecodeError:
844+ pass
845+ try:
846+ b'Z\xc3y'.decode('utf8' + str())
847+ assert False
848+ except UnicodeDecodeError:
849+ pass
850+
851+ def test_decode_bytearray() -> None:
852+ b: bytes = bytearray(b'foo\x00bar')
853+ assert b.decode() == 'foo\x00bar'
854+ assert b.decode('utf-8') == 'foo\x00bar'
855+ assert b.decode('latin-1') == 'foo\x00bar'
856+ assert b.decode('ascii') == 'foo\x00bar'
857+ assert b.decode('utf-8' + str()) == 'foo\x00bar'
858+ assert b.decode('latin-1' + str()) == 'foo\x00bar'
859+ assert b.decode('ascii' + str()) == 'foo\x00bar'
860+ b2: bytes = bytearray(b'foo\x00bar\xbe')
861+ assert b2.decode('latin-1') == 'foo\x00bar\xbe'
862+ with assertRaises(UnicodeDecodeError):
863+ b2.decode('ascii')
864+ with assertRaises(UnicodeDecodeError):
865+ b2.decode('ascii' + str())
866+ with assertRaises(UnicodeDecodeError):
867+ b2.decode('utf-8')
868+ with assertRaises(UnicodeDecodeError):
869+ b2.decode('utf-8' + str())
870+ b3: bytes = bytearray(b'Z\xc3\xbcrich')
871+ assert b3.decode("utf-8") == 'Zürich'
872+
873+ def test_invalid_encoding() -> None:
874+ try:
875+ b"foo".decode("ut-f-8")
876+ assert False
877+ except Exception as e:
878+ assert repr(e).startswith("LookupError")
879+ try:
880+ encoding = "ut-f-8"
881+ b"foo".decode(encoding)
882+ assert False
883+ except Exception as e:
884+ assert repr(e).startswith("LookupError")
821885
822886[case testEncode]
823887from testutil import assertRaises
0 commit comments