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  }