(self)
| 171 | self.assertEqual(binop2.right.col_offset, 27) |
| 172 | |
| 173 | def test_ast_line_numbers_nested(self): |
| 174 | expr = """ |
| 175 | a = 10 |
| 176 | f'{a * f"-{x()}-"}'""" |
| 177 | t = ast.parse(expr) |
| 178 | self.assertEqual(type(t), ast.Module) |
| 179 | self.assertEqual(len(t.body), 2) |
| 180 | # check `a = 10` |
| 181 | self.assertEqual(type(t.body[0]), ast.Assign) |
| 182 | self.assertEqual(t.body[0].lineno, 2) |
| 183 | # check `f'...'` |
| 184 | self.assertEqual(type(t.body[1]), ast.Expr) |
| 185 | self.assertEqual(type(t.body[1].value), ast.JoinedStr) |
| 186 | self.assertEqual(len(t.body[1].value.values), 1) |
| 187 | self.assertEqual(type(t.body[1].value.values[0]), ast.FormattedValue) |
| 188 | self.assertEqual(t.body[1].lineno, 3) |
| 189 | self.assertEqual(t.body[1].value.lineno, 3) |
| 190 | self.assertEqual(t.body[1].value.values[0].lineno, 3) |
| 191 | # check the binop location |
| 192 | binop = t.body[1].value.values[0].value |
| 193 | self.assertEqual(type(binop), ast.BinOp) |
| 194 | self.assertEqual(type(binop.left), ast.Name) |
| 195 | self.assertEqual(type(binop.op), ast.Mult) |
| 196 | self.assertEqual(type(binop.right), ast.JoinedStr) |
| 197 | self.assertEqual(binop.lineno, 3) |
| 198 | self.assertEqual(binop.left.lineno, 3) |
| 199 | self.assertEqual(binop.right.lineno, 3) |
| 200 | self.assertEqual(binop.col_offset, 3) |
| 201 | self.assertEqual(binop.left.col_offset, 3) |
| 202 | self.assertEqual(binop.right.col_offset, 7) |
| 203 | # check the nested call location |
| 204 | self.assertEqual(len(binop.right.values), 3) |
| 205 | self.assertEqual(type(binop.right.values[0]), ast.Constant) |
| 206 | self.assertEqual(type(binop.right.values[0].value), str) |
| 207 | self.assertEqual(type(binop.right.values[1]), ast.FormattedValue) |
| 208 | self.assertEqual(type(binop.right.values[2]), ast.Constant) |
| 209 | self.assertEqual(type(binop.right.values[2].value), str) |
| 210 | self.assertEqual(binop.right.values[0].lineno, 3) |
| 211 | self.assertEqual(binop.right.values[1].lineno, 3) |
| 212 | self.assertEqual(binop.right.values[2].lineno, 3) |
| 213 | call = binop.right.values[1].value |
| 214 | self.assertEqual(type(call), ast.Call) |
| 215 | self.assertEqual(call.lineno, 3) |
| 216 | self.assertEqual(call.col_offset, 11) |
| 217 | |
| 218 | def test_ast_line_numbers_duplicate_expression(self): |
| 219 | expr = """ |
nothing calls this directly
no test coverage detected