Skip to content

Commit

Permalink
Merge pull request hashicorp#497 from hashicorp/heredoc-trailing-whit…
Browse files Browse the repository at this point in the history
…espace

hclsyntax: test for invalid whitespace heredoc
  • Loading branch information
kmoe committed Mar 3, 2022
2 parents 3454437 + 1f6e391 commit 2926ca3
Showing 1 changed file with 310 additions and 0 deletions.
310 changes: 310 additions & 0 deletions hclsyntax/scan_tokens_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1507,6 +1507,150 @@ EOT
},
},
},
{
`<<EOT
hello world
EOT
`,
[]Token{
{
Type: TokenOHeredoc,
Bytes: []byte("<<EOT\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 0, Line: 1, Column: 1},
End: hcl.Pos{Byte: 6, Line: 2, Column: 1},
},
},
{
Type: TokenStringLit,
Bytes: []byte(" hello world\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 6, Line: 2, Column: 1},
End: hcl.Pos{Byte: 20, Line: 3, Column: 1},
},
},
{
Type: TokenCHeredoc,
Bytes: []byte("EOT"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 20, Line: 3, Column: 1},
End: hcl.Pos{Byte: 23, Line: 3, Column: 4},
},
},
{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 23, Line: 3, Column: 4},
End: hcl.Pos{Byte: 24, Line: 4, Column: 1},
},
},
{
Type: TokenEOF,
Bytes: []byte{},
Range: hcl.Range{
Start: hcl.Pos{Byte: 24, Line: 4, Column: 1},
End: hcl.Pos{Byte: 24, Line: 4, Column: 1},
},
},
},
},
{
`<<-EOT
hello world
EOT
`,
[]Token{
{
Type: TokenOHeredoc,
Bytes: []byte("<<-EOT\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 0, Line: 1, Column: 1},
End: hcl.Pos{Byte: 7, Line: 2, Column: 1},
},
},
{
Type: TokenStringLit,
Bytes: []byte(" hello world\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 7, Line: 2, Column: 1},
End: hcl.Pos{Byte: 21, Line: 3, Column: 1},
},
},
{
Type: TokenCHeredoc,
Bytes: []byte("EOT"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 21, Line: 3, Column: 1},
End: hcl.Pos{Byte: 24, Line: 3, Column: 4},
},
},
{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 24, Line: 3, Column: 4},
End: hcl.Pos{Byte: 25, Line: 4, Column: 1},
},
},
{
Type: TokenEOF,
Bytes: []byte{},
Range: hcl.Range{
Start: hcl.Pos{Byte: 25, Line: 4, Column: 1},
End: hcl.Pos{Byte: 25, Line: 4, Column: 1},
},
},
},
},
{
`<<-EOT
hello world
EOT
`,
[]Token{
{
Type: TokenOHeredoc,
Bytes: []byte("<<-EOT\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 0, Line: 1, Column: 1},
End: hcl.Pos{Byte: 7, Line: 2, Column: 1},
},
},
{
Type: TokenStringLit,
Bytes: []byte(" hello world\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 7, Line: 2, Column: 1},
End: hcl.Pos{Byte: 21, Line: 3, Column: 1},
},
},
{
Type: TokenCHeredoc,
Bytes: []byte(" EOT"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 21, Line: 3, Column: 1},
End: hcl.Pos{Byte: 25, Line: 3, Column: 5},
},
},
{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 25, Line: 3, Column: 5},
End: hcl.Pos{Byte: 26, Line: 4, Column: 1},
},
},
{
Type: TokenEOF,
Bytes: []byte{},
Range: hcl.Range{
Start: hcl.Pos{Byte: 26, Line: 4, Column: 1},
End: hcl.Pos{Byte: 26, Line: 4, Column: 1},
},
},
},
},
{
`<<EOF
${<<-EOF
Expand Down Expand Up @@ -1606,6 +1750,172 @@ EOF
},
},
},
{
`<<EOF
hello
EOF
`,
// `EOF ` is not a valid identifier
// so `<<EOF ` is not a valid TokenOHeredoc
[]Token{
{
Type: TokenLessThan,
Bytes: []byte("<"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 0, Line: 1, Column: 1},
End: hcl.Pos{Byte: 1, Line: 1, Column: 2},
},
},
{
Type: TokenLessThan,
Bytes: []byte("<"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 1, Line: 1, Column: 2},
End: hcl.Pos{Byte: 2, Line: 1, Column: 3},
},
},
{
Type: TokenIdent,
Bytes: []byte("EOF"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 2, Line: 1, Column: 3},
End: hcl.Pos{Byte: 5, Line: 1, Column: 6},
},
},
{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 6, Line: 1, Column: 7},
End: hcl.Pos{Byte: 7, Line: 2, Column: 1},
},
},
{
Type: TokenIdent,
Bytes: []byte("hello"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 7, Line: 2, Column: 1},
End: hcl.Pos{Byte: 12, Line: 2, Column: 6},
},
},
{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 12, Line: 2, Column: 6},
End: hcl.Pos{Byte: 13, Line: 3, Column: 1},
},
},
{
Type: TokenIdent,
Bytes: []byte("EOF"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 13, Line: 3, Column: 1},
End: hcl.Pos{Byte: 16, Line: 3, Column: 4},
},
},

{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 16, Line: 3, Column: 4},
End: hcl.Pos{Byte: 17, Line: 4, Column: 1},
},
},
{
Type: TokenEOF,
Bytes: []byte{},
Range: hcl.Range{
Start: hcl.Pos{Byte: 17, Line: 4, Column: 1},
End: hcl.Pos{Byte: 17, Line: 4, Column: 1},
},
},
},
},
{
`<<EOF
hello
EOF
`,
// `EOF ` is not a valid identifier
// so `<<EOF ` is not a valid TokenOHeredoc
[]Token{
{
Type: TokenLessThan,
Bytes: []byte("<"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 0, Line: 1, Column: 1},
End: hcl.Pos{Byte: 1, Line: 1, Column: 2},
},
},
{
Type: TokenLessThan,
Bytes: []byte("<"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 1, Line: 1, Column: 2},
End: hcl.Pos{Byte: 2, Line: 1, Column: 3},
},
},
{
Type: TokenIdent,
Bytes: []byte("EOF"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 2, Line: 1, Column: 3},
End: hcl.Pos{Byte: 5, Line: 1, Column: 6},
},
},
{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 6, Line: 1, Column: 7},
End: hcl.Pos{Byte: 7, Line: 2, Column: 1},
},
},
{
Type: TokenIdent,
Bytes: []byte("hello"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 7, Line: 2, Column: 1},
End: hcl.Pos{Byte: 12, Line: 2, Column: 6},
},
},
{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 12, Line: 2, Column: 6},
End: hcl.Pos{Byte: 13, Line: 3, Column: 1},
},
},
{
Type: TokenIdent,
Bytes: []byte("EOF"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 13, Line: 3, Column: 1},
End: hcl.Pos{Byte: 16, Line: 3, Column: 4},
},
},

{
Type: TokenNewline,
Bytes: []byte("\n"),
Range: hcl.Range{
Start: hcl.Pos{Byte: 17, Line: 3, Column: 5},
End: hcl.Pos{Byte: 18, Line: 4, Column: 1},
},
},
{
Type: TokenEOF,
Bytes: []byte{},
Range: hcl.Range{
Start: hcl.Pos{Byte: 18, Line: 4, Column: 1},
End: hcl.Pos{Byte: 18, Line: 4, Column: 1},
},
},
},
},

// Combinations
{
Expand Down

0 comments on commit 2926ca3

Please sign in to comment.