It changes 3rd argument type os set expr function from TypedValue to interface, since GvalParser parses argument to native types before evaluating the expression.
53 lines
927 B
Go
53 lines
927 B
Go
package expr
|
|
|
|
import (
|
|
"context"
|
|
"github.com/stretchr/testify/require"
|
|
"testing"
|
|
)
|
|
|
|
func Example_simpleExpression() {
|
|
eval(`40 + 2`, nil)
|
|
// output:
|
|
// 42
|
|
}
|
|
|
|
func TestParser(t *testing.T) {
|
|
var (
|
|
req = require.New(t)
|
|
ctx = context.Background()
|
|
p = Parser()
|
|
e, err = p.NewEvaluable("0 == 0")
|
|
|
|
result bool
|
|
)
|
|
|
|
req.NoError(err)
|
|
|
|
result, err = e.EvalBool(ctx, nil)
|
|
req.NoError(err)
|
|
req.True(result)
|
|
}
|
|
|
|
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)
|
|
}
|