----------------------------------------------------------------------------- TestPositionsWithoutPositionTracking verifies that ParseFromModelTokens now provides accurate position information (Bug 1 fix: error positions were always 0,0 because the position mapping was discarded). ------------------
(t *testing.T)
| 372 | // ----------------------------------------------------------------------------- |
| 373 | |
| 374 | func TestPositionsWithoutPositionTracking(t *testing.T) { |
| 375 | // Bug 1 fix: ParseFromModelTokens now uses convertModelTokensWithPositions |
| 376 | // internally, so positions are always populated - even when the caller |
| 377 | // does not explicitly call ParseFromModelTokensWithPositions. |
| 378 | tkz := tokenizer.GetTokenizer() |
| 379 | defer tokenizer.PutTokenizer(tkz) |
| 380 | |
| 381 | tokens, err := tkz.Tokenize([]byte("SELECT id FROM users")) |
| 382 | if err != nil { |
| 383 | t.Fatalf("tokenize failed: %v", err) |
| 384 | } |
| 385 | |
| 386 | p := parser.GetParser() |
| 387 | defer parser.PutParser(p) |
| 388 | |
| 389 | tree, err := p.ParseFromModelTokens(tokens) |
| 390 | if err != nil { |
| 391 | t.Fatalf("parse failed: %v", err) |
| 392 | } |
| 393 | |
| 394 | sel := tree.Statements[0].(*ast.SelectStatement) |
| 395 | |
| 396 | // With unified token types, positions are always available from TokenWithSpan spans. |
| 397 | // ParseFromModelTokens now inherently carries position info. |
| 398 | if sel.Pos.Line == 0 && sel.Pos.Column == 0 { |
| 399 | t.Errorf("expected non-zero position with unified tokens, got line=%d col=%d", |
| 400 | sel.Pos.Line, sel.Pos.Column) |
| 401 | } |
| 402 | } |
| 403 | |
| 404 | // ----------------------------------------------------------------------------- |
| 405 | // TestArithmeticBinaryExpressionPosition verifies positions in arithmetic |
nothing calls this directly
no test coverage detected