(t *testing.T)
| 930 | } |
| 931 | |
| 932 | func TestNativeStructEmbedded(t *testing.T) { |
| 933 | var nativeTests = []struct { |
| 934 | expr string |
| 935 | in any |
| 936 | out any |
| 937 | }{ |
| 938 | { |
| 939 | expr: `test.embedded.custom_name == "name"`, |
| 940 | in: map[string]any{ |
| 941 | "test": &TestEmbeddedTypes{ |
| 942 | TestNestedType: TestNestedType{NestedCustomName: "name"}, |
| 943 | Skipped: "should-be-hidden", |
| 944 | }, |
| 945 | }, |
| 946 | out: true, |
| 947 | }, |
| 948 | { |
| 949 | expr: `dyn(test.embedded)["-"] == "error"`, |
| 950 | in: map[string]any{ |
| 951 | "test": &TestEmbeddedTypes{ |
| 952 | TestNestedType: TestNestedType{NestedCustomName: "name"}, |
| 953 | Skipped: "should-be-hidden", |
| 954 | }, |
| 955 | }, |
| 956 | out: errors.New("no such field: -"), |
| 957 | }, |
| 958 | { |
| 959 | expr: `test.embedded == ext.TestNestedType{custom_name: "name"}`, |
| 960 | in: map[string]any{ |
| 961 | "test": &TestEmbeddedTypes{ |
| 962 | TestNestedType: TestNestedType{NestedCustomName: "name"}, |
| 963 | Skipped: "should-be-hidden", |
| 964 | }, |
| 965 | }, |
| 966 | out: true, |
| 967 | }, |
| 968 | } |
| 969 | |
| 970 | envOpts := []cel.EnvOption{ |
| 971 | NativeTypes( |
| 972 | reflect.TypeFor[*TestEmbeddedTypes](), |
| 973 | reflect.TypeFor[*TestNestedType](), |
| 974 | ParseStructTag("json"), |
| 975 | ), |
| 976 | cel.Variable("test", cel.ObjectType("ext.TestEmbeddedTypes")), |
| 977 | } |
| 978 | |
| 979 | env, err := cel.NewEnv(envOpts...) |
| 980 | if err != nil { |
| 981 | t.Fatalf("cel.NewEnv(NativeTypes()) failed: %v", err) |
| 982 | } |
| 983 | |
| 984 | for i, tst := range nativeTests { |
| 985 | tc := tst |
| 986 | t.Run(fmt.Sprintf("[%d]", i), func(t *testing.T) { |
| 987 | var asts []*cel.Ast |
| 988 | pAst, iss := env.Parse(tc.expr) |
| 989 | if iss.Err() != nil { |
nothing calls this directly
no test coverage detected