@@ -341,6 +341,46 @@ def test_unsupportes_ecodings(self, encoding):
341341 with self .assertRaises (ValueError ):
342342 parser .Parse (data , True )
343343
344+ parser = expat .ParserCreate ()
345+ data = (f'<?xml version="1.0" encoding="{ encoding } "?>\n '
346+ '<root></root>' ).encode ()
347+ with self .assertRaises (ValueError ):
348+ parser .Parse (data , True )
349+
350+ @support .subTests ('encoding' , [
351+ 'cp037' , 'cp273' , 'cp424' , 'cp500' , 'cp864' , 'cp875' ,
352+ 'cp1026' , 'cp1140' ,
353+ 'mac_arabic' , 'mac_farsi' ,
354+ ])
355+ def test_incompatible_ecodings (self , encoding ):
356+ parser = expat .ParserCreate ()
357+ data = (f'<?xml version="1.0" encoding="{ encoding } "?>\n '
358+ '<root></root>' ).encode (encoding )
359+ with self .assertRaises (expat .ExpatError ):
360+ parser .Parse (data , True )
361+
362+ parser = expat .ParserCreate ()
363+ data = (f'<?xml version="1.0" encoding="{ encoding } "?>\n '
364+ '<root></root>' ).encode ()
365+ with self .assertRaisesRegex (expat .ExpatError , 'unknown encoding' ):
366+ parser .Parse (data , True )
367+
368+ @support .subTests ('encoding' , [
369+ 'hex_codec' , 'rot_13' ,
370+ ])
371+ def test_non_text_ecodings (self , encoding ):
372+ parser = expat .ParserCreate ()
373+ data = (f'<?xml version="1.0" encoding="{ encoding } "?>\n '
374+ '<root></root>' ).encode ()
375+ with self .assertRaises (LookupError ):
376+ parser .Parse (data , True )
377+
378+ def test_undefined_ecoding (self ):
379+ parser = expat .ParserCreate ()
380+ data = b'<?xml version="1.0" encoding="undefined"?>\n <root></root>'
381+ with self .assertRaises (UnicodeError ):
382+ parser .Parse (data , True )
383+
344384 def test_unknown_ecoding (self ):
345385 parser = expat .ParserCreate ()
346386 data = b'<?xml version="1.0" encoding="xyz"?>\n <root></root>'
0 commit comments