github.com/0chain/gosdk@v1.17.11/wasmsdk/jsbridge/input_test.go (about)

     1  //go:build js && wasm
     2  // +build js,wasm
     3  
     4  package jsbridge
     5  
     6  import (
     7  	"crypto/rand"
     8  	"encoding/hex"
     9  	"reflect"
    10  	"strings"
    11  	"syscall/js"
    12  	"testing"
    13  
    14  	"github.com/stretchr/testify/require"
    15  )
    16  
    17  func TestInputBinder(t *testing.T) {
    18  
    19  	buf := make([]byte, 100)
    20  	rand.Read(buf) //nolint
    21  
    22  	tests := []struct {
    23  		Name string
    24  		In   []js.Value
    25  		Out  interface{}
    26  		Func func() reflect.Value
    27  	}{
    28  		{Name: "string", Func: func() reflect.Value {
    29  			fn := func(i string) string {
    30  				return i
    31  			}
    32  
    33  			return reflect.ValueOf(fn)
    34  		}, In: []js.Value{js.ValueOf("1")}, Out: "1"},
    35  
    36  		{Name: "int", Func: func() reflect.Value {
    37  			fn := func(i int) int {
    38  				return i
    39  			}
    40  
    41  			return reflect.ValueOf(fn)
    42  		}, In: []js.Value{js.ValueOf(1)}, Out: 1},
    43  		{Name: "int32", Func: func() reflect.Value {
    44  			fn := func(i int32) int32 {
    45  				return i
    46  			}
    47  
    48  			return reflect.ValueOf(fn)
    49  		}, In: []js.Value{js.ValueOf(1)}, Out: int32(1)},
    50  		{Name: "int64", Func: func() reflect.Value {
    51  			fn := func(i int64) int64 {
    52  				return i
    53  			}
    54  
    55  			return reflect.ValueOf(fn)
    56  		}, In: []js.Value{js.ValueOf(1)}, Out: int64(1)},
    57  
    58  		{Name: "float32", Func: func() reflect.Value {
    59  			fn := func(i float32) float32 {
    60  				return i
    61  			}
    62  
    63  			return reflect.ValueOf(fn)
    64  		}, In: []js.Value{js.ValueOf(1)}, Out: float32(1)},
    65  		{Name: "float64", Func: func() reflect.Value {
    66  			fn := func(i float64) float64 {
    67  				return i
    68  			}
    69  
    70  			return reflect.ValueOf(fn)
    71  		}, In: []js.Value{js.ValueOf(1)}, Out: float64(1)},
    72  		{Name: "[]string", Func: func() reflect.Value {
    73  			fn := func(list []string) string {
    74  				return strings.Join(list, ",")
    75  			}
    76  
    77  			return reflect.ValueOf(fn)
    78  		}, In: []js.Value{NewArray("a", "b")}, Out: "a,b"},
    79  		{Name: "[]byte", Func: func() reflect.Value {
    80  			fn := func(buf []byte) string {
    81  				return hex.EncodeToString(buf)
    82  			}
    83  
    84  			return reflect.ValueOf(fn)
    85  		}, In: []js.Value{NewBytes(buf)}, Out: hex.EncodeToString(buf)},
    86  	}
    87  
    88  	for _, it := range tests {
    89  		t.Run(it.Name, func(test *testing.T) {
    90  			fn := it.Func()
    91  			b, err := NewInputBuilder(fn.Type()).Build()
    92  
    93  			require.NoError(test, err)
    94  
    95  			in, err := b(it.In)
    96  			require.NoError(test, err)
    97  
    98  			out := fn.Call(in)
    99  
   100  			require.Equal(test, it.Out, out[0].Interface())
   101  
   102  		})
   103  	}
   104  
   105  }