github.com/status-im/status-go@v1.1.0/abi-spec/types_test.go (about) 1 package abispec 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestToGoTypeValue(t *testing.T) { 11 var raw json.RawMessage 12 err := json.Unmarshal([]byte(`"dave"`), &raw) 13 require.NoError(t, err) 14 val, err := toGoTypeValue("bytes", raw) 15 require.NoError(t, err) 16 require.Equal(t, []byte("dave"), val.Elem().Bytes()) 17 18 err = json.Unmarshal([]byte(`true`), &raw) 19 require.NoError(t, err) 20 val, err = toGoTypeValue("bool", raw) 21 require.NoError(t, err) 22 require.True(t, val.Elem().Bool()) 23 } 24 25 func TestToGoType(t *testing.T) { 26 var raws []json.RawMessage 27 err := json.Unmarshal([]byte("[8]"), &raws) 28 require.NoError(t, err) 29 value, err := toGoTypeValue("uint8", raws[0]) 30 require.NoError(t, err) 31 require.Equal(t, uint8(8), *value.Interface().(*uint8)) 32 33 goType, err := toGoType("uint256[][3][]") 34 require.NoError(t, err) 35 require.Equal(t, "[][3][]*big.Int", goType.String()) 36 37 goType, err = toGoType("uint256[][][3]") 38 require.NoError(t, err) 39 require.Equal(t, "[3][][]*big.Int", goType.String()) 40 41 goType, err = toGoType("uint256[3][][]") 42 require.NoError(t, err) 43 require.Equal(t, "[][][3]*big.Int", goType.String()) 44 45 goType, err = toGoType("bytes3[2]") 46 require.NoError(t, err) 47 require.Equal(t, "[2][3]uint8", goType.String()) 48 49 } 50 51 func TestArrayTypePattern(t *testing.T) { 52 require.True(t, arrayTypePattern.MatchString(`uint8[]`)) 53 require.False(t, arrayTypePattern.MatchString(`uint8`)) 54 55 s := "uint8[][2][1][]" 56 matches := arrayTypePattern.FindAllStringSubmatch(s, -1) 57 require.Equal(t, 3, len(matches[0])) 58 require.Equal(t, "", matches[0][2]) 59 require.Equal(t, "2", matches[1][2]) 60 61 index := arrayTypePattern.FindStringIndex(s)[0] 62 require.Equal(t, 5, index) 63 require.Equal(t, "uint8", s[0:index]) 64 }