1+ from _codecs import _unregister_error as _codecs_unregister_error
12import codecs
23import html .entities
34import itertools
@@ -1210,7 +1211,6 @@ def replace_with_long(exc):
12101211 '\ufffd \x00 \x00 '
12111212 )
12121213
1213-
12141214 def test_fake_error_class (self ):
12151215 handlers = [
12161216 codecs .strict_errors ,
@@ -1235,6 +1235,31 @@ class FakeUnicodeError(Exception):
12351235 with self .assertRaises ((TypeError , FakeUnicodeError )):
12361236 handler (FakeUnicodeError ())
12371237
1238+ def test_reject_unregister_builtin_error_handler (self ):
1239+ for name in [
1240+ 'strict' , 'ignore' , 'replace' , 'backslashreplace' , 'namereplace' ,
1241+ 'xmlcharrefreplace' , 'surrogateescape' , 'surrogatepass' ,
1242+ ]:
1243+ with self .subTest (name ):
1244+ self .assertRaises (ValueError , _codecs_unregister_error , name )
1245+
1246+ def test_unregister_custom_error_handler (self ):
1247+ def custom_handler (exc ):
1248+ raise exc
1249+
1250+ custom_name = 'test.test_unregister_custom_error_handler'
1251+ self .assertRaises (LookupError , codecs .lookup_error , custom_name )
1252+ codecs .register_error (custom_name , custom_handler )
1253+ self .assertIs (codecs .lookup_error (custom_name ), custom_handler )
1254+ self .assertTrue (_codecs_unregister_error (custom_name ))
1255+ self .assertRaises (LookupError , codecs .lookup_error , custom_name )
1256+
1257+ def test_unregister_custom_unknown_error_handler (self ):
1258+ unknown_name = 'test.test_unregister_custom_unknown_error_handler'
1259+ self .assertRaises (LookupError , codecs .lookup_error , unknown_name )
1260+ self .assertFalse (_codecs_unregister_error (unknown_name ))
1261+ self .assertRaises (LookupError , codecs .lookup_error , unknown_name )
1262+
12381263
12391264if __name__ == "__main__" :
12401265 unittest .main ()
0 commit comments