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

Function TestMacroInterop

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

Source from the content-addressed store, hash-verified

870}
871
872func TestMacroInterop(t *testing.T) {
873 existsOneMacro := NewReceiverMacro("exists_one", 2,
874 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
875 return ExistsOneMacroExpander(meh, iterRange, args)
876 })
877 transformMacro := NewReceiverMacro("transform", 2,
878 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
879 return MapMacroExpander(meh, iterRange, args)
880 })
881 filterMacro := NewReceiverMacro("filter", 2,
882 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
883 return FilterMacroExpander(meh, iterRange, args)
884 })
885 pairMacro := NewGlobalMacro("pair", 2,
886 func(meh MacroExprHelper, iterRange *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
887 return meh.NewMap(meh.NewMapEntry(args[0], args[1], false)), nil
888 })
889 getMacro := NewReceiverMacro("get", 2,
890 func(meh MacroExprHelper, target *exprpb.Expr, args []*exprpb.Expr) (*exprpb.Expr, *Error) {
891 return meh.GlobalCall(
892 operators.Conditional,
893 meh.PresenceTest(meh.Copy(target), args[0].GetIdentExpr().GetName()),
894 meh.Select(meh.Copy(target), args[0].GetIdentExpr().GetName()),
895 meh.Copy(args[1]),
896 ), nil
897 })
898 env := testEnv(t, Macros(existsOneMacro, transformMacro, filterMacro, pairMacro, getMacro))
899 tests := []struct {
900 expr string
901 out ref.Val
902 }{
903 {
904 expr: `['tr', 's', 'fri'].filter(i, i.size() > 1).transform(i, i + 'end').exists_one(i, i == 'friend')`,
905 out: types.True,
906 },
907 {
908 expr: `pair('a', 'b')`,
909 out: types.DefaultTypeAdapter.NativeToValue(map[string]string{"a": "b"}),
910 },
911 {
912 expr: `{}.get(a, 'default')`,
913 out: types.String("default"),
914 },
915 {
916 expr: `{'a': 'b'}.get(a, 'default')`,
917 out: types.String("b"),
918 },
919 }
920
921 for _, tst := range tests {
922 ast, iss := env.Compile(tst.expr)
923 if iss.Err() != nil {
924 t.Fatal(iss.Err())
925 }
926 prg, err := env.Program(ast, EvalOptions(OptExhaustiveEval))
927 if err != nil {
928 t.Fatalf("program creation error: %s\n", err)
929 }

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