summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/spf13/cobra/zsh_completions_test.go
blob: 34e69496f20a9b5537900290d0cec6cd758e388d (plain)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package cobra

import (
	"bytes"
	"strings"
	"testing"
)

func TestZshCompletion(t *testing.T) {
	tcs := []struct {
		name                string
		root                *Command
		expectedExpressions []string
	}{
		{
			name:                "trivial",
			root:                &Command{Use: "trivialapp"},
			expectedExpressions: []string{"#compdef trivial"},
		},
		{
			name: "linear",
			root: func() *Command {
				r := &Command{Use: "linear"}

				sub1 := &Command{Use: "sub1"}
				r.AddCommand(sub1)

				sub2 := &Command{Use: "sub2"}
				sub1.AddCommand(sub2)

				sub3 := &Command{Use: "sub3"}
				sub2.AddCommand(sub3)
				return r
			}(),
			expectedExpressions: []string{"sub1", "sub2", "sub3"},
		},
		{
			name: "flat",
			root: func() *Command {
				r := &Command{Use: "flat"}
				r.AddCommand(&Command{Use: "c1"})
				r.AddCommand(&Command{Use: "c2"})
				return r
			}(),
			expectedExpressions: []string{"(c1 c2)"},
		},
		{
			name: "tree",
			root: func() *Command {
				r := &Command{Use: "tree"}

				sub1 := &Command{Use: "sub1"}
				r.AddCommand(sub1)

				sub11 := &Command{Use: "sub11"}
				sub12 := &Command{Use: "sub12"}

				sub1.AddCommand(sub11)
				sub1.AddCommand(sub12)

				sub2 := &Command{Use: "sub2"}
				r.AddCommand(sub2)

				sub21 := &Command{Use: "sub21"}
				sub22 := &Command{Use: "sub22"}

				sub2.AddCommand(sub21)
				sub2.AddCommand(sub22)

				return r
			}(),
			expectedExpressions: []string{"(sub11 sub12)", "(sub21 sub22)"},
		},
	}

	for _, tc := range tcs {
		t.Run(tc.name, func(t *testing.T) {
			buf := new(bytes.Buffer)
			tc.root.GenZshCompletion(buf)
			output := buf.String()

			for _, expectedExpression := range tc.expectedExpressions {
				if !strings.Contains(output, expectedExpression) {
					t.Errorf("Expected completion to contain %q somewhere; got %q", expectedExpression, output)
				}
			}
		})
	}
}