fix: Propagate App.Reader to subcommands

This change copies the `Reader` set in `App` to the new `App` created for
subcommands. I've also added a basic test to demonstrate the issue.
This commit is contained in:
Travis Lane 2021-01-24 19:49:13 -05:00
parent 2e9dc401bb
commit 17032bc33c
No known key found for this signature in database
GPG Key ID: 608336C7F2978993
2 changed files with 34 additions and 0 deletions

View File

@ -897,6 +897,39 @@ func TestApp_SetStdin(t *testing.T) {
}
}
func TestApp_SetStdin_Subcommand(t *testing.T) {
buf := make([]byte, 12)
app := &App{
Name: "test",
Reader: strings.NewReader("Hello World!"),
Commands: []*Command{
{
Name: "command",
Subcommands: []*Command{
{
Name: "subcommand",
Action: func(c *Context) error {
_, err := c.App.Reader.Read(buf)
return err
},
},
},
},
},
}
err := app.Run([]string{"test", "command", "subcommand"})
if err != nil {
t.Fatalf("Run error: %s", err)
}
if string(buf) != "Hello World!" {
t.Error("App did not read input from desired reader.")
}
}
func TestApp_SetStdout(t *testing.T) {
var w bytes.Buffer

View File

@ -243,6 +243,7 @@ func (c *Command) startApp(ctx *Context) error {
app.Version = ctx.App.Version
app.HideVersion = true
app.Compiled = ctx.App.Compiled
app.Reader = ctx.App.Reader
app.Writer = ctx.App.Writer
app.ErrWriter = ctx.App.ErrWriter
app.ExitErrHandler = ctx.App.ExitErrHandler