@@ -820,6 +820,36 @@ def test_partial(self):
820820 ]
821821 )
822822
823+ def test_errors (self ):
824+ tests = [
825+ (b'a\xff b' , 'a\ufffd b' ),
826+ (b'a+IK' , 'a\ufffd ' ),
827+ (b'a+IK-b' , 'a\ufffd b' ),
828+ (b'a+IK,b' , 'a\ufffd b' ),
829+ (b'a+IKx' , 'a\u20ac \ufffd ' ),
830+ (b'a+IKx-b' , 'a\u20ac \ufffd b' ),
831+ (b'a+IKwgr' , 'a\u20ac \ufffd ' ),
832+ (b'a+IKwgr-b' , 'a\u20ac \ufffd b' ),
833+ (b'a+IKwgr,' , 'a\u20ac \ufffd ' ),
834+ (b'a+IKwgr,-b' , 'a\u20ac \ufffd -b' ),
835+ (b'a+IKwgrB' , 'a\u20ac \u20ac \ufffd ' ),
836+ (b'a+IKwgrB-b' , 'a\u20ac \u20ac \ufffd b' ),
837+ (b'a+/,+IKw-b' , 'a\ufffd \u20ac b' ),
838+ (b'a+//,+IKw-b' , 'a\ufffd \u20ac b' ),
839+ (b'a+///,+IKw-b' , 'a\uffff \ufffd \u20ac b' ),
840+ (b'a+////,+IKw-b' , 'a\uffff \ufffd \u20ac b' ),
841+ ]
842+ for raw , expected in tests :
843+ with self .subTest (raw = raw ):
844+ self .assertRaises (UnicodeDecodeError , codecs .utf_7_decode ,
845+ raw , 'strict' , True )
846+ self .assertEqual (raw .decode ('utf-7' , 'replace' ), expected )
847+
848+ def test_nonbmp (self ):
849+ self .assertEqual ('\U000104A0 ' .encode (self .encoding ), b'+2AHcoA-' )
850+ self .assertEqual ('\ud801 \udca0 ' .encode (self .encoding ), b'+2AHcoA-' )
851+ self .assertEqual (b'+2AHcoA-' .decode (self .encoding ), '\U000104A0 ' )
852+
823853class UTF16ExTest (unittest .TestCase ):
824854
825855 def test_errors (self ):
0 commit comments