MCPcopy Create free account
hub / github.com/cel-expr/cel-go / TestMacroInterop

Function TestMacroInterop

cel/cel_test.go:976–1042  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

974}
975
976func TestMacroInterop(t *testing.T) {
977 existsOneMacro := NewReceiverMacro("exists_one", 2,
978 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
979 return ExistsOneMacroExpander(meh, iterRange, args)
980 })
981 transformMacro := NewReceiverMacro("transform", 2,
982 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
983 return MapMacroExpander(meh, iterRange, args)
984 })
985 filterMacro := NewReceiverMacro("filter", 2,
986 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
987 return FilterMacroExpander(meh, iterRange, args)
988 })
989 pairMacro := NewGlobalMacro("pair", 2,
990 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
991 return meh.NewMap(meh.NewMapEntry(args[0], args[1], false)), nil
992 })
993 getMacro := NewReceiverMacro("get", 2,
994 func(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
995 return meh.GlobalCall(
996 operators.Conditional,
997 meh.PresenceTest(meh.Copy(target), args[0].GetIdentExpr().GetName()),
998 meh.Select(meh.Copy(target), args[0].GetIdentExpr().GetName()),
999 meh.Copy(args[1]),
1000 ), nil
1001 })
1002 env := testEnv(t, Macros(existsOneMacro, transformMacro, filterMacro, pairMacro, getMacro))
1003 tests := []struct {
1004 expr string
1005 out ref.Val
1006 }{
1007 {
1008 expr: `['tr', 's', 'fri'].filter(i, i.size() > 1).transform(i, i + 'end').exists_one(i, i == 'friend')`,
1009 out: types.True,
1010 },
1011 {
1012 expr: `pair('a', 'b')`,
1013 out: types.DefaultTypeAdapter.NativeToValue(map[string]string{"a": "b"}),
1014 },
1015 {
1016 expr: `{}.get(a, 'default')`,
1017 out: types.String("default"),
1018 },
1019 {
1020 expr: `{'a': 'b'}.get(a, 'default')`,
1021 out: types.String("b"),
1022 },
1023 }
1024
1025 for _, tst := range tests {
1026 ast, iss := env.Compile(tst.expr)
1027 if iss.Err() != nil {
1028 t.Fatal(iss.Err())
1029 }
1030 prg, err := env.Program(ast, EvalOptions(OptExhaustiveEval))
1031 if err != nil {
1032 t.Fatalf("program creation error: %s\n", err)
1033 }

Callers

nothing calls this directly

Calls 15

StringTypeAlias · 0.92
ExistsOneMacroExpanderFunction · 0.85
MapMacroExpanderFunction · 0.85
FilterMacroExpanderFunction · 0.85
EvalOptionsFunction · 0.85
NoVarsFunction · 0.85
ErrMethod · 0.80
ProgramMethod · 0.80
NewReceiverMacroFunction · 0.70
NewGlobalMacroFunction · 0.70
testEnvFunction · 0.70
MacrosFunction · 0.70

Tested by

no test coverage detected