(t *testing.T)
| 828 | } |
| 829 | |
| 830 | func 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 | |
| 877 | func TestOverloadOperandTrait(t *testing.T) { |
| 878 | fn, err := NewFunction("getOrDefault", |
nothing calls this directly
no test coverage detected