From 960d38c3ce9120355d59dc8f7ae83593046cf519 Mon Sep 17 00:00:00 2001 From: Alex Flint Date: Sun, 8 Oct 2023 20:14:34 -0400 Subject: [PATCH] add some more tests for subcommand aliases --- subcommand_test.go | 84 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/subcommand_test.go b/subcommand_test.go index 2c61dd3..b215d3d 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"`