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  }