@@ -805,6 +805,50 @@ class EscapeDecodeTest(unittest.TestCase):
805805 def test_empty (self ):
806806 self .assertEqual (codecs .escape_decode ("" ), (b"" , 0 ))
807807
808+ def test_raw (self ):
809+ for b in range (256 ):
810+ if b != b'\\ ' [0 ]:
811+ self .assertEqual (codecs .escape_decode (bytes ([b ]) + b'0' ),
812+ (bytes ([b ]) + b'0' , 2 ))
813+
814+ def test_escape (self ):
815+ self .assertEqual (codecs .escape_decode (b"[\\ \n ]" ), (b"[]" , 4 ))
816+ self .assertEqual (codecs .escape_decode (br'[\"]' ), (b'["]' , 4 ))
817+ self .assertEqual (codecs .escape_decode (br"[\']" ), (b"[']" , 4 ))
818+ self .assertEqual (codecs .escape_decode (br"[\\]" ), (br"[\]" , 4 ))
819+ self .assertEqual (codecs .escape_decode (br"[\a]" ), (b"[\x07 ]" , 4 ))
820+ self .assertEqual (codecs .escape_decode (br"[\b]" ), (b"[\x08 ]" , 4 ))
821+ self .assertEqual (codecs .escape_decode (br"[\t]" ), (b"[\x09 ]" , 4 ))
822+ self .assertEqual (codecs .escape_decode (br"[\n]" ), (b"[\x0a ]" , 4 ))
823+ self .assertEqual (codecs .escape_decode (br"[\v]" ), (b"[\x0b ]" , 4 ))
824+ self .assertEqual (codecs .escape_decode (br"[\f]" ), (b"[\x0c ]" , 4 ))
825+ self .assertEqual (codecs .escape_decode (br"[\r]" ), (b"[\x0d ]" , 4 ))
826+ self .assertEqual (codecs .escape_decode (br"[\7]" ), (b"[\x07 ]" , 4 ))
827+ self .assertEqual (codecs .escape_decode (br"[\8]" ), (br"[\8]" , 4 ))
828+ self .assertEqual (codecs .escape_decode (br"[\78]" ), (b"[\x07 8]" , 5 ))
829+ self .assertEqual (codecs .escape_decode (br"[\41]" ), (b"[!]" , 5 ))
830+ self .assertEqual (codecs .escape_decode (br"[\418]" ), (b"[!8]" , 6 ))
831+ self .assertEqual (codecs .escape_decode (br"[\101]" ), (b"[A]" , 6 ))
832+ self .assertEqual (codecs .escape_decode (br"[\1010]" ), (b"[A0]" , 7 ))
833+ self .assertEqual (codecs .escape_decode (br"[\501]" ), (b"[A]" , 6 ))
834+ self .assertEqual (codecs .escape_decode (br"[\x41]" ), (b"[A]" , 6 ))
835+ self .assertEqual (codecs .escape_decode (br"[\X41]" ), (br"[\X41]" , 6 ))
836+ self .assertEqual (codecs .escape_decode (br"[\x410]" ), (b"[A0]" , 7 ))
837+ for b in range (256 ):
838+ if b not in b'\n "\' \\ abtnvfr01234567x' :
839+ self .assertEqual (codecs .escape_decode (b'\\ ' + bytes ([b ])),
840+ (b'\\ ' + bytes ([b ]), 2 ))
841+
842+ def test_errors (self ):
843+ self .assertRaises (ValueError , codecs .escape_decode , br"\x" )
844+ self .assertRaises (ValueError , codecs .escape_decode , br"[\x]" )
845+ self .assertEqual (codecs .escape_decode (br"[\x]\x" , "ignore" ), (b"[]" , 6 ))
846+ self .assertEqual (codecs .escape_decode (br"[\x]\x" , "replace" ), (b"[?]?" , 6 ))
847+ self .assertRaises (ValueError , codecs .escape_decode , br"\x0" )
848+ self .assertRaises (ValueError , codecs .escape_decode , br"[\x0]" )
849+ self .assertEqual (codecs .escape_decode (br"[\x0]\x0" , "ignore" ), (b"[]" , 8 ))
850+ self .assertEqual (codecs .escape_decode (br"[\x0]\x0" , "replace" ), (b"[?]?" , 8 ))
851+
808852class RecodingTest (unittest .TestCase ):
809853 def test_recoding (self ):
810854 f = io .BytesIO ()
0 commit comments