Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
115b1c38
G
go-ethereum
项目概览
whqwjb
/
go-ethereum
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
go-ethereum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
115b1c38
编写于
1月 15, 2019
作者:
G
Guillaume Ballet
提交者:
GitHub
1月 15, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
accounts/abi: Add tests for reflection ahead of refactor (#18434)
上级
4aeeecfd
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
191 addition
and
0 deletion
+191
-0
accounts/abi/reflect_test.go
accounts/abi/reflect_test.go
+191
-0
未找到文件。
accounts/abi/reflect_test.go
0 → 100644
浏览文件 @
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
])
}
}
}
})
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录