mirror of
https://github.com/spf13/cobra
synced 2024-11-24 22:57:12 +00:00
123 lines
3.5 KiB
Go
123 lines
3.5 KiB
Go
|
package cobra
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"strings"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
func TestPowerShellCompletion(t *testing.T) {
|
||
|
tcs := []struct {
|
||
|
name string
|
||
|
root *Command
|
||
|
expectedExpressions []string
|
||
|
}{
|
||
|
{
|
||
|
name: "trivial",
|
||
|
root: &Command{Use: "trivialapp"},
|
||
|
expectedExpressions: []string{
|
||
|
"Register-ArgumentCompleter -Native -CommandName 'trivialapp' -ScriptBlock",
|
||
|
"$command = @(\n 'trivialapp'\n",
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
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{
|
||
|
"'tree'",
|
||
|
"[CompletionResult]::new('sub1', 'sub1', [CompletionResultType]::ParameterValue, '')",
|
||
|
"[CompletionResult]::new('sub2', 'sub2', [CompletionResultType]::ParameterValue, '')",
|
||
|
"'tree;sub1'",
|
||
|
"[CompletionResult]::new('sub11', 'sub11', [CompletionResultType]::ParameterValue, '')",
|
||
|
"[CompletionResult]::new('sub12', 'sub12', [CompletionResultType]::ParameterValue, '')",
|
||
|
"'tree;sub1;sub11'",
|
||
|
"'tree;sub1;sub12'",
|
||
|
"'tree;sub2'",
|
||
|
"[CompletionResult]::new('sub21', 'sub21', [CompletionResultType]::ParameterValue, '')",
|
||
|
"[CompletionResult]::new('sub22', 'sub22', [CompletionResultType]::ParameterValue, '')",
|
||
|
"'tree;sub2;sub21'",
|
||
|
"'tree;sub2;sub22'",
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "flags",
|
||
|
root: func() *Command {
|
||
|
r := &Command{Use: "flags"}
|
||
|
r.Flags().StringP("flag1", "a", "", "")
|
||
|
r.Flags().String("flag2", "", "")
|
||
|
|
||
|
sub1 := &Command{Use: "sub1"}
|
||
|
sub1.Flags().StringP("flag3", "c", "", "")
|
||
|
r.AddCommand(sub1)
|
||
|
|
||
|
return r
|
||
|
}(),
|
||
|
expectedExpressions: []string{
|
||
|
"'flags'",
|
||
|
"[CompletionResult]::new('-a', 'a', [CompletionResultType]::ParameterName, '')",
|
||
|
"[CompletionResult]::new('--flag1', 'flag1', [CompletionResultType]::ParameterName, '')",
|
||
|
"[CompletionResult]::new('--flag2', 'flag2', [CompletionResultType]::ParameterName, '')",
|
||
|
"[CompletionResult]::new('sub1', 'sub1', [CompletionResultType]::ParameterValue, '')",
|
||
|
"'flags;sub1'",
|
||
|
"[CompletionResult]::new('-c', 'c', [CompletionResultType]::ParameterName, '')",
|
||
|
"[CompletionResult]::new('--flag3', 'flag3', [CompletionResultType]::ParameterName, '')",
|
||
|
},
|
||
|
},
|
||
|
{
|
||
|
name: "usage",
|
||
|
root: func() *Command {
|
||
|
r := &Command{Use: "usage"}
|
||
|
r.Flags().String("flag", "", "this describes the usage of the 'flag' flag")
|
||
|
|
||
|
sub1 := &Command{
|
||
|
Use: "sub1",
|
||
|
Short: "short describes 'sub1'",
|
||
|
}
|
||
|
r.AddCommand(sub1)
|
||
|
|
||
|
return r
|
||
|
}(),
|
||
|
expectedExpressions: []string{
|
||
|
"[CompletionResult]::new('--flag', 'flag', [CompletionResultType]::ParameterName, 'this describes the usage of the ''flag'' flag')",
|
||
|
"[CompletionResult]::new('sub1', 'sub1', [CompletionResultType]::ParameterValue, 'short describes ''sub1''')",
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
for _, tc := range tcs {
|
||
|
t.Run(tc.name, func(t *testing.T) {
|
||
|
buf := new(bytes.Buffer)
|
||
|
tc.root.GenPowerShellCompletion(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)
|
||
|
}
|
||
|
}
|
||
|
})
|
||
|
}
|
||
|
}
|