@@ -118,7 +118,7 @@ def test_eval_str_invalid_escape(self):
118
118
self .assertEqual (len (w ), 1 )
119
119
self .assertEqual (str (w [0 ].message ), r"invalid escape sequence '\z'" )
120
120
self .assertEqual (w [0 ].filename , '<string>' )
121
- self .assertEqual (w [0 ].lineno , 1 )
121
+ self .assertEqual (w [0 ].lineno , 2 )
122
122
123
123
with warnings .catch_warnings (record = True ) as w :
124
124
warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -128,7 +128,7 @@ def test_eval_str_invalid_escape(self):
128
128
self .assertEqual (w , [])
129
129
self .assertEqual (exc .msg , r"invalid escape sequence '\z'" )
130
130
self .assertEqual (exc .filename , '<string>' )
131
- self .assertEqual (exc .lineno , 1 )
131
+ self .assertEqual (exc .lineno , 2 )
132
132
self .assertEqual (exc .offset , 1 )
133
133
134
134
# 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):
155
155
self .assertEqual (str (w [0 ].message ),
156
156
r"invalid octal escape sequence '\407'" )
157
157
self .assertEqual (w [0 ].filename , '<string>' )
158
- self .assertEqual (w [0 ].lineno , 1 )
158
+ self .assertEqual (w [0 ].lineno , 2 )
159
159
160
160
with warnings .catch_warnings (record = True ) as w :
161
161
warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -165,9 +165,32 @@ def test_eval_str_invalid_octal_escape(self):
165
165
self .assertEqual (w , [])
166
166
self .assertEqual (exc .msg , r"invalid octal escape sequence '\407'" )
167
167
self .assertEqual (exc .filename , '<string>' )
168
- self .assertEqual (exc .lineno , 1 )
168
+ self .assertEqual (exc .lineno , 2 )
169
169
self .assertEqual (exc .offset , 1 )
170
170
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
+
171
194
def test_eval_str_raw (self ):
172
195
self .assertEqual (eval (""" r'x' """ ), 'x' )
173
196
self .assertEqual (eval (r""" r'\x01' """ ), '\\ ' + 'x01' )
@@ -207,7 +230,7 @@ def test_eval_bytes_invalid_escape(self):
207
230
self .assertEqual (len (w ), 1 )
208
231
self .assertEqual (str (w [0 ].message ), r"invalid escape sequence '\z'" )
209
232
self .assertEqual (w [0 ].filename , '<string>' )
210
- self .assertEqual (w [0 ].lineno , 1 )
233
+ self .assertEqual (w [0 ].lineno , 2 )
211
234
212
235
with warnings .catch_warnings (record = True ) as w :
213
236
warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -217,7 +240,7 @@ def test_eval_bytes_invalid_escape(self):
217
240
self .assertEqual (w , [])
218
241
self .assertEqual (exc .msg , r"invalid escape sequence '\z'" )
219
242
self .assertEqual (exc .filename , '<string>' )
220
- self .assertEqual (exc .lineno , 1 )
243
+ self .assertEqual (exc .lineno , 2 )
221
244
222
245
def test_eval_bytes_invalid_octal_escape (self ):
223
246
for i in range (0o400 , 0o1000 ):
@@ -231,7 +254,7 @@ def test_eval_bytes_invalid_octal_escape(self):
231
254
self .assertEqual (str (w [0 ].message ),
232
255
r"invalid octal escape sequence '\407'" )
233
256
self .assertEqual (w [0 ].filename , '<string>' )
234
- self .assertEqual (w [0 ].lineno , 1 )
257
+ self .assertEqual (w [0 ].lineno , 2 )
235
258
236
259
with warnings .catch_warnings (record = True ) as w :
237
260
warnings .simplefilter ('error' , category = SyntaxWarning )
@@ -241,7 +264,7 @@ def test_eval_bytes_invalid_octal_escape(self):
241
264
self .assertEqual (w , [])
242
265
self .assertEqual (exc .msg , r"invalid octal escape sequence '\407'" )
243
266
self .assertEqual (exc .filename , '<string>' )
244
- self .assertEqual (exc .lineno , 1 )
267
+ self .assertEqual (exc .lineno , 2 )
245
268
246
269
def test_eval_bytes_raw (self ):
247
270
self .assertEqual (eval (""" br'x' """ ), b'x' )
0 commit comments