route/vendor/github.com/hashicorp/hil/ast/literal_test.go

80 lines
1.3 KiB
Go

package ast
import (
"fmt"
"reflect"
"testing"
)
func TestLiteralNodeType(t *testing.T) {
c := &LiteralNode{Typex: TypeString}
actual, err := c.Type(nil)
if err != nil {
t.Fatalf("err: %s", err)
}
if actual != TypeString {
t.Fatalf("bad: %s", actual)
}
}
func TestNewLiteralNode(t *testing.T) {
tests := []struct {
Value interface{}
Expected *LiteralNode
}{
{
1,
&LiteralNode{
Value: 1,
Typex: TypeInt,
},
},
{
1.0,
&LiteralNode{
Value: 1.0,
Typex: TypeFloat,
},
},
{
true,
&LiteralNode{
Value: true,
Typex: TypeBool,
},
},
{
"hi",
&LiteralNode{
Value: "hi",
Typex: TypeString,
},
},
}
for _, test := range tests {
t.Run(fmt.Sprintf("%T", test.Value), func(t *testing.T) {
inPos := Pos{
Column: 2,
Line: 3,
Filename: "foo",
}
node, err := NewLiteralNode(test.Value, inPos)
if err != nil {
t.Fatalf("error: %s", err)
}
if got, want := node.Typex, test.Expected.Typex; want != got {
t.Errorf("got type %s; want %s", got, want)
}
if got, want := node.Value, test.Expected.Value; want != got {
t.Errorf("got value %#v; want %#v", got, want)
}
if got, want := node.Posx, inPos; !reflect.DeepEqual(got, want) {
t.Errorf("got position %#v; want %#v", got, want)
}
})
}
}