summaryrefslogtreecommitdiff
path: root/parse_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2021-04-19 19:27:31 -0700
committerGitHub <[email protected]>2021-04-19 19:27:31 -0700
commit6a01a15f75472271568c732c1191e9d33a5fc54c (patch)
tree4accbdd65152994d4e2b043ad81751dce86af93e /parse_test.go
parentf4eb7f3a585abd65b0568428b2b9fde8cebffb6a (diff)
parentd4b9b2a00813ef6f28f75a685bd868aab4609ec4 (diff)
Merge pull request #149 from alexflint/parse-into-map
Add support for parsing into a map
Diffstat (limited to 'parse_test.go')
-rw-r--r--parse_test.go67
1 files changed, 66 insertions, 1 deletions
diff --git a/parse_test.go b/parse_test.go
index ce3068e..d03cbfd 100644
--- a/parse_test.go
+++ b/parse_test.go
@@ -220,6 +220,60 @@ func TestLongFlag(t *testing.T) {
assert.Equal(t, "xyz", args.Foo)
}
+func TestSlice(t *testing.T) {
+ var args struct {
+ Strings []string
+ }
+ err := parse("--strings a b c", &args)
+ require.NoError(t, err)
+ assert.Equal(t, []string{"a", "b", "c"}, args.Strings)
+}
+func TestSliceOfBools(t *testing.T) {
+ var args struct {
+ B []bool
+ }
+
+ err := parse("--b true false true", &args)
+ require.NoError(t, err)
+ assert.Equal(t, []bool{true, false, true}, args.B)
+}
+
+func TestMap(t *testing.T) {
+ var args struct {
+ Values map[string]int
+ }
+ err := parse("--values a=1 b=2 c=3", &args)
+ require.NoError(t, err)
+ assert.Len(t, args.Values, 3)
+ assert.Equal(t, 1, args.Values["a"])
+ assert.Equal(t, 2, args.Values["b"])
+ assert.Equal(t, 3, args.Values["c"])
+}
+
+func TestMapPositional(t *testing.T) {
+ var args struct {
+ Values map[string]int `arg:"positional"`
+ }
+ err := parse("a=1 b=2 c=3", &args)
+ require.NoError(t, err)
+ assert.Len(t, args.Values, 3)
+ assert.Equal(t, 1, args.Values["a"])
+ assert.Equal(t, 2, args.Values["b"])
+ assert.Equal(t, 3, args.Values["c"])
+}
+
+func TestMapWithSeparate(t *testing.T) {
+ var args struct {
+ Values map[string]int `arg:"separate"`
+ }
+ err := parse("--values a=1 --values b=2 --values c=3", &args)
+ require.NoError(t, err)
+ assert.Len(t, args.Values, 3)
+ assert.Equal(t, 1, args.Values["a"])
+ assert.Equal(t, 2, args.Values["b"])
+ assert.Equal(t, 3, args.Values["c"])
+}
+
func TestPlaceholder(t *testing.T) {
var args struct {
Input string `arg:"positional" placeholder:"SRC"`
@@ -688,6 +742,17 @@ func TestEnvironmentVariableSliceArgumentWrongType(t *testing.T) {
assert.Error(t, err)
}
+func TestEnvironmentVariableMap(t *testing.T) {
+ var args struct {
+ Foo map[int]string `arg:"env"`
+ }
+ setenv(t, "FOO", "1=one,99=ninetynine")
+ MustParse(&args)
+ assert.Len(t, args.Foo, 2)
+ assert.Equal(t, "one", args.Foo[1])
+ assert.Equal(t, "ninetynine", args.Foo[99])
+}
+
func TestEnvironmentVariableIgnored(t *testing.T) {
var args struct {
Foo string `arg:"env"`
@@ -1223,7 +1288,7 @@ func TestDefaultValuesNotAllowedWithSlice(t *testing.T) {
}
err := parse("", &args)
- assert.EqualError(t, err, ".A: default values are not supported for slice fields")
+ assert.EqualError(t, err, ".A: default values are not supported for slice or map fields")
}
func TestUnexportedFieldsSkipped(t *testing.T) {