github.com/viant/toolbox@v0.34.5/function_util_test.go (about) 1 package toolbox_test 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/viant/toolbox" 9 ) 10 11 func TestCallFunction(t *testing.T) { 12 13 { 14 var myFunction = func(arg1 string, arg2 int) string { 15 return fmt.Sprintf("%v%v", arg2, arg1) 16 } 17 18 functionParameters, err := toolbox.BuildFunctionParameters(myFunction, []string{"arg1", "arg2"}, map[string]interface{}{ 19 "arg1": "abc", 20 "arg2": 100, 21 }) 22 23 assert.Nil(t, err) 24 result := toolbox.CallFunction(myFunction, functionParameters...) 25 26 assert.Equal(t, "100abc", result[0]) 27 } 28 { 29 30 var myFunction = func(arg1 string, arg2 ...int) string { 31 return fmt.Sprintf("%v%v", arg2, arg1) 32 } 33 34 functionParameters, err := toolbox.BuildFunctionParameters(myFunction, []string{"arg1", "arg2"}, map[string]interface{}{ 35 "arg1": "abc", 36 "arg2": []interface{}{100}, 37 }) 38 39 assert.Nil(t, err) 40 result := toolbox.CallFunction(myFunction, functionParameters...) 41 42 assert.Equal(t, "[100]abc", result[0]) 43 } 44 { 45 46 var myFunction = func(arg1 string, arg2 ...int) string { 47 return fmt.Sprintf("%v%v", arg2, arg1) 48 } 49 50 _, err := toolbox.BuildFunctionParameters(myFunction, []string{"arg1", "arg2"}, map[string]interface{}{ 51 "arg1": "abc", 52 "arg2": 100, 53 }) 54 55 assert.NotNil(t, err) 56 } 57 } 58 59 func Test_GetFunction(t *testing.T) { 60 var astruct = &AStruct{"ABC"} 61 var function, err = toolbox.GetFunction(astruct, "Message") 62 assert.Nil(t, err) 63 assert.NotNil(t, function) 64 parameters, err := toolbox.AsCompatibleFunctionParameters(function, []interface{}{"aaa"}) 65 assert.Nil(t, err) 66 result := toolbox.CallFunction(function, parameters...) 67 assert.Equal(t, 2, len(result)) 68 assert.Equal(t, "ABC.aaa", result[0]) 69 70 } 71 72 type AStruct struct { 73 A string 74 } 75 76 func (s *AStruct) Message(a string) (string, error) { 77 return fmt.Sprintf("%v.%v", s.A, a), nil 78 }