Skip to content

Commit

Permalink
Fix the problem with errors
Browse files Browse the repository at this point in the history
  • Loading branch information
illia-v committed May 14, 2018
1 parent fa5fe31 commit 89714b6
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 7 deletions.
23 changes: 16 additions & 7 deletions parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -276,19 +276,28 @@ func process(specs []*spec, args []string) error {
}
if spec.env != "" {
if value, found := os.LookupEnv(spec.env); found {
var err error
if spec.multiple {
// expect a CSV string in an environment
// variable in the case of multiple values
values, err := csv.NewReader(strings.NewReader(value)).Read()
if err == nil {
err = setSlice(spec.dest, values, !spec.separate)
if err != nil {
return fmt.Errorf(
"error reading a CSV string from environment variable %s with multiple values: %v",
spec.env,
err,
)
}
if err = setSlice(spec.dest, values, !spec.separate); err != nil {
return fmt.Errorf(
"error processing environment variable %s with multiple values: %v",
spec.env,
err,
)
}
} else {
err = scalar.ParseValue(spec.dest, value)
}
if err != nil {
return fmt.Errorf("error processing environment variable %s: %v", spec.env, err)
if err := scalar.ParseValue(spec.dest, value); err != nil {
return fmt.Errorf("error processing environment variable %s: %v", spec.env, err)
}
}
spec.wasPresent = true
}
Expand Down
18 changes: 18 additions & 0 deletions parse_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,24 @@ func TestEnvironmentVariableSliceArgumentBool(t *testing.T) {
assert.Equal(t, []bool{true, false, false, true}, args.Foo)
}

func TestEnvironmentVariableSliceArgumentWrongCsv(t *testing.T) {
var args struct {
Foo []int `arg:"env"`
}
setenv(t, "FOO", "1,99\"")
err := Parse(&args)
assert.Error(t, err)
}

func TestEnvironmentVariableSliceArgumentWrongType(t *testing.T) {
var args struct {
Foo []bool `arg:"env"`
}
setenv(t, "FOO", "one,two")
err := Parse(&args)
assert.Error(t, err)
}

type textUnmarshaler struct {
val int
}
Expand Down

0 comments on commit 89714b6

Please sign in to comment.