diff --git a/command.go b/command.go index 6dbb3e8..c7e8983 100644 --- a/command.go +++ b/command.go @@ -384,13 +384,22 @@ func (c *Command) Help() error { return nil } -// UsageString return usage string. +// UsageString returns usage string. func (c *Command) UsageString() string { + // Storing normal writers tmpOutput := c.outWriter + tmpErr := c.errWriter + bb := new(bytes.Buffer) c.outWriter = bb + c.errWriter = bb + c.Usage() + + // Setting things back to normal c.outWriter = tmpOutput + c.errWriter = tmpErr + return bb.String() } diff --git a/command_test.go b/command_test.go index 4f1d369..258f20a 100644 --- a/command_test.go +++ b/command_test.go @@ -1405,6 +1405,22 @@ func TestSetIn(t *testing.T) { } } +func TestUsageStringRedirected(t *testing.T) { + c := &Command{} + + c.usageFunc = func(cmd *Command) error { + cmd.Print("[stdout1]") + cmd.PrintErr("[stderr2]") + cmd.Print("[stdout3]") + return nil; + } + + expected := "[stdout1][stderr2][stdout3]" + if got := c.UsageString(); got != expected { + t.Errorf("Expected usage string to consider both stdout and stderr") + } +} + func TestFlagErrorFunc(t *testing.T) { c := &Command{Use: "c", Run: emptyRun}