@@ -792,14 +792,23 @@ def test_ord() -> None:
792
792
ord('')
793
793
794
794
[case testDecode]
795
+ from testutil import assertRaises
796
+
795
797
def test_decode() -> None:
796
798
assert "\N{GREEK CAPITAL LETTER DELTA}" == '\u0394'
797
799
assert "\u0394" == "\u0394"
798
800
assert "\U00000394" == '\u0394'
799
801
assert b'\x80abc'.decode('utf-8', 'replace') == '\ufffdabc'
800
802
assert b'\x80abc'.decode('utf-8', 'backslashreplace') == '\\x80abc'
803
+ assert b''.decode() == ''
804
+ assert b'a'.decode() == 'a'
801
805
assert b'abc'.decode() == 'abc'
802
806
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'
803
812
assert b'\x80abc'.decode('utf-8', 'ignore') == 'abc'
804
813
assert b'\x80abc'.decode('UTF-8', 'ignore') == 'abc'
805
814
assert b'\x80abc'.decode('Utf-8', 'ignore') == 'abc'
@@ -808,16 +817,71 @@ def test_decode() -> None:
808
817
assert b'\xd2\xbb\xb6\xfe\xc8\xfd'.decode('gbk', 'ignore') == '一二三'
809
818
assert b'\xd2\xbb\xb6\xfe\xc8\xfd'.decode('latin1', 'ignore') == 'Ò»¶þÈý'
810
819
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
+
816
822
assert bytearray(range(5)).decode() == '\x00\x01\x02\x03\x04'
817
823
b = bytearray(b'\xe4\xbd\xa0\xe5\xa5\xbd')
818
824
assert b.decode() == '你好'
819
825
assert b.decode('gbk') == '浣犲ソ'
820
826
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")
821
885
822
886
[case testEncode]
823
887
from testutil import assertRaises
0 commit comments