(self)
| 305 | self.assertEqual(name.end_col_offset, 25) |
| 306 | |
| 307 | def test_ast_line_numbers_multiline_fstring(self): |
| 308 | # See bpo-30465 for details. |
| 309 | expr = """ |
| 310 | a = 10 |
| 311 | f''' |
| 312 | {a |
| 313 | * |
| 314 | x()} |
| 315 | non-important content |
| 316 | ''' |
| 317 | """ |
| 318 | t = ast.parse(expr) |
| 319 | self.assertEqual(type(t), ast.Module) |
| 320 | self.assertEqual(len(t.body), 2) |
| 321 | # check `a = 10` |
| 322 | self.assertEqual(type(t.body[0]), ast.Assign) |
| 323 | self.assertEqual(t.body[0].lineno, 2) |
| 324 | # check `f'...'` |
| 325 | self.assertEqual(type(t.body[1]), ast.Expr) |
| 326 | self.assertEqual(type(t.body[1].value), ast.JoinedStr) |
| 327 | self.assertEqual(len(t.body[1].value.values), 3) |
| 328 | self.assertEqual(type(t.body[1].value.values[0]), ast.Constant) |
| 329 | self.assertEqual(type(t.body[1].value.values[0].value), str) |
| 330 | self.assertEqual(type(t.body[1].value.values[1]), ast.FormattedValue) |
| 331 | self.assertEqual(type(t.body[1].value.values[2]), ast.Constant) |
| 332 | self.assertEqual(type(t.body[1].value.values[2].value), str) |
| 333 | self.assertEqual(t.body[1].lineno, 3) |
| 334 | self.assertEqual(t.body[1].value.lineno, 3) |
| 335 | self.assertEqual(t.body[1].value.values[0].lineno, 3) |
| 336 | self.assertEqual(t.body[1].value.values[1].lineno, 4) |
| 337 | self.assertEqual(t.body[1].value.values[2].lineno, 6) |
| 338 | self.assertEqual(t.body[1].col_offset, 0) |
| 339 | self.assertEqual(t.body[1].value.col_offset, 0) |
| 340 | self.assertEqual(t.body[1].value.values[0].col_offset, 4) |
| 341 | self.assertEqual(t.body[1].value.values[1].col_offset, 2) |
| 342 | self.assertEqual(t.body[1].value.values[2].col_offset, 11) |
| 343 | # NOTE: the following lineno information and col_offset is correct for |
| 344 | # expressions within FormattedValues. |
| 345 | binop = t.body[1].value.values[1].value |
| 346 | self.assertEqual(type(binop), ast.BinOp) |
| 347 | self.assertEqual(type(binop.left), ast.Name) |
| 348 | self.assertEqual(type(binop.op), ast.Mult) |
| 349 | self.assertEqual(type(binop.right), ast.Call) |
| 350 | self.assertEqual(binop.lineno, 4) |
| 351 | self.assertEqual(binop.left.lineno, 4) |
| 352 | self.assertEqual(binop.right.lineno, 6) |
| 353 | self.assertEqual(binop.col_offset, 3) |
| 354 | self.assertEqual(binop.left.col_offset, 3) |
| 355 | self.assertEqual(binop.right.col_offset, 7) |
| 356 | |
| 357 | expr = """ |
| 358 | a = f''' |
| 359 | {blech} |
| 360 | ''' |
| 361 | """ |
| 362 | t = ast.parse(expr) |
| 363 | self.assertEqual(type(t), ast.Module) |
| 364 | self.assertEqual(len(t.body), 1) |
nothing calls this directly
no test coverage detected