| 10 | ) |
| 11 | |
| 12 | func TestCheckInvalidTokensTest(t *testing.T) { |
| 13 | tests := []struct { |
| 14 | Input string |
| 15 | WantSummary string |
| 16 | WantDetail string |
| 17 | }{ |
| 18 | { |
| 19 | `block “invalid” {}`, |
| 20 | `Invalid character`, |
| 21 | `"Curly quotes" are not valid here. These can sometimes be inadvertently introduced when sharing code via documents or discussion forums. It might help to replace the character with a "straight quote".`, |
| 22 | }, |
| 23 | { |
| 24 | `block 'invalid' {}`, |
| 25 | `Invalid character`, |
| 26 | `Single quotes are not valid. Use double quotes (") to enclose strings.`, |
| 27 | }, |
| 28 | { |
| 29 | "block `invalid` {}", |
| 30 | `Invalid character`, |
| 31 | "The \"`\" character is not valid. To create a multi-line string, use the \"heredoc\" syntax, like \"<<EOT\".", |
| 32 | }, |
| 33 | { |
| 34 | `foo = a & b`, |
| 35 | `Unsupported operator`, |
| 36 | `Bitwise operators are not supported. Did you mean boolean AND ("&&")?`, |
| 37 | }, |
| 38 | { |
| 39 | `foo = a | b`, |
| 40 | `Unsupported operator`, |
| 41 | `Bitwise operators are not supported. Did you mean boolean OR ("||")?`, |
| 42 | }, |
| 43 | { |
| 44 | `foo = ~a`, |
| 45 | `Unsupported operator`, |
| 46 | `Bitwise operators are not supported. Did you mean boolean NOT ("!")?`, |
| 47 | }, |
| 48 | } |
| 49 | |
| 50 | for _, test := range tests { |
| 51 | t.Run(test.Input, func(t *testing.T) { |
| 52 | _, diags := LexConfig([]byte(test.Input), "", hcl.Pos{Line: 1, Column: 1}) |
| 53 | for _, diag := range diags { |
| 54 | if diag.Severity == hcl.DiagError && diag.Summary == test.WantSummary && diag.Detail == test.WantDetail { |
| 55 | return // success! |
| 56 | } |
| 57 | } |
| 58 | // If we fall out here then we didn't find the diagnostic we were |
| 59 | // looking for. |
| 60 | t.Errorf("wrong errors\ngot: %s\nwant: %s; %s", diags.Error(), test.WantSummary, test.WantDetail) |
| 61 | }) |
| 62 | } |
| 63 | } |