@@ -467,45 +467,31 @@ def test_bug_834676(self):
467467 # Check for bug 834676
468468 unicodedata .normalize ('NFC' , '\ud55c \uae00 ' )
469469
470- def test_issue129569 (self ):
471- # subclass of str
470+ def test_normalize_func_shall_return_exact_str (self ):
471+ # See: https://github.com/python/cpython/issues/129569
472+ normalize = unicodedata .normalize
473+
472474 class StrSub (str ):
473475 pass
474476
475- # must always be str
476- EARLY_RETURN_TYPE = str
477- RETURN_TYPE = str
478-
479- def NFC (s : str ):
480- return unicodedata .normalize ("NFC" , s )
481-
482- def NFKC (s : str ):
483- return unicodedata .normalize ("NFKC" , s )
484-
485- def NFD (s : str ):
486- return unicodedata .normalize ("NFD" , s )
487-
488- def NFKD (s : str ):
489- return unicodedata .normalize ("NFKD" , s )
477+ normalization_forms = ("NFC" , "NFKC" , "NFD" , "NFKD" )
490478
491479 # normalized strings
492480 empty_str = ""
493- self .assertEqual (len (StrSub (empty_str )), 0 )
494- self .assertIs (type (NFKC (StrSub (empty_str ))), EARLY_RETURN_TYPE )
495-
496481 ascii_str = "ascii"
497- self .assertTrue (StrSub (ascii_str ).isascii ())
498- self .assertIs (type (NFC (StrSub (ascii_str ))), EARLY_RETURN_TYPE )
499- self .assertIs (type (NFKC (StrSub (ascii_str ))), EARLY_RETURN_TYPE )
500- self .assertIs (type (NFD (StrSub (ascii_str ))), EARLY_RETURN_TYPE )
501- self .assertIs (type (NFKD (StrSub (ascii_str ))), EARLY_RETURN_TYPE )
482+ for form in normalization_forms :
483+ with self .subTest (form = form ):
484+ self .assertIs (type (normalize (form , empty_str )), str )
485+ self .assertIs (type (normalize (form , ascii_str )), str )
486+ self .assertIs (type (normalize (form , StrSub (empty_str ))), str )
487+ self .assertIs (type (normalize (form , StrSub (ascii_str ))), str )
502488
503489 # unnormalized strings
504- s1 , s2 , s3 , s4 = "\u1e0b \u0323 " , "\ufb01 " , "\u1e69 " , "\u1e9b \u0323 "
505- self . assertIs ( type ( NFC ( StrSub ( s1 ))), RETURN_TYPE )
506- self .assertIs ( type ( NFKC ( StrSub ( s2 ))), RETURN_TYPE )
507- self .assertIs (type (NFD ( StrSub ( s3 ))), RETURN_TYPE )
508- self .assertIs (type (NFKD ( StrSub (s4 ))), RETURN_TYPE )
490+ strings_to_normalize = ( "\u1e0b \u0323 " , "\ufb01 " , "\u1e69 " , "\u1e9b \u0323 " )
491+ for form , input_str in zip ( normalization_forms , strings_to_normalize ):
492+ with self .subTest ( form = form , input_str = input_str ):
493+ self .assertIs (type (normalize ( form , input_str )), str )
494+ self .assertIs (type (normalize ( form , StrSub (input_str ))), str )
509495
510496
511497if __name__ == "__main__" :
0 commit comments