| 
									
										
										
										
											2019-01-28 12:47:24 -06:00
										 |  |  | // Copyright 2018 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 <http://www.gnu.org/licenses/>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | package bind | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"reflect" | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/accounts/abi" | 
					
						
							|  |  |  | 	"github.com/ethereum/go-ethereum/common" | 
					
						
							|  |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-14 11:47:22 +01:00
										 |  |  | func TestMakeTopics(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2019-01-28 12:47:24 -06:00
										 |  |  | 	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) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-14 11:47:22 +01:00
										 |  |  | func TestParseTopics(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2019-01-28 12:47:24 -06:00
										 |  |  | 	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) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } |