-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathrun_flags_test.go
More file actions
73 lines (64 loc) · 1.96 KB
/
Copy pathrun_flags_test.go
File metadata and controls
73 lines (64 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package console
import (
"context"
"reflect"
"testing"
"github.com/spf13/cobra"
)
func TestRunCommandArgsResetsFlagDefaults(t *testing.T) {
c := New("test")
menu := c.ActiveMenu()
type runState struct {
verbose bool
verboseChanged bool
items []string
itemsChanged bool
}
var states []runState
root := &cobra.Command{Use: "root"}
cmd := &cobra.Command{
Use: "run",
RunE: func(cmd *cobra.Command, _ []string) error {
verbose, err := cmd.Flags().GetBool("verbose")
if err != nil {
return err
}
items, err := cmd.Flags().GetStringSlice("item")
if err != nil {
return err
}
states = append(states, runState{
verbose: verbose,
verboseChanged: cmd.Flags().Changed("verbose"),
items: append([]string(nil), items...),
itemsChanged: cmd.Flags().Changed("item"),
})
return nil
},
}
cmd.Flags().Bool("verbose", false, "")
cmd.Flags().StringSlice("item", []string{"base"}, "")
root.AddCommand(cmd)
menu.SetCommands(func() *cobra.Command { return root })
if err := menu.RunCommandArgs(context.Background(), []string{"run", "--verbose", "--item", "one", "--item", "two"}); err != nil {
t.Fatal(err)
}
if err := menu.RunCommandArgs(context.Background(), []string{"run"}); err != nil {
t.Fatal(err)
}
if len(states) != 2 {
t.Fatalf("executed %d times, want 2", len(states))
}
if !states[0].verbose || !states[0].verboseChanged {
t.Fatalf("first run verbose state = %+v, want true/changed", states[0])
}
if !reflect.DeepEqual(states[0].items, []string{"one", "two"}) || !states[0].itemsChanged {
t.Fatalf("first run slice state = %+v, want [one two]/changed", states[0])
}
if states[1].verbose || states[1].verboseChanged {
t.Fatalf("second run verbose state = %+v, want false/not changed", states[1])
}
if !reflect.DeepEqual(states[1].items, []string{"base"}) || states[1].itemsChanged {
t.Fatalf("second run slice state = %+v, want [base]/not changed", states[1])
}
}