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 }