80 lines
1.3 KiB
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)
|
|
}
|
|
})
|
|
}
|
|
}
|