@@ -88,6 +88,12 @@ def syntax_error_bad_indentation2(self):
8888 def tokenizer_error_with_caret_range (self ):
8989 compile ("blech ( " , "?" , "exec" )
9090
91+ def syntax_error_with_caret_wide_char (self ):
92+ compile ("女女女=1; 女女女/" , "?" , "exec" )
93+
94+ def syntax_error_with_caret_wide_char_range (self ):
95+ compile ("f(x, 女女女 for 女女女 in range(30), z)" , "?" , "exec" )
96+
9197 def test_caret (self ):
9298 err = self .get_exception_format (self .syntax_error_with_caret ,
9399 SyntaxError )
@@ -125,6 +131,20 @@ def test_caret(self):
125131 self .assertEqual (err [1 ].find ("(" ), err [2 ].find ("^" )) # in the right place
126132 self .assertEqual (err [2 ].count ("^" ), 1 )
127133
134+ def test_caret_wide_char (self ):
135+ err = self .get_exception_format (self .syntax_error_with_caret_wide_char ,
136+ SyntaxError )
137+ self .assertIn ("^" , err [2 ])
138+ # "女女女=1; 女女女/" has display width 17
139+ self .assertEqual (err [2 ].find ("^" ), 4 + 17 )
140+
141+ err = self .get_exception_format (self .syntax_error_with_caret_wide_char_range ,
142+ SyntaxError )
143+ self .assertIn ("^" , err [2 ])
144+ self .assertEqual (err [2 ].find ("^" ), 4 + 5 )
145+ # "女女女 for 女女女 in range(30)" has display width 30
146+ self .assertEqual (err [2 ].count ("^" ), 30 )
147+
128148 def test_nocaret (self ):
129149 exc = SyntaxError ("error" , ("x.py" , 23 , None , "bad syntax" ))
130150 err = traceback .format_exception_only (SyntaxError , exc )
0 commit comments