test expandOpts
This commit is contained in:
parent
ec5eff4150
commit
db3f01e142
2 changed files with 32 additions and 3 deletions
|
|
@ -145,16 +145,16 @@ func expandOpts(opts any) ([]Flag, error) {
|
||||||
for j := 0; j < v.NumField(); j++ {
|
for j := 0; j < v.NumField(); j++ {
|
||||||
field := v.Field(j)
|
field := v.Field(j)
|
||||||
if field.Kind() != reflect.Struct {
|
if field.Kind() != reflect.Struct {
|
||||||
return nil, ParseError{fmt.Sprintf("needs a struct: %#v", field.Kind())}
|
return nil, ParseError{fmt.Sprintf("field must be a struct: %#v", field.Kind())}
|
||||||
}
|
}
|
||||||
if !field.CanAddr() {
|
if !field.CanAddr() {
|
||||||
return nil, ParseError{fmt.Sprintf("needs an addressable type: %#v", field.Type())}
|
return nil, ParseError{fmt.Sprintf("field must be addressable type: %#v", field.Type())}
|
||||||
}
|
}
|
||||||
// NOTE: Addr() gets the underlying address:
|
// NOTE: Addr() gets the underlying address:
|
||||||
if f, ok := field.Addr().Interface().(Flag); ok {
|
if f, ok := field.Addr().Interface().(Flag); ok {
|
||||||
flags = append(flags, f)
|
flags = append(flags, f)
|
||||||
} else {
|
} else {
|
||||||
return nil, ParseError{fmt.Sprintf("needs a []Flag interface: %#v", field.Type())}
|
return nil, ParseError{fmt.Sprintf("field must be a []Flag interface: %#v", field.Type())}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return flags, nil
|
return flags, nil
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,35 @@ func TestParseArgsHelp(t *testing.T) {
|
||||||
assert.True(t, opts.Help.Val)
|
assert.True(t, opts.Help.Val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestExpandOpts(t *testing.T) {
|
||||||
|
opts := initOpts()
|
||||||
|
flags, err := expandOpts(&opts)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, &opts.Descriptor, flags[0])
|
||||||
|
assert.Equal(t, &opts.Tags, flags[1])
|
||||||
|
assert.Equal(t, &opts.Source, flags[2])
|
||||||
|
assert.Equal(t, &opts.Write, flags[3])
|
||||||
|
assert.Equal(t, &opts.Help, flags[4])
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExpandOptsNeedsPointer(t *testing.T) {
|
||||||
|
opts := initOpts()
|
||||||
|
_, err := expandOpts(opts)
|
||||||
|
assert.ErrorContains(t, err, "needs a pointer to a struct")
|
||||||
|
err = ParseArgs(helpErr, nil, opts)
|
||||||
|
assert.ErrorContains(t, err, "needs a pointer to a struct")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestExpandOptsNeedsStruct(t *testing.T) {
|
||||||
|
badOpts := struct {
|
||||||
|
bar string
|
||||||
|
foo bool
|
||||||
|
}{"bar", false}
|
||||||
|
|
||||||
|
_, err := expandOpts(&badOpts)
|
||||||
|
assert.ErrorContains(t, err, "field must be a struct")
|
||||||
|
}
|
||||||
|
|
||||||
func TestParseArgsString(t *testing.T) {
|
func TestParseArgsString(t *testing.T) {
|
||||||
args := []string{"--source", "foo"}
|
args := []string{"--source", "foo"}
|
||||||
opts := initOpts()
|
opts := initOpts()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue