Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
115b1c38
Unverified
Commit
115b1c38
authored
Jan 15, 2019
by
Guillaume Ballet
Committed by
GitHub
Jan 15, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
accounts/abi: Add tests for reflection ahead of refactor (#18434)
parent
4aeeecfd
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
191 additions
and
0 deletions
+191
-0
reflect_test.go
accounts/abi/reflect_test.go
+191
-0
No files found.
accounts/abi/reflect_test.go
0 → 100644
View file @
115b1c38
// 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 <http://www.gnu.org/licenses/>.
package
abi
import
(
"reflect"
"testing"
)
type
reflectTest
struct
{
name
string
args
[]
string
struc
interface
{}
want
map
[
string
]
string
err
string
}
var
reflectTests
=
[]
reflectTest
{
{
name
:
"OneToOneCorrespondance"
,
args
:
[]
string
{
"fieldA"
},
struc
:
struct
{
FieldA
int
`abi:"fieldA"`
}{},
want
:
map
[
string
]
string
{
"fieldA"
:
"FieldA"
,
},
},
{
name
:
"MissingFieldsInStruct"
,
args
:
[]
string
{
"fieldA"
,
"fieldB"
},
struc
:
struct
{
FieldA
int
`abi:"fieldA"`
}{},
want
:
map
[
string
]
string
{
"fieldA"
:
"FieldA"
,
},
},
{
name
:
"MoreFieldsInStructThanArgs"
,
args
:
[]
string
{
"fieldA"
},
struc
:
struct
{
FieldA
int
`abi:"fieldA"`
FieldB
int
}{},
want
:
map
[
string
]
string
{
"fieldA"
:
"FieldA"
,
},
},
{
name
:
"MissingFieldInArgs"
,
args
:
[]
string
{
"fieldA"
},
struc
:
struct
{
FieldA
int
`abi:"fieldA"`
FieldB
int
`abi:"fieldB"`
}{},
err
:
"struct: abi tag 'fieldB' defined but not found in abi"
,
},
{
name
:
"NoAbiDescriptor"
,
args
:
[]
string
{
"fieldA"
},
struc
:
struct
{
FieldA
int
}{},
want
:
map
[
string
]
string
{
"fieldA"
:
"FieldA"
,
},
},
{
name
:
"NoArgs"
,
args
:
[]
string
{},
struc
:
struct
{
FieldA
int
`abi:"fieldA"`
}{},
err
:
"struct: abi tag 'fieldA' defined but not found in abi"
,
},
{
name
:
"DifferentName"
,
args
:
[]
string
{
"fieldB"
},
struc
:
struct
{
FieldA
int
`abi:"fieldB"`
}{},
want
:
map
[
string
]
string
{
"fieldB"
:
"FieldA"
,
},
},
{
name
:
"DifferentName"
,
args
:
[]
string
{
"fieldB"
},
struc
:
struct
{
FieldA
int
`abi:"fieldB"`
}{},
want
:
map
[
string
]
string
{
"fieldB"
:
"FieldA"
,
},
},
{
name
:
"MultipleFields"
,
args
:
[]
string
{
"fieldA"
,
"fieldB"
},
struc
:
struct
{
FieldA
int
`abi:"fieldA"`
FieldB
int
`abi:"fieldB"`
}{},
want
:
map
[
string
]
string
{
"fieldA"
:
"FieldA"
,
"fieldB"
:
"FieldB"
,
},
},
{
name
:
"MultipleFieldsABIMissing"
,
args
:
[]
string
{
"fieldA"
,
"fieldB"
},
struc
:
struct
{
FieldA
int
`abi:"fieldA"`
FieldB
int
}{},
want
:
map
[
string
]
string
{
"fieldA"
:
"FieldA"
,
"fieldB"
:
"FieldB"
,
},
},
{
name
:
"NameConflict"
,
args
:
[]
string
{
"fieldB"
},
struc
:
struct
{
FieldA
int
`abi:"fieldB"`
FieldB
int
}{},
err
:
"abi: multiple variables maps to the same abi field 'fieldB'"
,
},
{
name
:
"Underscored"
,
args
:
[]
string
{
"_"
},
struc
:
struct
{
FieldA
int
}{},
err
:
"abi: purely underscored output cannot unpack to struct"
,
},
{
name
:
"DoubleMapping"
,
args
:
[]
string
{
"fieldB"
,
"fieldC"
,
"fieldA"
},
struc
:
struct
{
FieldA
int
`abi:"fieldC"`
FieldB
int
}{},
err
:
"abi: multiple outputs mapping to the same struct field 'FieldA'"
,
},
{
name
:
"AlreadyMapped"
,
args
:
[]
string
{
"fieldB"
,
"fieldB"
},
struc
:
struct
{
FieldB
int
`abi:"fieldB"`
}{},
err
:
"struct: abi tag in 'FieldB' already mapped"
,
},
}
func
TestReflectNameToStruct
(
t
*
testing
.
T
)
{
for
_
,
test
:=
range
reflectTests
{
t
.
Run
(
test
.
name
,
func
(
t
*
testing
.
T
)
{
m
,
err
:=
mapArgNamesToStructFields
(
test
.
args
,
reflect
.
ValueOf
(
test
.
struc
))
if
len
(
test
.
err
)
>
0
{
if
err
==
nil
||
err
.
Error
()
!=
test
.
err
{
t
.
Fatalf
(
"Invalid error: expected %v, got %v"
,
test
.
err
,
err
)
}
}
else
{
if
err
!=
nil
{
t
.
Fatalf
(
"Unexpected error: %v"
,
err
)
}
for
fname
:=
range
test
.
want
{
if
m
[
fname
]
!=
test
.
want
[
fname
]
{
t
.
Fatalf
(
"Incorrect value for field %s: expected %v, got %v"
,
fname
,
test
.
want
[
fname
],
m
[
fname
])
}
}
}
})
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment