summaryrefslogtreecommitdiff
path: root/usage_test.go
diff options
context:
space:
mode:
authorAlex Flint <[email protected]>2021-09-18 08:57:29 -0700
committerGitHub <[email protected]>2021-09-18 08:57:29 -0700
commita4afd6a8490903fdc93b319be0d54bd2039c3f08 (patch)
tree8441653724d058566ba492200900a5c6cca84d17 /usage_test.go
parent66cb696e79be30bc979cb003ef8bdecc78266ced (diff)
parentf2f876420ce7c64673cdf97ed8071db8ef46e5f2 (diff)
Merge pull request #156 from alexflint/usage-for-subcommands
add FailSubcommand, WriteUsageForSubcommand, WriteHelpForSubcommand
Diffstat (limited to 'usage_test.go')
-rw-r--r--usage_test.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/usage_test.go b/usage_test.go
index 1b6c475..f790e34 100644
--- a/usage_test.go
+++ b/usage_test.go
@@ -352,9 +352,45 @@ Global options:
p.WriteHelp(&help)
assert.Equal(t, expectedHelp[1:], help.String())
+ var help2 bytes.Buffer
+ p.WriteHelpForSubcommand(&help2, "child", "nested")
+ assert.Equal(t, expectedHelp[1:], help2.String())
+
var usage bytes.Buffer
p.WriteUsage(&usage)
assert.Equal(t, expectedUsage, strings.TrimSpace(usage.String()))
+
+ var usage2 bytes.Buffer
+ p.WriteUsageForSubcommand(&usage2, "child", "nested")
+ assert.Equal(t, expectedUsage, strings.TrimSpace(usage2.String()))
+}
+
+func TestNonexistentSubcommand(t *testing.T) {
+ var args struct {
+ sub *struct{} `arg:"subcommand"`
+ }
+ p, err := NewParser(Config{}, &args)
+ require.NoError(t, err)
+
+ var b bytes.Buffer
+
+ err = p.WriteUsageForSubcommand(&b, "does_not_exist")
+ assert.Error(t, err)
+
+ err = p.WriteHelpForSubcommand(&b, "does_not_exist")
+ assert.Error(t, err)
+
+ err = p.FailSubcommand("something went wrong", "does_not_exist")
+ assert.Error(t, err)
+
+ err = p.WriteUsageForSubcommand(&b, "sub", "does_not_exist")
+ assert.Error(t, err)
+
+ err = p.WriteHelpForSubcommand(&b, "sub", "does_not_exist")
+ assert.Error(t, err)
+
+ err = p.FailSubcommand("something went wrong", "sub", "does_not_exist")
+ assert.Error(t, err)
}
func TestUsageWithoutLongNames(t *testing.T) {
@@ -468,3 +504,35 @@ error: something went wrong
assert.Equal(t, expectedStdout[1:], b.String())
assert.Equal(t, -1, exitCode)
}
+
+func TestFailSubcommand(t *testing.T) {
+ originalStderr := stderr
+ originalExit := osExit
+ defer func() {
+ stderr = originalStderr
+ osExit = originalExit
+ }()
+
+ var b bytes.Buffer
+ stderr = &b
+
+ var exitCode int
+ osExit = func(code int) { exitCode = code }
+
+ expectedStdout := `
+Usage: example sub
+error: something went wrong
+`
+
+ var args struct {
+ Sub *struct{} `arg:"subcommand"`
+ }
+ p, err := NewParser(Config{Program: "example"}, &args)
+ require.NoError(t, err)
+
+ err = p.FailSubcommand("something went wrong", "sub")
+ require.NoError(t, err)
+
+ assert.Equal(t, expectedStdout[1:], b.String())
+ assert.Equal(t, -1, exitCode)
+}