// Copyright 2019 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . package bind import ( "reflect" "testing" "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/common" ) func TestMakeTopics(t *testing.T) { type args struct { query [][]interface{} } tests := []struct { name string args args want [][]common.Hash wantErr bool }{ { "support fixed byte types, right padded to 32 bytes", args{[][]interface{}{{[5]byte{1, 2, 3, 4, 5}}}}, [][]common.Hash{{common.Hash{1, 2, 3, 4, 5}}}, false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { got, err := makeTopics(tt.args.query...) if (err != nil) != tt.wantErr { t.Errorf("makeTopics() error = %v, wantErr %v", err, tt.wantErr) return } if !reflect.DeepEqual(got, tt.want) { t.Errorf("makeTopics() = %v, want %v", got, tt.want) } }) } } func TestParseTopics(t *testing.T) { type bytesStruct struct { StaticBytes [5]byte } bytesType, _ := abi.NewType("bytes5", nil) type args struct { createObj func() interface{} resultObj func() interface{} fields abi.Arguments topics []common.Hash } tests := []struct { name string args args wantErr bool }{ { name: "support fixed byte types, right padded to 32 bytes", args: args{ createObj: func() interface{} { return &bytesStruct{} }, resultObj: func() interface{} { return &bytesStruct{StaticBytes: [5]byte{1, 2, 3, 4, 5}} }, fields: abi.Arguments{abi.Argument{ Name: "staticBytes", Type: bytesType, Indexed: true, }}, topics: []common.Hash{ {1, 2, 3, 4, 5}, }, }, wantErr: false, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { createObj := tt.args.createObj() if err := parseTopics(createObj, tt.args.fields, tt.args.topics); (err != nil) != tt.wantErr { t.Errorf("parseTopics() error = %v, wantErr %v", err, tt.wantErr) } resultObj := tt.args.resultObj() if !reflect.DeepEqual(createObj, resultObj) { t.Errorf("parseTopics() = %v, want %v", createObj, resultObj) } }) } }