Update argument type of set expr function

It changes 3rd argument type os set expr function from TypedValue to interface, since GvalParser parses argument to native types before evaluating the expression.
This commit is contained in:
Vivek Patel
2022-02-03 19:30:30 +05:30
parent 8a8cf42e93
commit f42d707bfb
5 changed files with 102 additions and 12 deletions
+7 -2
View File
@@ -63,13 +63,18 @@ func ResolveTypes(rt resolvableType, resolver func(typ string) Type) error {
return rt.ResolveTypes(resolver)
}
func set(m merger, key string, val TypedValue) (out TypedValue, err error) {
func set(m merger, key string, val interface{}) (out TypedValue, err error) {
out, err = m.Merge()
if err != nil {
return
}
err = Assign(out, key, val)
v, err := Typify(val)
if err != nil {
return
}
err = Assign(out, key, v)
if err != nil {
return
}
+26 -4
View File
@@ -6,6 +6,12 @@ import (
"testing"
)
func Example_simpleExpression() {
eval(`40 + 2`, nil)
// output:
// 42
}
func TestParser(t *testing.T) {
var (
req = require.New(t)
@@ -23,8 +29,24 @@ func TestParser(t *testing.T) {
req.True(result)
}
func Example_simpleExpresion() {
eval(`40 + 2`, nil)
// output:
// 42
func TestGvalParser(t *testing.T) {
var (
req = require.New(t)
ctx = context.Background()
p = NewGvalParser()
vv, err = NewVars(map[string]interface{}{
"vars": &Vars{},
"key": "foo",
"value": Must(NewString("foo")),
})
result interface{}
)
req.NoError(err)
pp, err := p.Parse("toJSON(set(vars, key, value))")
req.NoError(err)
result, err = pp.Eval(ctx, vv)
req.NoError(err)
req.Equal("{\"foo\":{\"@value\":\"foo\",\"@type\":\"String\"}}", result)
}
-6
View File
@@ -2,7 +2,6 @@ package expr
import (
"encoding/json"
"fmt"
"github.com/stretchr/testify/require"
"testing"
)
@@ -180,8 +179,6 @@ func TestVars_Assign(t *testing.T) {
req.NoError(Assign(vars, "foo", &String{value: "foo"}))
req.NoError(Assign(vars, "vars", &Vars{}))
req.NoError(Assign(vars, "vars.foo", &String{value: "foo"}))
fmt.Println("Vars: ", vars)
}
func TestVars_Set(t *testing.T) {
@@ -195,7 +192,6 @@ func TestVars_Set(t *testing.T) {
)
out, err := set(vars, "k1", &String{value: "v11"})
fmt.Println("Out: ", out)
req.NoError(err)
req.Equal(&String{value: "v11"}, out.(*Vars).GetValue()["k1"])
@@ -223,9 +219,7 @@ func TestVars_MergeVars(t *testing.T) {
}}
)
fmt.Println("vars: ", vars)
out := vars.MustMerge(&foo, &bar)
fmt.Println("vars: ", out)
req.Equal(expected, out)
}