9 func TestZshCompletion(t *testing.T) {
13 expectedExpressions []string
17 root: &Command{Use: "trivialapp"},
18 expectedExpressions: []string{"#compdef trivial"},
22 root: func() *Command {
23 r := &Command{Use: "linear"}
25 sub1 := &Command{Use: "sub1"}
28 sub2 := &Command{Use: "sub2"}
31 sub3 := &Command{Use: "sub3"}
35 expectedExpressions: []string{"sub1", "sub2", "sub3"},
39 root: func() *Command {
40 r := &Command{Use: "flat"}
41 r.AddCommand(&Command{Use: "c1"})
42 r.AddCommand(&Command{Use: "c2"})
45 expectedExpressions: []string{"(c1 c2)"},
49 root: func() *Command {
50 r := &Command{Use: "tree"}
52 sub1 := &Command{Use: "sub1"}
55 sub11 := &Command{Use: "sub11"}
56 sub12 := &Command{Use: "sub12"}
58 sub1.AddCommand(sub11)
59 sub1.AddCommand(sub12)
61 sub2 := &Command{Use: "sub2"}
64 sub21 := &Command{Use: "sub21"}
65 sub22 := &Command{Use: "sub22"}
67 sub2.AddCommand(sub21)
68 sub2.AddCommand(sub22)
72 expectedExpressions: []string{"(sub11 sub12)", "(sub21 sub22)"},
76 for _, tc := range tcs {
77 t.Run(tc.name, func(t *testing.T) {
78 buf := new(bytes.Buffer)
79 tc.root.GenZshCompletion(buf)
80 completion := buf.String()
81 for _, expectedExpression := range tc.expectedExpressions {
82 if !strings.Contains(completion, expectedExpression) {
83 t.Errorf("expected completion to contain '%v' somewhere; got '%v'", expectedExpression, completion)