summaryrefslogtreecommitdiff
path: root/subcommand_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2019-05-03 11:21:34 -0700
committerAlex Flint <[email protected]>2019-05-03 11:21:34 -0700
commitc6473c4586765df1407072d27a0db2f95e35d7ce (patch)
tree5db5d310aa1c1e798b0d4df6b918b6d40014a7f3 /subcommand_test.go
parente55b361498fd8d1c697984e095d017fdb679b60d (diff)
add tests for nested subcommands and subcommands with positionals
Diffstat (limited to 'subcommand_test.go')
-rw-r--r--subcommand_test.go163
1 files changed, 161 insertions, 2 deletions
diff --git a/subcommand_test.go b/subcommand_test.go
index 783ff9c..fdc3ff4 100644
--- a/subcommand_test.go
+++ b/subcommand_test.go
@@ -172,9 +172,168 @@ func TestSubcommandsWithOptions(t *testing.T) {
}
func TestNestedSubcommands(t *testing.T) {
- // tree of subcommands
+ type child struct{}
+ type parent struct {
+ Child *child `arg:"subcommand"`
+ }
+ type grandparent struct {
+ Parent *parent `arg:"subcommand"`
+ }
+ type root struct {
+ Grandparent *grandparent `arg:"subcommand"`
+ }
+
+ {
+ var args root
+ err := parse("grandparent 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)
+ }
+
+ {
+ var args root
+ err := parse("grandparent parent", &args)
+ require.NoError(t, err)
+ require.NotNil(t, args.Grandparent)
+ require.NotNil(t, args.Grandparent.Parent)
+ require.Nil(t, args.Grandparent.Parent.Child)
+ }
+
+ {
+ var args root
+ err := parse("grandparent", &args)
+ require.NoError(t, err)
+ require.NotNil(t, args.Grandparent)
+ require.Nil(t, args.Grandparent.Parent)
+ }
+
+ {
+ var args root
+ err := parse("", &args)
+ require.NoError(t, err)
+ require.Nil(t, args.Grandparent)
+ }
}
func TestSubcommandsWithPositionals(t *testing.T) {
- // subcommands with positional arguments
+ type listCmd struct {
+ Pattern string `arg:"positional"`
+ }
+ type cmd struct {
+ Format string
+ List *listCmd `arg:"subcommand"`
+ }
+
+ {
+ var args cmd
+ err := parse("list", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, "", args.List.Pattern)
+ }
+
+ {
+ var args cmd
+ err := parse("list --format json", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, "", args.List.Pattern)
+ assert.Equal(t, "json", args.Format)
+ }
+
+ {
+ var args cmd
+ err := parse("list somepattern", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, "somepattern", args.List.Pattern)
+ }
+
+ {
+ var args cmd
+ err := parse("list somepattern --format json", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, "somepattern", args.List.Pattern)
+ assert.Equal(t, "json", args.Format)
+ }
+
+ {
+ var args cmd
+ err := parse("list --format json somepattern", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, "somepattern", args.List.Pattern)
+ assert.Equal(t, "json", args.Format)
+ }
+
+ {
+ var args cmd
+ err := parse("--format json list somepattern", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.List)
+ assert.Equal(t, "somepattern", args.List.Pattern)
+ assert.Equal(t, "json", args.Format)
+ }
+
+ {
+ var args cmd
+ err := parse("--format json", &args)
+ require.NoError(t, err)
+ assert.Nil(t, args.List)
+ assert.Equal(t, "json", args.Format)
+ }
+}
+func TestSubcommandsWithMultiplePositionals(t *testing.T) {
+ type getCmd struct {
+ Items []string `arg:"positional"`
+ }
+ type cmd struct {
+ Limit int
+ Get *getCmd `arg:"subcommand"`
+ }
+
+ {
+ var args cmd
+ err := parse("get", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.Get)
+ assert.Empty(t, args.Get.Items)
+ }
+
+ {
+ var args cmd
+ err := parse("get --limit 5", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.Get)
+ assert.Empty(t, args.Get.Items)
+ assert.Equal(t, 5, args.Limit)
+ }
+
+ {
+ var args cmd
+ err := parse("get item1", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.Get)
+ assert.Equal(t, []string{"item1"}, args.Get.Items)
+ }
+
+ {
+ var args cmd
+ err := parse("get item1 item2 item3", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.Get)
+ assert.Equal(t, []string{"item1", "item2", "item3"}, args.Get.Items)
+ }
+
+ {
+ var args cmd
+ err := parse("get item1 --limit 5 item2", &args)
+ require.NoError(t, err)
+ assert.NotNil(t, args.Get)
+ assert.Equal(t, []string{"item1", "item2"}, args.Get.Items)
+ assert.Equal(t, 5, args.Limit)
+ }
}