@@ -730,6 +730,50 @@ class EscapeDecodeTest(unittest.TestCase):
730730 def test_empty (self ):
731731 self .assertEqual (codecs .escape_decode ("" ), ("" , 0 ))
732732
733+ def test_raw (self ):
734+ for b in '' .join (map (chr , range (256 ))):
735+ if b != '\\ ' :
736+ self .assertEqual (codecs .escape_decode (b + '0' ),
737+ (b + '0' , 2 ))
738+
739+ def test_escape (self ):
740+ self .assertEqual (codecs .escape_decode (b"[\\ \n ]" ), (b"[]" , 4 ))
741+ self .assertEqual (codecs .escape_decode (br'[\"]' ), (b'["]' , 4 ))
742+ self .assertEqual (codecs .escape_decode (br"[\']" ), (b"[']" , 4 ))
743+ self .assertEqual (codecs .escape_decode (br"[\\]" ), (br"[\]" , 4 ))
744+ self .assertEqual (codecs .escape_decode (br"[\a]" ), (b"[\x07 ]" , 4 ))
745+ self .assertEqual (codecs .escape_decode (br"[\b]" ), (b"[\x08 ]" , 4 ))
746+ self .assertEqual (codecs .escape_decode (br"[\t]" ), (b"[\x09 ]" , 4 ))
747+ self .assertEqual (codecs .escape_decode (br"[\n]" ), (b"[\x0a ]" , 4 ))
748+ self .assertEqual (codecs .escape_decode (br"[\v]" ), (b"[\x0b ]" , 4 ))
749+ self .assertEqual (codecs .escape_decode (br"[\f]" ), (b"[\x0c ]" , 4 ))
750+ self .assertEqual (codecs .escape_decode (br"[\r]" ), (b"[\x0d ]" , 4 ))
751+ self .assertEqual (codecs .escape_decode (br"[\7]" ), (b"[\x07 ]" , 4 ))
752+ self .assertEqual (codecs .escape_decode (br"[\8]" ), (br"[\8]" , 4 ))
753+ self .assertEqual (codecs .escape_decode (br"[\78]" ), (b"[\x07 8]" , 5 ))
754+ self .assertEqual (codecs .escape_decode (br"[\41]" ), (b"[!]" , 5 ))
755+ self .assertEqual (codecs .escape_decode (br"[\418]" ), (b"[!8]" , 6 ))
756+ self .assertEqual (codecs .escape_decode (br"[\101]" ), (b"[A]" , 6 ))
757+ self .assertEqual (codecs .escape_decode (br"[\1010]" ), (b"[A0]" , 7 ))
758+ self .assertEqual (codecs .escape_decode (br"[\501]" ), (b"[A]" , 6 ))
759+ self .assertEqual (codecs .escape_decode (br"[\x41]" ), (b"[A]" , 6 ))
760+ self .assertEqual (codecs .escape_decode (br"[\X41]" ), (br"[\X41]" , 6 ))
761+ self .assertEqual (codecs .escape_decode (br"[\x410]" ), (b"[A0]" , 7 ))
762+ for b in '' .join (map (chr , range (256 ))):
763+ if b not in '\n "\' \\ abtnvfr01234567x' :
764+ self .assertEqual (codecs .escape_decode ('\\ ' + b ),
765+ ('\\ ' + b , 2 ))
766+
767+ def test_errors (self ):
768+ self .assertRaises (ValueError , codecs .escape_decode , br"\x" )
769+ self .assertRaises (ValueError , codecs .escape_decode , br"[\x]" )
770+ self .assertEqual (codecs .escape_decode (br"[\x]\x" , "ignore" ), (b"[]" , 6 ))
771+ self .assertEqual (codecs .escape_decode (br"[\x]\x" , "replace" ), (b"[?]?" , 6 ))
772+ self .assertRaises (ValueError , codecs .escape_decode , br"\x0" )
773+ self .assertRaises (ValueError , codecs .escape_decode , br"[\x0]" )
774+ self .assertEqual (codecs .escape_decode (br"[\x0]\x0" , "ignore" ), (b"[]" , 8 ))
775+ self .assertEqual (codecs .escape_decode (br"[\x0]\x0" , "replace" ), (b"[?]?" , 8 ))
776+
733777class RecodingTest (unittest .TestCase ):
734778 def test_recoding (self ):
735779 f = StringIO .StringIO ()
0 commit comments