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

Function TestOverloadIsNonStrict

common/decls/decls_test.go:830–875  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

828}
829
830func TestOverloadIsNonStrict(t *testing.T) {
831 fn, err := NewFunction("getOrDefault",
832 MemberOverload("get",
833 []*types.Type{types.NewMapType(
834 types.NewTypeParamType("K"), types.NewTypeParamType("V")),
835 types.NewTypeParamType("K"),
836 types.NewTypeParamType("V"),
837 },
838 types.NewTypeParamType("V"),
839 OverloadOperandTrait(traits.ContainerType|traits.IndexerType),
840 OverloadIsNonStrict(),
841 FunctionBinding(func(args ...ref.Val) ref.Val {
842 container := args[0].(traits.Container)
843 key := args[1]
844 orValue := args[2]
845 if types.Bool(types.IsUnknownOrError(key)) {
846 return orValue
847 }
848 if container.Contains(key) == types.True {
849 return args[0].(traits.Indexer).Get(key)
850 }
851 return orValue
852 }),
853 ),
854 )
855 if err != nil {
856 t.Fatalf("NewFunction() failed: %v", err)
857 }
858 bindings, err := fn.Bindings()
859 if err != nil {
860 t.Fatalf("fn.Binding() failed: %v", err)
861 }
862 m := types.DefaultTypeAdapter.NativeToValue(map[string]string{"hello": "world"})
863 out := bindings[0].Function(m, types.String("hello"), types.String("goodbye"))
864 if out.Equal(types.String("world")) != types.True {
865 t.Errorf("function got %v, wanted 'world'", out)
866 }
867 out = bindings[0].Function(m, types.String("missing"), types.String("goodbye"))
868 if out.Equal(types.String("goodbye")) != types.True {
869 t.Errorf("function got %v, wanted 'goodbye'", out)
870 }
871 out = bindings[0].Function(m, types.NewErr("no such key"), types.String("goodbye"))
872 if out.Equal(types.String("goodbye")) != types.True {
873 t.Errorf("function got %v, wanted 'goodbye'", out)
874 }
875}
876
877func TestOverloadOperandTrait(t *testing.T) {
878 fn, err := NewFunction("getOrDefault",

Callers

nothing calls this directly

Calls 15

NewMapTypeFunction · 0.92
NewTypeParamTypeFunction · 0.92
BoolTypeAlias · 0.92
IsUnknownOrErrorFunction · 0.92
StringTypeAlias · 0.92
NewErrFunction · 0.92
BindingsMethod · 0.80
NewFunctionFunction · 0.70
MemberOverloadFunction · 0.70
OverloadOperandTraitFunction · 0.70
OverloadIsNonStrictFunction · 0.70
FunctionBindingFunction · 0.70

Tested by

no test coverage detected