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

Function TestMacroModern

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

Source from the content-addressed store, hash-verified

1042}
1043
1044func TestMacroModern(t *testing.T) {
1045 existsOneMacro := ReceiverMacro("exists_one", 2, parser.MakeExistsOne)
1046 transformMacro := ReceiverMacro("transform", 2, parser.MakeMap)
1047 filterMacro := ReceiverMacro("filter", 2, parser.MakeFilter)
1048 pairMacro := GlobalMacro("pair", 2,
1049 func(mef MacroExprFactory, iterRange celast.Expr, args []celast.Expr) (celast.Expr, *Error) {
1050 return mef.NewMap(mef.NewMapEntry(args[0], args[1], false)), nil
1051 })
1052 getMacro := ReceiverMacro("get", 2,
1053 func(mef MacroExprFactory, target celast.Expr, args []celast.Expr) (celast.Expr, *Error) {
1054 return mef.NewCall(
1055 operators.Conditional,
1056 mef.NewPresenceTest(mef.Copy(target), args[0].AsIdent()),
1057 mef.NewSelect(mef.Copy(target), args[0].AsIdent()),
1058 mef.Copy(args[1]),
1059 ), nil
1060 })
1061 env := testEnv(t, Macros(existsOneMacro, transformMacro, filterMacro, pairMacro, getMacro))
1062 tests := []struct {
1063 expr string
1064 out ref.Val
1065 }{
1066 {
1067 expr: `['tr', 's', 'fri'].filter(i, i.size() > 1).transform(i, i + 'end').exists_one(i, i == 'friend')`,
1068 out: types.True,
1069 },
1070 {
1071 expr: `pair('a', 'b')`,
1072 out: types.DefaultTypeAdapter.NativeToValue(map[string]string{"a": "b"}),
1073 },
1074 {
1075 expr: `{}.get(a, 'default')`,
1076 out: types.String("default"),
1077 },
1078 {
1079 expr: `{'a': 'b'}.get(a, 'default')`,
1080 out: types.String("b"),
1081 },
1082 }
1083
1084 for _, tst := range tests {
1085 ast, iss := env.Compile(tst.expr)
1086 if iss.Err() != nil {
1087 t.Fatal(iss.Err())
1088 }
1089 prg, err := env.Program(ast, EvalOptions(OptExhaustiveEval))
1090 if err != nil {
1091 t.Fatalf("program creation error: %s\n", err)
1092 }
1093 out, _, err := prg.Eval(NoVars())
1094 if err != nil {
1095 t.Fatal(err)
1096 }
1097 if out.Equal(tst.out) != types.True {
1098 t.Errorf("got %v, wanted %v", out, tst.out)
1099 }
1100 }
1101}

Callers

nothing calls this directly

Calls 15

StringTypeAlias · 0.92
ReceiverMacroFunction · 0.85
GlobalMacroFunction · 0.85
EvalOptionsFunction · 0.85
NoVarsFunction · 0.85
ErrMethod · 0.80
ProgramMethod · 0.80
testEnvFunction · 0.70
MacrosFunction · 0.70
NewMapMethod · 0.65
NewMapEntryMethod · 0.65
NewCallMethod · 0.65

Tested by

no test coverage detected