@@ -927,6 +927,50 @@ class EscapeDecodeTest(unittest.TestCase):
927927 def test_empty (self ):
928928 self .assertEqual (codecs .escape_decode ("" ), (b"" , 0 ))
929929
930+ def test_raw (self ):
931+ for b in range (256 ):
932+ if b != b'\\ ' [0 ]:
933+ self .assertEqual (codecs .escape_decode (bytes ([b ]) + b'0' ),
934+ (bytes ([b ]) + b'0' , 2 ))
935+
936+ def test_escape (self ):
937+ self .assertEqual (codecs .escape_decode (b"[\\ \n ]" ), (b"[]" , 4 ))
938+ self .assertEqual (codecs .escape_decode (br'[\"]' ), (b'["]' , 4 ))
939+ self .assertEqual (codecs .escape_decode (br"[\']" ), (b"[']" , 4 ))
940+ self .assertEqual (codecs .escape_decode (br"[\\]" ), (br"[\]" , 4 ))
941+ self .assertEqual (codecs .escape_decode (br"[\a]" ), (b"[\x07 ]" , 4 ))
942+ self .assertEqual (codecs .escape_decode (br"[\b]" ), (b"[\x08 ]" , 4 ))
943+ self .assertEqual (codecs .escape_decode (br"[\t]" ), (b"[\x09 ]" , 4 ))
944+ self .assertEqual (codecs .escape_decode (br"[\n]" ), (b"[\x0a ]" , 4 ))
945+ self .assertEqual (codecs .escape_decode (br"[\v]" ), (b"[\x0b ]" , 4 ))
946+ self .assertEqual (codecs .escape_decode (br"[\f]" ), (b"[\x0c ]" , 4 ))
947+ self .assertEqual (codecs .escape_decode (br"[\r]" ), (b"[\x0d ]" , 4 ))
948+ self .assertEqual (codecs .escape_decode (br"[\7]" ), (b"[\x07 ]" , 4 ))
949+ self .assertEqual (codecs .escape_decode (br"[\8]" ), (br"[\8]" , 4 ))
950+ self .assertEqual (codecs .escape_decode (br"[\78]" ), (b"[\x07 8]" , 5 ))
951+ self .assertEqual (codecs .escape_decode (br"[\41]" ), (b"[!]" , 5 ))
952+ self .assertEqual (codecs .escape_decode (br"[\418]" ), (b"[!8]" , 6 ))
953+ self .assertEqual (codecs .escape_decode (br"[\101]" ), (b"[A]" , 6 ))
954+ self .assertEqual (codecs .escape_decode (br"[\1010]" ), (b"[A0]" , 7 ))
955+ self .assertEqual (codecs .escape_decode (br"[\501]" ), (b"[A]" , 6 ))
956+ self .assertEqual (codecs .escape_decode (br"[\x41]" ), (b"[A]" , 6 ))
957+ self .assertEqual (codecs .escape_decode (br"[\X41]" ), (br"[\X41]" , 6 ))
958+ self .assertEqual (codecs .escape_decode (br"[\x410]" ), (b"[A0]" , 7 ))
959+ for b in range (256 ):
960+ if b not in b'\n "\' \\ abtnvfr01234567x' :
961+ self .assertEqual (codecs .escape_decode (b'\\ ' + bytes ([b ])),
962+ (b'\\ ' + bytes ([b ]), 2 ))
963+
964+ def test_errors (self ):
965+ self .assertRaises (ValueError , codecs .escape_decode , br"\x" )
966+ self .assertRaises (ValueError , codecs .escape_decode , br"[\x]" )
967+ self .assertEqual (codecs .escape_decode (br"[\x]\x" , "ignore" ), (b"[]" , 6 ))
968+ self .assertEqual (codecs .escape_decode (br"[\x]\x" , "replace" ), (b"[?]?" , 6 ))
969+ self .assertRaises (ValueError , codecs .escape_decode , br"\x0" )
970+ self .assertRaises (ValueError , codecs .escape_decode , br"[\x0]" )
971+ self .assertEqual (codecs .escape_decode (br"[\x0]\x0" , "ignore" ), (b"[]" , 8 ))
972+ self .assertEqual (codecs .escape_decode (br"[\x0]\x0" , "replace" ), (b"[?]?" , 8 ))
973+
930974class RecodingTest (unittest .TestCase ):
931975 def test_recoding (self ):
932976 f = io .BytesIO ()
0 commit comments