@@ -289,7 +289,7 @@ def test_parse_again(self):
289289 'mac-roman' , 'mac-turkish' ,
290290 'koi8-r' , 'koi8-t' , 'koi8-u' , 'kz1048' , 'ptcp154' ,
291291 ])
292- def test_supported_ecodings (self , encoding ):
292+ def test_supported_encodings (self , encoding ):
293293 out = self .Outputter ()
294294 parser = expat .ParserCreate ()
295295 self ._hookup_callbacks (parser , out )
@@ -308,7 +308,7 @@ def test_supported_ecodings(self, encoding):
308308 'UTF-8' , 'utf-8' , 'utf-16' , 'utf-16le' , 'utf-16be' ,
309309 'koi8-u' , 'cp1125' , 'cp1251' , 'iso8859-5' , 'mac-cyrillic' ,
310310 ])
311- def test_supported_ecodings2 (self , encoding ):
311+ def test_supported_encodings2 (self , encoding ):
312312 out = self .Outputter ()
313313 parser = expat .ParserCreate ()
314314 self ._hookup_callbacks (parser , out )
@@ -334,14 +334,54 @@ def test_supported_ecodings2(self, encoding):
334334 "johab" ,
335335 "Shift_JIS" , "Shift_JIS-2004" , "Shift_JISX0213" ,
336336 ])
337- def test_unsupportes_ecodings (self , encoding ):
337+ def test_unsupported_encodings (self , encoding ):
338338 parser = expat .ParserCreate ()
339339 data = (f'<?xml version="1.0" encoding="{ encoding } "?>\n '
340340 '<root></root>' ).encode (encoding )
341341 with self .assertRaises (ValueError ):
342342 parser .Parse (data , True )
343343
344- def test_unknown_ecoding (self ):
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_encodings (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_encodings (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_encoding (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+
384+ def test_unknown_encoding (self ):
345385 parser = expat .ParserCreate ()
346386 data = b'<?xml version="1.0" encoding="xyz"?>\n <root></root>'
347387 with self .assertRaises (LookupError ):
0 commit comments