Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
dms3
go-dms3-cmds
Commits
68a0e34d
Commit
68a0e34d
authored
May 04, 2015
by
Juan Batiz-Benet
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1193 from ipfs/improve_parse_test
Improve parse_test.go
parents
00148893
a2d4d4b2
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
120 additions
and
85 deletions
+120
-85
cli/parse_test.go
cli/parse_test.go
+120
-85
No files found.
cli/parse_test.go
View file @
68a0e34d
...
@@ -3,10 +3,67 @@ package cli
...
@@ -3,10 +3,67 @@ package cli
import
(
import
(
"strings"
"strings"
"testing"
"testing"
"io"
"io/ioutil"
"os"
"github.com/ipfs/go-ipfs/commands"
"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
)
{
func
TestOptionParsing
(
t
*
testing
.
T
)
{
subCmd
:=
&
commands
.
Command
{}
subCmd
:=
&
commands
.
Command
{}
cmd
:=
&
commands
.
Command
{
cmd
:=
&
commands
.
Command
{
...
@@ -19,30 +76,6 @@ func TestOptionParsing(t *testing.T) {
...
@@ -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
)
{
testHelper
:=
func
(
args
string
,
expectedOpts
kvs
,
expectedWords
words
,
expectErr
bool
)
{
_
,
opts
,
input
,
_
,
err
:=
parseOpts
(
strings
.
Split
(
args
,
" "
),
cmd
)
_
,
opts
,
input
,
_
,
err
:=
parseOpts
(
strings
.
Split
(
args
,
" "
),
cmd
)
if
expectErr
{
if
expectErr
{
...
@@ -117,76 +150,78 @@ func TestArgumentParsing(t *testing.T) {
...
@@ -117,76 +150,78 @@ func TestArgumentParsing(t *testing.T) {
commands
.
StringArg
(
"b"
,
true
,
false
,
"another arg"
),
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
)
test
:=
func
(
cmd
words
,
f
*
os
.
File
,
res
words
)
{
if
err
!=
nil
{
if
f
!=
nil
{
t
.
Error
(
"Should have passed"
)
if
_
,
err
:=
f
.
Seek
(
0
,
os
.
SEEK_SET
);
err
!=
nil
{
}
t
.
Fatal
(
err
)
_
,
_
,
_
,
err
=
Parse
([]
string
{
"noarg"
,
"value!"
},
nil
,
rootCmd
)
}
if
err
==
nil
{
}
t
.
Error
(
"Should have failed (provided an arg, but command didn't define any)"
)
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
)
testFail
:=
func
(
cmd
words
,
msg
string
)
{
if
err
!=
nil
{
_
,
_
,
_
,
err
:=
Parse
(
cmd
,
nil
,
rootCmd
)
t
.
Error
(
"Should have passed"
)
if
err
==
nil
{
}
t
.
Errorf
(
"Should have failed: %v"
,
msg
)
_
,
_
,
_
,
err
=
Parse
([]
string
{
"onearg"
},
nil
,
rootCmd
)
}
if
err
==
nil
{
t
.
Error
(
"Should have failed (didn't provide any args, arg is required)"
)
}
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"twoargs"
,
"value1"
,
"value2"
},
nil
,
rootCmd
)
test
([]
string
{
"noarg"
},
nil
,
[]
string
{})
if
err
!=
nil
{
testFail
([]
string
{
"noarg"
,
"value!"
},
"provided an arg, but command didn't define any"
)
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)"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"variadic"
,
"value!"
},
nil
,
rootCmd
)
test
([]
string
{
"onearg"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
if
err
!=
nil
{
testFail
([]
string
{
"onearg"
},
"didn't provide any args, arg is required"
)
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)"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"optional"
,
"value!"
},
nil
,
rootCmd
)
test
([]
string
{
"twoargs"
,
"value1"
,
"value2"
},
nil
,
[]
string
{
"value1"
,
"value2"
})
if
err
!=
nil
{
testFail
([]
string
{
"twoargs"
,
"value!"
},
"only provided 1 arg, needs 2"
)
t
.
Error
(
"Should have passed"
)
testFail
([]
string
{
"twoargs"
},
"didn't provide any args, 2 required"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"optional"
},
nil
,
rootCmd
)
if
err
!=
nil
{
t
.
Error
(
"Should have passed"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
},
nil
,
rootCmd
)
test
([]
string
{
"variadic"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
if
err
!=
nil
{
test
([]
string
{
"variadic"
,
"value1"
,
"value2"
,
"value3"
},
nil
,
[]
string
{
"value1"
,
"value2"
,
"value3"
})
t
.
Error
(
"Should have passed"
)
testFail
([]
string
{
"variadic"
},
"didn't provide any args, 1 required"
)
}
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
,
"value!"
},
nil
,
rootCmd
)
test
([]
string
{
"optional"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
if
err
!=
nil
{
test
([]
string
{
"optional"
},
nil
,
[]
string
{})
t
.
Error
(
"Should have passed"
)
}
test
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
},
nil
,
[]
string
{
"value1"
,
"value2"
})
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
},
nil
,
rootCmd
)
test
([]
string
{
"reversedoptional"
,
"value!"
},
nil
,
[]
string
{
"value!"
})
if
err
==
nil
{
t
.
Error
(
"Should have failed (didn't provide any args, 1 required)"
)
testFail
([]
string
{
"reversedoptional"
},
"didn't provide any args, 1 required"
)
}
testFail
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
,
"value3"
},
"provided too many args, only takes 1"
)
_
,
_
,
_
,
err
=
Parse
([]
string
{
"reversedoptional"
,
"value1"
,
"value2"
,
"value3"
},
nil
,
rootCmd
)
if
err
==
nil
{
// Use a temp file to simulate stdin
t
.
Error
(
"Should have failed (provided too many args, only takes 1)"
)
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"
})
}
}
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