hcl/hclsyntax/peeker_test.go

164 lines
2.5 KiB
Go

package hclsyntax
import (
"reflect"
"testing"
)
func init() {
// see the documentation of this variable for more information
tracePeekerNewlinesStack = true
}
func TestPeeker(t *testing.T) {
tokens := Tokens{
{
Type: TokenIdent,
},
{
Type: TokenComment,
},
{
Type: TokenIdent,
},
{
Type: TokenComment,
},
{
Type: TokenIdent,
},
{
Type: TokenNewline,
},
{
Type: TokenIdent,
},
{
Type: TokenNewline,
},
{
Type: TokenIdent,
},
{
Type: TokenNewline,
},
{
Type: TokenEOF,
},
}
{
peeker := newPeeker(tokens, true)
wantTypes := []TokenType{
TokenIdent,
TokenComment,
TokenIdent,
TokenComment,
TokenIdent,
TokenNewline,
TokenIdent,
TokenNewline,
TokenIdent,
TokenNewline,
TokenEOF,
}
var gotTypes []TokenType
for {
peeked := peeker.Peek()
read := peeker.Read()
if peeked.Type != read.Type {
t.Errorf("mismatched Peek %s and Read %s", peeked, read)
}
gotTypes = append(gotTypes, read.Type)
if read.Type == TokenEOF {
break
}
}
if !reflect.DeepEqual(gotTypes, wantTypes) {
t.Errorf("wrong types\ngot: %#v\nwant: %#v", gotTypes, wantTypes)
}
}
{
peeker := newPeeker(tokens, false)
wantTypes := []TokenType{
TokenIdent,
TokenIdent,
TokenIdent,
TokenNewline,
TokenIdent,
TokenNewline,
TokenIdent,
TokenNewline,
TokenEOF,
}
var gotTypes []TokenType
for {
peeked := peeker.Peek()
read := peeker.Read()
if peeked.Type != read.Type {
t.Errorf("mismatched Peek %s and Read %s", peeked, read)
}
gotTypes = append(gotTypes, read.Type)
if read.Type == TokenEOF {
break
}
}
if !reflect.DeepEqual(gotTypes, wantTypes) {
t.Errorf("wrong types\ngot: %#v\nwant: %#v", gotTypes, wantTypes)
}
}
{
peeker := newPeeker(tokens, false)
peeker.PushIncludeNewlines(false)
wantTypes := []TokenType{
TokenIdent,
TokenIdent,
TokenIdent,
TokenIdent,
TokenIdent,
TokenNewline, // we'll pop off the PushIncludeNewlines before we get here
TokenEOF,
}
var gotTypes []TokenType
idx := 0
for {
peeked := peeker.Peek()
read := peeker.Read()
if peeked.Type != read.Type {
t.Errorf("mismatched Peek %s and Read %s", peeked, read)
}
gotTypes = append(gotTypes, read.Type)
if read.Type == TokenEOF {
break
}
if idx == 4 {
peeker.PopIncludeNewlines()
}
idx++
}
if !reflect.DeepEqual(gotTypes, wantTypes) {
t.Errorf("wrong types\ngot: %#v\nwant: %#v", gotTypes, wantTypes)
}
}
}