@ -61,10 +61,10 @@ func TestReader(t *testing.T) {
exp := ABI {
Methods : map [ string ] Method {
"balance" : {
"balance" , true , nil , nil ,
"balance" , "balance" , true , nil , nil ,
} ,
"send" : {
"send" , false , [ ] Argument {
"send" , "send" , false , [ ] Argument {
{ "amount" , Uint256 , false } ,
} , nil ,
} ,
@ -162,12 +162,10 @@ func TestTestSlice(t *testing.T) {
if err != nil {
t . Fatal ( err )
}
slice := make ( [ ] uint64 , 2 )
if _ , err := abi . Pack ( "uint64[2]" , slice ) ; err != nil {
t . Error ( err )
}
if _ , err := abi . Pack ( "uint64[]" , slice ) ; err != nil {
t . Error ( err )
}
@ -175,19 +173,19 @@ func TestTestSlice(t *testing.T) {
func TestMethodSignature ( t * testing . T ) {
String , _ := NewType ( "string" , nil )
m := Method { "foo" , false , [ ] Argument { { "bar" , String , false } , { "baz" , String , false } } , nil }
m := Method { "foo" , "foo" , false , [ ] Argument { { "bar" , String , false } , { "baz" , String , false } } , nil }
exp := "foo(string,string)"
if m . Sig ( ) != exp {
t . Error ( "signature mismatch" , exp , "!=" , m . Sig ( ) )
}
idexp := crypto . Keccak256 ( [ ] byte ( exp ) ) [ : 4 ]
if ! bytes . Equal ( m . Id ( ) , idexp ) {
t . Errorf ( "expected ids to match %x != %x" , m . Id ( ) , idexp )
if ! bytes . Equal ( m . ID ( ) , idexp ) {
t . Errorf ( "expected ids to match %x != %x" , m . ID ( ) , idexp )
}
uintt , _ := NewType ( "uint256" , nil )
m = Method { "foo" , false , [ ] Argument { { "bar" , uintt , false } } , nil }
m = Method { "foo" , "foo" , false , [ ] Argument { { "bar" , uintt , false } } , nil }
exp = "foo(uint256)"
if m . Sig ( ) != exp {
t . Error ( "signature mismatch" , exp , "!=" , m . Sig ( ) )
@ -206,13 +204,36 @@ func TestMethodSignature(t *testing.T) {
{ Name : "y" , Type : "int256" } ,
} } ,
} )
m = Method { "foo" , false , [ ] Argument { { "s" , s , false } , { "bar" , String , false } } , nil }
m = Method { "foo" , "foo" , false , [ ] Argument { { "s" , s , false } , { "bar" , String , false } } , nil }
exp = "foo((int256,int256[],(int256,int256)[],(int256,int256)[2]),string)"
if m . Sig ( ) != exp {
t . Error ( "signature mismatch" , exp , "!=" , m . Sig ( ) )
}
}
func TestOverloadedMethodSignature ( t * testing . T ) {
json := ` [ { "constant":true,"inputs":[ { "name":"i","type":"uint256"}, { "name":"j","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}, { "constant":true,"inputs":[ { "name":"i","type":"uint256"}],"name":"foo","outputs":[],"payable":false,"stateMutability":"pure","type":"function"}, { "anonymous":false,"inputs":[ { "indexed":false,"name":"i","type":"uint256"}],"name":"bar","type":"event"}, { "anonymous":false,"inputs":[ { "indexed":false,"name":"i","type":"uint256"}, { "indexed":false,"name":"j","type":"uint256"}],"name":"bar","type":"event"}] `
abi , err := JSON ( strings . NewReader ( json ) )
if err != nil {
t . Fatal ( err )
}
check := func ( name string , expect string , method bool ) {
if method {
if abi . Methods [ name ] . Sig ( ) != expect {
t . Fatalf ( "The signature of overloaded method mismatch, want %s, have %s" , expect , abi . Methods [ name ] . Sig ( ) )
}
} else {
if abi . Events [ name ] . Sig ( ) != expect {
t . Fatalf ( "The signature of overloaded event mismatch, want %s, have %s" , expect , abi . Events [ name ] . Sig ( ) )
}
}
}
check ( "foo" , "foo(uint256,uint256)" , true )
check ( "foo0" , "foo(uint256)" , true )
check ( "bar" , "bar(uint256)" , false )
check ( "bar0" , "bar(uint256,uint256)" , false )
}
func TestMultiPack ( t * testing . T ) {
abi , err := JSON ( strings . NewReader ( jsondata2 ) )
if err != nil {
@ -900,13 +921,13 @@ func TestABI_MethodById(t *testing.T) {
}
for name , m := range abi . Methods {
a := fmt . Sprintf ( "%v" , m )
m2 , err := abi . MethodById ( m . Id ( ) )
m2 , err := abi . MethodById ( m . ID ( ) )
if err != nil {
t . Fatalf ( "Failed to look up ABI method: %v" , err )
}
b := fmt . Sprintf ( "%v" , m2 )
if a != b {
t . Errorf ( "Method %v (id %v) not 'findable' by id in ABI" , name , common . ToHex ( m . Id ( ) ) )
t . Errorf ( "Method %v (id %v) not 'findable' by id in ABI" , name , common . ToHex ( m . ID ( ) ) )
}
}
// Also test empty
@ -974,8 +995,8 @@ func TestABI_EventById(t *testing.T) {
t . Errorf ( "We should find a event for topic %s, test #%d" , topicID . Hex ( ) , testnum )
}
if event . Id ( ) != topicID {
t . Errorf ( "Event id %s does not match topic %s, test #%d" , event . Id ( ) . Hex ( ) , topicID . Hex ( ) , testnum )
if event . ID ( ) != topicID {
t . Errorf ( "Event id %s does not match topic %s, test #%d" , event . ID ( ) . Hex ( ) , topicID . Hex ( ) , testnum )
}
unknowntopicID := crypto . Keccak256Hash ( [ ] byte ( "unknownEvent" ) )