Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
9b12e02b
提交
9b12e02b
authored
5月 04, 2015
作者:
Juan Batiz-Benet
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1193 from ipfs/improve_parse_test
Improve parse_test.go
上级
45b54c78
93f253e0
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
120 行增加
和
85 行删除
+120
-85
parse_test.go
commands/cli/parse_test.go
+120
-85
没有找到文件。
commands/cli/parse_test.go
浏览文件 @
9b12e02b
...
...
@@ -3,10 +3,67 @@ package cli
import
(
"strings"
"testing"
"io"
"io/ioutil"
"os"
"github.com/ipfs/go-ipfs/commands"
)
type
kvs
map
[
string
]
interface
{}
type
words
[]
string
func
sameWords
(
a
words
,
b
words
)
bool
{
if
len
(
a
)
!=
len
(
b
)
{
return
false
}
for
i
,
w
:=
range
a
{
if
w
!=
b
[
i
]
{
return
false
}
}
return
true
}
func
sameKVs
(
a
kvs
,
b
kvs
)
bool
{
if
len
(
a
)
!=
len
(
b
)
{
return
false
}
for
k
,
v
:=
range
a
{
if
v
!=
b
[
k
]
{
return
false
}
}
return
true
}
func
TestSameWords
(
t
*
testing
.
T
)
{
a
:=
[]
string
{
"v1"
,
"v2"
}
b
:=
[]
string
{
"v1"
,
"v2"
,
"v3"
}
c
:=
[]
string
{
"v2"
,
"v3"
}
d
:=
[]
string
{
"v2"
}
e
:=
[]
string
{
"v2"
,
"v3"
}
f
:=
[]
string
{
"v2"
,
"v1"
}
test
:=
func
(
a
words
,
b
words
,
v
bool
)
{
if
sameWords
(
a
,
b
)
!=
v
{
t
.
Errorf
(
"sameWords('%v', '%v') != %v"
,
a
,
b
,
v
)
}
}
test
(
a
,
b
,
false
)
test
(
a
,
a
,
true
)
test
(
a
,
c
,
false
)
test
(
b
,
c
,
false
)
test
(
c
,
d
,
false
)
test
(
c
,
e
,
true
)
test
(
b
,
e
,
false
)
test
(
a
,
b
,
false
)
test
(
a
,
f
,
false
)
test
(
e
,
f
,
false
)
test
(
f
,
f
,
true
)
}
func
TestOptionParsing
(
t
*
testing
.
T
)
{
subCmd
:=
&
commands
.
Command
{}
cmd
:=
&
commands
.
Command
{
...
...
@@ -19,30 +76,6 @@ func TestOptionParsing(t *testing.T) {
},
}
type
kvs
map
[
string
]
interface
{}
type
words
[]
string
sameWords
:=
func
(
a
words
,
b
words
)
bool
{
for
i
,
w
:=
range
a
{
if
w
!=
b
[
i
]
{
return
false
}
}
return
true
}
sameKVs
:=
func
(
a
kvs
,
b
kvs
)
bool
{
if
len
(
a
)
!=
len
(
b
)
{
return
false
}
for
k
,
v
:=
range
a
{
if
v
!=
b
[
k
]
{
return
false
}
}
return
true
}
testHelper
:=
func
(
args
string
,
expectedOpts
kvs
,
expectedWords
words
,
expectErr
bool
)
{
_
,
opts
,
input
,
_
,
err
:=
parseOpts
(
strings
.
Split
(
args
,
" "
),
cmd
)
if
expectErr
{
...
...
@@ -117,76 +150,78 @@ func TestArgumentParsing(t *testing.T) {
commands
.
StringArg
(
"b"
,
true
,
false
,
"another arg"
),
},
},
"stdinenabled"
:
&
commands
.
Command
{
Arguments
:
[]
commands
.
Argument
{
commands
.
StringArg
(
"a"
,
true
,
true
,
"some arg"
)
.
EnableStdin
(),
},
},
},
}
_
,
_
,
_
,
err
:=
Parse
([]
string
{
"noarg"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"noarg"
,
"value!"
},
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Error
(
"Should have failed (provided an arg, but command didn't define any)"
)
test
:=
func
(
cmd
words
,
f
*
os
.
File
,
res
words
)
{
if
f
!=
nil
{
if
_
,
err
:=
f
.
Seek
(
0
,
os
.
SEEK_SET
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
}
req
,
_
,
_
,
err
:=
Parse
(
cmd
,
f
,
rootCmd
)
if
err
!=
nil
{
t
.
Errorf
(
"Command '%v' should have passed parsing"
,
cmd
)
}
if
!
sameWords
(
req
.
Arguments
(),
res
)
{
t
.
Errorf
(
"Arguments parsed from '%v' are not '%v'"
,
cmd
,
res
)
}
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"onearg"
,
"value!"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"onearg"
},
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Error
(
"Should have failed (didn't provide any args, arg is required)"
)
testFail
:=
func
(
cmd
words
,
msg
string
)
{
_
,
_
,
_
,
err
:=
Parse
(
cmd
,
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Errorf
(
"Should have failed: %v"
,
msg
)
}
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"twoargs"
,
"value1"
,
"value2"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"twoargs"
,
"value!"
},
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Error
(
"Should have failed (only provided 1 arg, needs 2)"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"twoargs"
},
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Error
(
"Should have failed (didn't provide any args, 2 required)"
)
}
test
([]
string
{
"noarg"
},
nil
,
[]
string
{})
testFail
([]
string
{
"noarg"
,
"value!"
},
"provided an arg, but command didn't define any"
)
_
,
_
,
_
,
err
=
Parse
([]
string
{
"variadic"
,
"value!"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"variadic"
,
"value1"
,
"value2"
,
"value3"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"variadic"
},
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Error
(
"Should have failed (didn't provide any args, 1 required)"
)
}
test
([]
string
{
"onearg"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
testFail
([]
string
{
"onearg"
},
"didn't provide any args, arg is required"
)
_
,
_
,
_
,
err
=
Parse
([]
string
{
"optional"
,
"value!"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"optional"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
test
([]
string
{
"twoargs"
,
"value1"
,
"value2"
},
nil
,
[]
string
{
"value1"
,
"value2"
})
testFail
([]
string
{
"twoargs"
,
"value!"
},
"only provided 1 arg, needs 2"
)
testFail
([]
string
{
"twoargs"
},
"didn't provide any args, 2 required"
)
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
,
"value!"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
},
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Error
(
"Should have failed (didn't provide any args, 1 required)"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
,
"value3"
},
nil
,
rootCmd
)
if
err
==
nil
{
t
.
Error
(
"Should have failed (provided too many args, only takes 1)"
)
test
([]
string
{
"variadic"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
test
([]
string
{
"variadic"
,
"value1"
,
"value2"
,
"value3"
},
nil
,
[]
string
{
"value1"
,
"value2"
,
"value3"
})
testFail
([]
string
{
"variadic"
},
"didn't provide any args, 1 required"
)
test
([]
string
{
"optional"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
test
([]
string
{
"optional"
},
nil
,
[]
string
{})
test
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
},
nil
,
[]
string
{
"value1"
,
"value2"
})
test
([]
string
{
"reversedoptional"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
testFail
([]
string
{
"reversedoptional"
},
"didn't provide any args, 1 required"
)
testFail
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
,
"value3"
},
"provided too many args, only takes 1"
)
// Use a temp file to simulate stdin
fileToSimulateStdin
:=
func
(
t
*
testing
.
T
,
content
string
)
(
*
os
.
File
)
{
fstdin
,
err
:=
ioutil
.
TempFile
(
""
,
""
)
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
defer
os
.
Remove
(
fstdin
.
Name
())
if
_
,
err
:=
io
.
WriteString
(
fstdin
,
content
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
return
fstdin
}
test
([]
string
{
"stdinenabled"
,
"value1"
,
"value2"
},
nil
,
[]
string
{
"value1"
,
"value2"
})
fstdin
:=
fileToSimulateStdin
(
t
,
"stdin1"
)
test
([]
string
{
"stdinenabled"
},
fstdin
,
[]
string
{
"stdin1"
})
test
([]
string
{
"stdinenabled"
,
"value1"
},
fstdin
,
[]
string
{
"stdin1"
,
"value1"
})
test
([]
string
{
"stdinenabled"
,
"value1"
,
"value2"
},
fstdin
,
[]
string
{
"stdin1"
,
"value1"
,
"value2"
})
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论