You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ginger/vm/vm_test.go

58 lines
1.1 KiB

package vm
import (
"bytes"
"strconv"
"testing"
"code.betamike.com/mediocregopher/ginger/gg"
"github.com/stretchr/testify/assert"
)
func TestVM(t *testing.T) {
tests := []struct {
src string
in Value
exp Value
expErr string
}{
{
src: `{
incr = { !out = !add < (1, !in); };
!out = incr < incr < !in;
}`,
in: Value{Value: gg.Number(5)},
exp: Value{Value: gg.Number(7)},
},
{
src: `{
!foo = in;
!out = !foo;
}`,
in: Value{Value: gg.Number(1)},
expErr: "name !foo cannot start with a '!'",
},
{
src: `{foo = bar; !out = foo;}`,
in: Value{},
exp: Value{Value: gg.Name("bar")},
},
}
for i, test := range tests {
t.Run(strconv.Itoa(i), func(t *testing.T) {
t.Log(test.src)
val, err := EvaluateSource(
bytes.NewBufferString(test.src), test.in, GlobalScope,
)
if test.expErr != "" {
assert.Error(t, err)
assert.Equal(t, test.expErr, err.Error())
} else {
assert.NoError(t, err)
assert.True(t, val.Equal(test.exp), "%v != %v", test.exp, val)
}
})
}
}