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

Function TestMacroModern

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

Source from the content-addressed store, hash-verified

938}
939
940func TestMacroModern(t *testing.T) {
941 existsOneMacro := ReceiverMacro("exists_one", 2, parser.MakeExistsOne)
942 transformMacro := ReceiverMacro("transform", 2, parser.MakeMap)
943 filterMacro := ReceiverMacro("filter", 2, parser.MakeFilter)
944 pairMacro := GlobalMacro("pair", 2,
945 func(mef MacroExprFactory, iterRange celast.Expr, args []celast.Expr) (celast.Expr, *Error) {
946 return mef.NewMap(mef.NewMapEntry(args[0], args[1], false)), nil
947 })
948 getMacro := ReceiverMacro("get", 2,
949 func(mef MacroExprFactory, target celast.Expr, args []celast.Expr) (celast.Expr, *Error) {
950 return mef.NewCall(
951 operators.Conditional,
952 mef.NewPresenceTest(mef.Copy(target), args[0].AsIdent()),
953 mef.NewSelect(mef.Copy(target), args[0].AsIdent()),
954 mef.Copy(args[1]),
955 ), nil
956 })
957 env := testEnv(t, Macros(existsOneMacro, transformMacro, filterMacro, pairMacro, getMacro))
958 tests := []struct {
959 expr string
960 out ref.Val
961 }{
962 {
963 expr: `['tr', 's', 'fri'].filter(i, i.size() > 1).transform(i, i + 'end').exists_one(i, i == 'friend')`,
964 out: types.True,
965 },
966 {
967 expr: `pair('a', 'b')`,
968 out: types.DefaultTypeAdapter.NativeToValue(map[string]string{"a": "b"}),
969 },
970 {
971 expr: `{}.get(a, 'default')`,
972 out: types.String("default"),
973 },
974 {
975 expr: `{'a': 'b'}.get(a, 'default')`,
976 out: types.String("b"),
977 },
978 }
979
980 for _, tst := range tests {
981 ast, iss := env.Compile(tst.expr)
982 if iss.Err() != nil {
983 t.Fatal(iss.Err())
984 }
985 prg, err := env.Program(ast, EvalOptions(OptExhaustiveEval))
986 if err != nil {
987 t.Fatalf("program creation error: %s\n", err)
988 }
989 out, _, err := prg.Eval(NoVars())
990 if err != nil {
991 t.Fatal(err)
992 }
993 if out.Equal(tst.out) != types.True {
994 t.Errorf("got %v, wanted %v", out, tst.out)
995 }
996 }
997}

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