| package hclsyntax |
| |
| import ( |
| "testing" |
| |
| "github.com/hashicorp/hcl/v2" |
| ) |
| |
| func TestCheckInvalidTokensTest(t *testing.T) { |
| tests := []struct { |
| Input string |
| WantSummary string |
| WantDetail string |
| }{ |
| { |
| `block “invalid” {}`, |
| `Invalid character`, |
| `"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".`, |
| }, |
| { |
| `block 'invalid' {}`, |
| `Invalid character`, |
| `Single quotes are not valid. Use double quotes (") to enclose strings.`, |
| }, |
| { |
| "block `invalid` {}", |
| `Invalid character`, |
| "The \"`\" character is not valid. To create a multi-line string, use the \"heredoc\" syntax, like \"<<EOT\".", |
| }, |
| { |
| `foo = a & b`, |
| `Unsupported operator`, |
| `Bitwise operators are not supported. Did you mean boolean AND ("&&")?`, |
| }, |
| { |
| `foo = a | b`, |
| `Unsupported operator`, |
| `Bitwise operators are not supported. Did you mean boolean OR ("||")?`, |
| }, |
| { |
| `foo = ~a`, |
| `Unsupported operator`, |
| `Bitwise operators are not supported. Did you mean boolean NOT ("!")?`, |
| }, |
| } |
| |
| for _, test := range tests { |
| t.Run(test.Input, func(t *testing.T) { |
| _, diags := LexConfig([]byte(test.Input), "", hcl.Pos{Line: 1, Column: 1}) |
| for _, diag := range diags { |
| if diag.Severity == hcl.DiagError && diag.Summary == test.WantSummary && diag.Detail == test.WantDetail { |
| return // success! |
| } |
| } |
| // If we fall out here then we didn't find the diagnostic we were |
| // looking for. |
| t.Errorf("wrong errors\ngot: %s\nwant: %s; %s", diags.Error(), test.WantSummary, test.WantDetail) |
| }) |
| } |
| } |