summaryrefslogtreecommitdiff
path: root/subcommand_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2023-10-10 18:36:46 -0400
committerGitHub <[email protected]>2023-10-10 18:36:46 -0400
commitbf629a16cbe505e81b6347813a918770a3b727df (patch)
tree3098a14958c19a03d80dbb79185d9c1fb67362b4 /subcommand_test.go
parent5ec29ce7553bbbe81d99f0900df072eea56b945e (diff)
parente7a4f77ed026b53d5c2c1e1fea3001f8d7700cf7 (diff)
Merge pull request #231 from alexflint/subcommand-aliases
add subcommand aliases
Diffstat (limited to 'subcommand_test.go')
-rw-r--r--subcommand_test.go95
1 files changed, 95 insertions, 0 deletions
diff --git a/subcommand_test.go b/subcommand_test.go
index 2c61dd3..00efae0 100644
--- a/subcommand_test.go
+++ b/subcommand_test.go
@@ -83,6 +83,19 @@ func TestNamedSubcommand(t *testing.T) {
assert.Equal(t, []string{"ls"}, p.SubcommandNames())
}
+func TestSubcommandAliases(t *testing.T) {
+ type listCmd struct {
+ }
+ var args struct {
+ List *listCmd `arg:"subcommand:list|ls"`
+ }
+ p, err := pparse("ls", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, args.List, p.Subcommand())
+ assert.Equal(t, []string{"ls"}, p.SubcommandNames())
+}
+
func TestEmptySubcommand(t *testing.T) {
type listCmd struct {
}
@@ -113,6 +126,23 @@ func TestTwoSubcommands(t *testing.T) {
assert.Equal(t, []string{"list"}, p.SubcommandNames())
}
+func TestTwoSubcommandsWithAliases(t *testing.T) {
+ type getCmd struct {
+ }
+ type listCmd struct {
+ }
+ var args struct {
+ Get *getCmd `arg:"subcommand:get|g"`
+ List *listCmd `arg:"subcommand:list|ls"`
+ }
+ p, err := pparse("ls", &args)
+ require.NoError(t, err)
+ assert.Nil(t, args.Get)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, args.List, p.Subcommand())
+ assert.Equal(t, []string{"ls"}, p.SubcommandNames())
+}
+
func TestSubcommandsWithOptions(t *testing.T) {
type getCmd struct {
Name string
@@ -275,6 +305,60 @@ func TestNestedSubcommands(t *testing.T) {
}
}
+func TestNestedSubcommandsWithAliases(t *testing.T) {
+ type child struct{}
+ type parent struct {
+ Child *child `arg:"subcommand:child|ch"`
+ }
+ type grandparent struct {
+ Parent *parent `arg:"subcommand:parent|pa"`
+ }
+ type root struct {
+ Grandparent *grandparent `arg:"subcommand:grandparent|gp"`
+ }
+
+ {
+ var args root
+ p, err := pparse("gp parent child", &args)
+ require.NoError(t, err)
+ require.NotNil(t, args.Grandparent)
+ require.NotNil(t, args.Grandparent.Parent)
+ require.NotNil(t, args.Grandparent.Parent.Child)
+ assert.Equal(t, args.Grandparent.Parent.Child, p.Subcommand())
+ assert.Equal(t, []string{"gp", "parent", "child"}, p.SubcommandNames())
+ }
+
+ {
+ var args root
+ p, err := pparse("grandparent pa", &args)
+ require.NoError(t, err)
+ require.NotNil(t, args.Grandparent)
+ require.NotNil(t, args.Grandparent.Parent)
+ require.Nil(t, args.Grandparent.Parent.Child)
+ assert.Equal(t, args.Grandparent.Parent, p.Subcommand())
+ assert.Equal(t, []string{"grandparent", "pa"}, p.SubcommandNames())
+ }
+
+ {
+ var args root
+ p, err := pparse("grandparent", &args)
+ require.NoError(t, err)
+ require.NotNil(t, args.Grandparent)
+ require.Nil(t, args.Grandparent.Parent)
+ assert.Equal(t, args.Grandparent, p.Subcommand())
+ assert.Equal(t, []string{"grandparent"}, p.SubcommandNames())
+ }
+
+ {
+ var args root
+ p, err := pparse("", &args)
+ require.NoError(t, err)
+ require.Nil(t, args.Grandparent)
+ assert.Nil(t, p.Subcommand())
+ assert.Empty(t, p.SubcommandNames())
+ }
+}
+
func TestSubcommandsWithPositionals(t *testing.T) {
type listCmd struct {
Pattern string `arg:"positional"`
@@ -411,3 +495,14 @@ func TestValForNilStruct(t *testing.T) {
v := p.val(path{fields: []reflect.StructField{subField, subField}})
assert.False(t, v.IsValid())
}
+
+func TestSubcommandInvalidInternal(t *testing.T) {
+ // this situation should never arise in practice but still good to test for it
+ var cmd struct{}
+ p, err := NewParser(Config{}, &cmd)
+ require.NoError(t, err)
+
+ p.subcommand = []string{"should", "never", "happen"}
+ sub := p.Subcommand()
+ assert.Nil(t, sub)
+}