summaryrefslogtreecommitdiff
path: root/usage_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2022-02-09 06:31:34 -0800
committerAlex Flint <[email protected]>2022-02-09 06:31:34 -0800
commit5fb236a65dd1edf0de556d5bac83a1103b9cf73a (patch)
tree0d202fcd6c6a194e8c7c14bbc3af3ed386938fe6 /usage_test.go
parentd3706100bf0cfef2b8f6f9119889541c302d72d1 (diff)
fix bracketing for non-required positionals
Diffstat (limited to 'usage_test.go')
-rw-r--r--usage_test.go82
1 files changed, 74 insertions, 8 deletions
diff --git a/usage_test.go b/usage_test.go
index f790e34..1744536 100644
--- a/usage_test.go
+++ b/usage_test.go
@@ -59,7 +59,7 @@ Options:
`
var args struct {
- Input string `arg:"positional"`
+ Input string `arg:"positional,required"`
Output []string `arg:"positional" help:"list of outputs"`
Name string `help:"name to use"`
Value int `help:"secret value"`
@@ -141,10 +141,10 @@ func TestUsageCannotMarshalToString(t *testing.T) {
}
func TestUsageLongPositionalWithHelp_legacyForm(t *testing.T) {
- expectedUsage := "Usage: example VERYLONGPOSITIONALWITHHELP"
+ expectedUsage := "Usage: example [VERYLONGPOSITIONALWITHHELP]"
expectedHelp := `
-Usage: example VERYLONGPOSITIONALWITHHELP
+Usage: example [VERYLONGPOSITIONALWITHHELP]
Positional arguments:
VERYLONGPOSITIONALWITHHELP
@@ -170,10 +170,10 @@ Options:
}
func TestUsageLongPositionalWithHelp_newForm(t *testing.T) {
- expectedUsage := "Usage: example VERYLONGPOSITIONALWITHHELP"
+ expectedUsage := "Usage: example [VERYLONGPOSITIONALWITHHELP]"
expectedHelp := `
-Usage: example VERYLONGPOSITIONALWITHHELP
+Usage: example [VERYLONGPOSITIONALWITHHELP]
Positional arguments:
VERYLONGPOSITIONALWITHHELP
@@ -285,8 +285,74 @@ Options:
assert.Equal(t, expectedUsage, strings.TrimSpace(usage.String()))
}
+func TestUsageForRequiredPositionals(t *testing.T) {
+ expectedUsage := "Usage: example REQUIRED1 REQUIRED2\n"
+ var args struct {
+ Required1 string `arg:"positional,required"`
+ Required2 string `arg:"positional,required"`
+ }
+
+ p, err := NewParser(Config{Program: "example"}, &args)
+ require.NoError(t, err)
+
+ var usage bytes.Buffer
+ p.WriteUsage(&usage)
+ assert.Equal(t, expectedUsage, usage.String())
+}
+
+func TestUsageForMixedPositionals(t *testing.T) {
+ expectedUsage := "Usage: example REQUIRED1 REQUIRED2 [OPTIONAL1 [OPTIONAL2]]\n"
+ var args struct {
+ Required1 string `arg:"positional,required"`
+ Required2 string `arg:"positional,required"`
+ Optional1 string `arg:"positional"`
+ Optional2 string `arg:"positional"`
+ }
+
+ p, err := NewParser(Config{Program: "example"}, &args)
+ require.NoError(t, err)
+
+ var usage bytes.Buffer
+ p.WriteUsage(&usage)
+ assert.Equal(t, expectedUsage, usage.String())
+}
+
+func TestUsageForRepeatedPositionals(t *testing.T) {
+ expectedUsage := "Usage: example REQUIRED1 REQUIRED2 REPEATED [REPEATED ...]\n"
+ var args struct {
+ Required1 string `arg:"positional,required"`
+ Required2 string `arg:"positional,required"`
+ Repeated []string `arg:"positional,required"`
+ }
+
+ p, err := NewParser(Config{Program: "example"}, &args)
+ require.NoError(t, err)
+
+ var usage bytes.Buffer
+ p.WriteUsage(&usage)
+ assert.Equal(t, expectedUsage, usage.String())
+}
+
+func TestUsageForMixedAndRepeatedPositionals(t *testing.T) {
+ expectedUsage := "Usage: example REQUIRED1 REQUIRED2 [OPTIONAL1 [OPTIONAL2 [REPEATED [REPEATED ...]]]]\n"
+ var args struct {
+ Required1 string `arg:"positional,required"`
+ Required2 string `arg:"positional,required"`
+ Optional1 string `arg:"positional"`
+ Optional2 string `arg:"positional"`
+ Repeated []string `arg:"positional"`
+ }
+
+ p, err := NewParser(Config{Program: "example"}, &args)
+ require.NoError(t, err)
+
+ var usage bytes.Buffer
+ p.WriteUsage(&usage)
+ assert.Equal(t, expectedUsage, usage.String())
+}
+
func TestRequiredMultiplePositionals(t *testing.T) {
- expectedUsage := "Usage: example REQUIREDMULTIPLE [REQUIREDMULTIPLE ...]"
+ expectedUsage := "Usage: example REQUIREDMULTIPLE [REQUIREDMULTIPLE ...]\n"
expectedHelp := `
Usage: example REQUIREDMULTIPLE [REQUIREDMULTIPLE ...]
@@ -301,7 +367,7 @@ Options:
RequiredMultiple []string `arg:"positional,required" help:"required multiple positional"`
}
- p, err := NewParser(Config{}, &args)
+ p, err := NewParser(Config{Program: "example"}, &args)
require.NoError(t, err)
var help bytes.Buffer
@@ -310,7 +376,7 @@ Options:
var usage bytes.Buffer
p.WriteUsage(&usage)
- assert.Equal(t, expectedUsage, strings.TrimSpace(usage.String()))
+ assert.Equal(t, expectedUsage, usage.String())
}
func TestUsageWithNestedSubcommands(t *testing.T) {