@@ -118,7 +118,7 @@ def test_eval_str_invalid_escape(self):
118118 self .assertEqual (len (w ), 1 )
119119 self .assertEqual (str (w [0 ].message ), r"invalid escape sequence '\z'" )
120120 self .assertEqual (w [0 ].filename , '<string>' )
121- self .assertEqual (w [0 ].lineno , 1 )
121+ self .assertEqual (w [0 ].lineno , 2 )
122122
123123 with warnings .catch_warnings (record = True ) as w :
124124 warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -128,7 +128,7 @@ def test_eval_str_invalid_escape(self):
128128 self .assertEqual (w , [])
129129 self .assertEqual (exc .msg , r"invalid escape sequence '\z'" )
130130 self .assertEqual (exc .filename , '<string>' )
131- self .assertEqual (exc .lineno , 1 )
131+ self .assertEqual (exc .lineno , 2 )
132132 self .assertEqual (exc .offset , 1 )
133133
134134 # Check that the warning is raised only once if there are syntax errors
@@ -155,7 +155,7 @@ def test_eval_str_invalid_octal_escape(self):
155155 self .assertEqual (str (w [0 ].message ),
156156 r"invalid octal escape sequence '\407'" )
157157 self .assertEqual (w [0 ].filename , '<string>' )
158- self .assertEqual (w [0 ].lineno , 1 )
158+ self .assertEqual (w [0 ].lineno , 2 )
159159
160160 with warnings .catch_warnings (record = True ) as w :
161161 warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -165,9 +165,32 @@ def test_eval_str_invalid_octal_escape(self):
165165 self .assertEqual (w , [])
166166 self .assertEqual (exc .msg , r"invalid octal escape sequence '\407'" )
167167 self .assertEqual (exc .filename , '<string>' )
168- self .assertEqual (exc .lineno , 1 )
168+ self .assertEqual (exc .lineno , 2 )
169169 self .assertEqual (exc .offset , 1 )
170170
171+ def test_invalid_escape_locations_with_offset (self ):
172+ with warnings .catch_warnings (record = True ) as w :
173+ warnings .simplefilter ('error' , category = SyntaxWarning )
174+ with self .assertRaises (SyntaxError ) as cm :
175+ eval ("\" '''''''''''''''''''''invalid\ Escape\" " )
176+ exc = cm .exception
177+ self .assertEqual (w , [])
178+ self .assertEqual (exc .msg , r"invalid escape sequence '\ '" )
179+ self .assertEqual (exc .filename , '<string>' )
180+ self .assertEqual (exc .lineno , 1 )
181+ self .assertEqual (exc .offset , 30 )
182+
183+ with warnings .catch_warnings (record = True ) as w :
184+ warnings .simplefilter ('error' , category = SyntaxWarning )
185+ with self .assertRaises (SyntaxError ) as cm :
186+ eval ("\" ''Incorrect \ logic?\" " )
187+ exc = cm .exception
188+ self .assertEqual (w , [])
189+ self .assertEqual (exc .msg , r"invalid escape sequence '\ '" )
190+ self .assertEqual (exc .filename , '<string>' )
191+ self .assertEqual (exc .lineno , 1 )
192+ self .assertEqual (exc .offset , 14 )
193+
171194 def test_eval_str_raw (self ):
172195 self .assertEqual (eval (""" r'x' """ ), 'x' )
173196 self .assertEqual (eval (r""" r'\x01' """ ), '\\ ' + 'x01' )
@@ -207,7 +230,7 @@ def test_eval_bytes_invalid_escape(self):
207230 self .assertEqual (len (w ), 1 )
208231 self .assertEqual (str (w [0 ].message ), r"invalid escape sequence '\z'" )
209232 self .assertEqual (w [0 ].filename , '<string>' )
210- self .assertEqual (w [0 ].lineno , 1 )
233+ self .assertEqual (w [0 ].lineno , 2 )
211234
212235 with warnings .catch_warnings (record = True ) as w :
213236 warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -217,7 +240,7 @@ def test_eval_bytes_invalid_escape(self):
217240 self .assertEqual (w , [])
218241 self .assertEqual (exc .msg , r"invalid escape sequence '\z'" )
219242 self .assertEqual (exc .filename , '<string>' )
220- self .assertEqual (exc .lineno , 1 )
243+ self .assertEqual (exc .lineno , 2 )
221244
222245 def test_eval_bytes_invalid_octal_escape (self ):
223246 for i in range (0o400 , 0o1000 ):
@@ -231,7 +254,7 @@ def test_eval_bytes_invalid_octal_escape(self):
231254 self .assertEqual (str (w [0 ].message ),
232255 r"invalid octal escape sequence '\407'" )
233256 self .assertEqual (w [0 ].filename , '<string>' )
234- self .assertEqual (w [0 ].lineno , 1 )
257+ self .assertEqual (w [0 ].lineno , 2 )
235258
236259 with warnings .catch_warnings (record = True ) as w :
237260 warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -241,7 +264,7 @@ def test_eval_bytes_invalid_octal_escape(self):
241264 self .assertEqual (w , [])
242265 self .assertEqual (exc .msg , r"invalid octal escape sequence '\407'" )
243266 self .assertEqual (exc .filename , '<string>' )
244- self .assertEqual (exc .lineno , 1 )
267+ self .assertEqual (exc .lineno , 2 )
245268
246269 def test_eval_bytes_raw (self ):
247270 self .assertEqual (eval (""" br'x' """ ), b'x' )
0 commit comments