diff --git a/app.go b/app.go index 34a6ed60bb..0b3f45cfdc 100644 --- a/app.go +++ b/app.go @@ -304,6 +304,18 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) { return err } + if a.After != nil { + defer func() { + if afterErr := a.After(cCtx); afterErr != nil { + if err != nil { + err = newMultiError(err, afterErr) + } else { + err = afterErr + } + } + }() + } + if !a.HideHelp && checkHelp(cCtx) { _ = ShowAppHelp(cCtx) return nil @@ -320,18 +332,6 @@ func (a *App) RunContext(ctx context.Context, arguments []string) (err error) { return cerr } - if a.After != nil { - defer func() { - if afterErr := a.After(cCtx); afterErr != nil { - if err != nil { - err = newMultiError(err, afterErr) - } else { - err = afterErr - } - } - }() - } - if a.Before != nil { beforeErr := a.Before(cCtx) if beforeErr != nil { diff --git a/app_test.go b/app_test.go index 1d2695d3cc..cc77ce3451 100644 --- a/app_test.go +++ b/app_test.go @@ -1309,6 +1309,27 @@ func TestApp_AfterFunc(t *testing.T) { if counts.SubCommand != 1 { t.Errorf("Subcommand not executed when expected") } + + /* + reset + */ + counts = &opCounts{} + + // run with none args + err = app.Run([]string{"command"}) + + // should be the same error produced by the Before func + if err != nil { + t.Fatalf("Run error: %s", err) + } + + if counts.After != 1 { + t.Errorf("After() not executed when expected") + } + + if counts.SubCommand != 0 { + t.Errorf("Subcommand not executed when expected") + } } func TestAppNoHelpFlag(t *testing.T) {